Automatisiertes Sporenmessen mit Fiji für Linux und Windows

  • Liebe Pilzfreunde,

    da ich selbst Linux nutze und man mich mit Windows jagen kann, habe ich mich vor einiger Zeit daran gesetzt, eine gut funktionierende linux-kompatible Alternative zur Sporenmessung zu schreiben. Sie basiert auf Fiji und ist so weit automatisiert wie möglich. Ich nutze sie mittlerweile seit einigen Monaten und bin damit sehr zufrieden. Ich habe mich bemüht, die Dokumentation so ausführlich und beginnerfreundlich wie irgend möglich zu gestalten, sodass Interessierte nicht vorzeitig entmutigt werden. Bei Fragen oder Problemen könnt ihr jederzeit unter diesen Post schreiben; ich bemühe mich, euch zeitnah zu antworten.

    Das Coden und Dokumentieren war sehr viel Arbeit, deshalb hoffe ich, dass sie bei der einen oder dem anderen hier im Pilzforum auf Interesse stößt.

    Bevor wir loslegen, möchte ich mich ganz herzlich bei boccaccio bedanken! Björn hat mir nicht nur viel über Pilze beigebracht, sondern mich auch beim Prozess begleitet, seine Ideen eingebracht und ermutigt, das Projekt fortzuführen. Ohne ihn wäre das Pilzmikroskopie-Paket nie zustande gekommen.

    Inhaltsverzeichnis

    1. Fiji installieren

    1.1. Download Windows

    Fiji erfordert keine klassische Installation. Stattdessen handelt es sich um einen portablen Ordner, der die ausführbare Datei und alle Abhängigkeiten enthält. Solange dieser Ordner vorhanden ist, lässt sich Fiji per Doppelklick starten – ohne Setup-Assistent, ohne Einträge in der Registry.


    Ein praktischer Vorteil: Der gesamte Ordner lässt sich auf einen USB-Stick kopieren und an einem anderen Rechner starten, inklusive aller eigenen Konfigurationen.

    1. Die aktuelle Version von fiji.sc herunterladen: unter Latest Downloads das passende Betriebssystem und die Prozessorarchitektur wählen (Windows: 64-Bit / x86 → Downloadserver in Europa bevorzugen).
    2. Die heruntergeladene .zip-Datei (~600 MB) per Rechtsklick → Alle extrahieren entpacken.
    3. Den entstandenen Fiji-Ordner an einen dauerhaften Ort verschieben – nicht im Downloads-Ordner belassen, da dieser leicht versehentlich geleert wird. Empfehlung: %USERPROFILE%\Fiji (Windows) bzw. ~/Fiji (Linux/macOS).
    4. Die Datei ImageJ-win64.exe (Windows) per Doppelklick starten. Bei der Windows-Sicherheitswarnung auf Weitere InformationenTrotzdem ausführen klicken.

    Optional lässt sich die .exe an die Taskleiste anheften oder eine Desktop-Verknüpfung anlegen.


    1.2. Download Linux

    1.2.1. Ubuntu

    Ubuntu-User folgen der Windows-Anleitung und downloaden die aktuelle Version (in der Regel x86-64 – außer man hat einen ARM-Prozessor).

    1.2.2. Arch Linux

    Zur Installation lässt sich pacman, pamac oder yay nutzen, um Fiji zu installieren, das Paket heißt fiji-bin. Wichtig ist, dass man den Zugriff vom chaotic AUR freigeschaltet hat. Hier wird Fiji im Gegensatz zu den anderen Installationswegen fest installiert (meist unter /opt/fiji).

    2. Pilzmikroskopie-Paket installieren

    Zunächst downloadet man das Paket über diesen Link. Wer git nutzt, kann auch clonen:

    Code
    git clone https://codeberg.org/opensource-philosophy/fiji-pilzmikroskopie-scripts.git

    Das Pilzmikroskopie-Paket ist ein Ordner mit fünf JavaScript-Scripts, der installiert wird, indem man ihn in den Scripts-Ordner von Fiji legt:

    1. Den Ordner Pilzmikroskopie/ in das Unterverzeichnis scripts/ der Fiji-Installation verschieben (per Drag & Drop oder Dateimanager), sodass die Datei-Struktur so aussieht:

      Code
      Fiji/
      └── scripts/
          └── Pilzmikroskopie/
              ├── Messbalken_hinzufügen.js
              ├── Bild_mit_Messdaten_versehen.js
              ├── Messdaten_speichern_(Linien).js
              ├── Messdaten_speichern_(Rechtecke).js
              └── Messdaten_zusammenführen.js
    2. Fiji neu starten. Im Menü erscheint jetzt ein neuer Reiter Pilzmikroskopie mit allen fünf Scripts.

    3. Kalibrierung einrichten

    Damit Fiji Abstände in Mikrometern (statt Pixeln) ausgibt, muss für jedes verwendete Objektiv die Kalibrierung (Pixel pro µm) hinterlegt werden.

    3.1. Kalibrierung messen

    1. Für jedes vorhandene Objektiv ein Bild mit dem Objektmikrometer aufnehmen und in Fiji öffnen (per Drag & Drop oder Datei → Öffnen).
    2. Das Straight Line Tool auswählen (fünftes Symbol von links in der Werkzeugleiste).
    3. Eine Linie über eine bekannte Strecke ziehen (z. B. von Balkenmitte zu Balkenmitte = 10 µm-Schritte → 5 Balken = 50 µm).
    4. Analyze → Set Scale aufrufen. Fiji zeigt die gemessene Pixelzahl.
      • Known Distance: die bekannte Distanz eintragen (z. B. 50)
      • Unit of Length: µm eingeben (Alt Gr + M drücken, dann M → µm)
      • Global aktivieren, damit die Kalibrierung für alle offenen Bilder gilt.
      • den Wert Pixel/µm notieren.

    3.2. Kalibrierung dauerhaft als Makro speichern

    Ohne weitere Maßnahmen geht die Kalibrierung beim Schließen von Fiji verloren. Um sie dauerhaft zu speichern, werden Makros in der StartupMacros-Datei hinterlegt; so wird sie bei jedem Start neu geladen.

    3.2.1. Datei öffnen

    Der Fiji-Pfad lautet Fiji/macros/StartupMacros.fiji.ijm. Diese Datei öffnen wir mit einem beliebigen Texteditor.

    3.2.2. Makros eintragen

    Am Ende der Datei folgende Makros einfügen und die distance-Werte an die eigene Messung anpassen – bei mir bspw.


    Der Wert distance gibt an, wie viele Pixel einem Mikrometer entsprechen und wurde gerade von uns notiert. Wer möchte, kann auch die Tastenkürzel in eckigen Klammern (F1, F2, F3) nach Wunsch umlegen; meine Belegung folgt der Logik: kleinste F-Taste = kleinste Vergrößerung. Wichtig: Damit die Kalibrierung angewendet werden kann, muss mindestens ein Bild geöffnet sein; Set Scale ist sonst nicht verfügbar.

    3.2.3. Änderungen speichern und testen

    1. Änderungen in StartupMacros speichern.
    2. Fiji neu starten.
    3. Ein Bild öffnen → passende F-Taste drücken → Fiji zeigt Maße in µm links über dem Bild an.

    3.3. Autorun-Script (optionale Automatisierung)

    Im Ordner Fiji/macros/AutoRun/ können .ijm-Dateien abgelegt werden, die beim Start von Fiji automatisch ausgeführt werden. Ein nützliches Autorun-Script führt beim Laden des ersten Bildes folgende Schritte durch:

    1. Es wartet 200 ms, prüft dann in einer Schleife, ob Bilder geladen sind.
    2. Es setzt den Maßstab für das Standard-Objektiv automatisch.
    3. Es wählt das Straight Line Tool aus (statt des Standard-Rechtecktools).
    4. Es öffnet den ROI Manager.
    5. Es aktiviert Show All im ROI Manager, sodass alle bereits gezogenen Linien angezeigt werden.

    Damit entfallen beim sämtliche manuelle Vorbereitungsschritte und man kann direkt losmessen. Zur Installation im Ordner Fiji/macros/AutoRun/ eine Datei mit .ijm-Endung anlegen (bspw. Sporenmessung.ijm), den folgenden Code einfügen und Fiji neu starten:


    Wer hier bspw. vorwiegend mit dem 40er-Objektiv arbeitet, soltlte run("Set scale for 100x objective"); durch run("Set scale for 40x objective"); ersetzen.

    4. Grundlegendes Messen in Fiji

    Bevor die Pilzmikroskopie-Scripts erklärt werden, hier der grundlegende Messbetrieb, den Fiji von Haus aus bietet.

    4.1. Werkzeuge

    Über Rechtsklick auf das Linientool in der Werkzeugleiste sind folgende Varianten verfügbar:

    Werkzeug Anwendung
    Straight Line Einfache gerade Linie (Normalfall)
    Segmented Line Mehrfach abknickende Linie (z. B. für ungerade Zystiden, Sporen oder Basidien)
    Rotated Rectangle Frei rotierbares Rechteck (z. B. für Entoloma-Sporen)

    4.1.1. Segmented Line

    Linksklick setzt einen Ankerpunkt. Weitere Klicks fügen Segmente hinzu. Abschluss: Linksklick auf den Startpunkt.

    4.1.2. Rotated Rectangle

    Klick und Ziehen definiert die Längsachse; eine zweite Bewegung definiert die Breite.

    4.2. ROIs anlegen und speichern

    1. Linie oder Rechteck zeichnen.
    2. T drücken → das Werkzeug wird als Region of Interest (ROI) im ROI Manager gespeichert.
    3. Für alle zu messenden Strukturen wiederholen.
    4. Show All im ROI Manager aktiviert halten, damit alle gespeicherten ROIs gleichzeitig sichtbar sind.

    4.3. Längen ablesen

    Analyze → Measure (oder Strg+M) zeigt für alle ROIs im Manager die Längen in der konfigurierten Einheit (µm bei gesetzter Kalibrierung, sonst Pixel).

    4.4. Konvention für Sporenmessungen

    Pro Spore werden zwei Linien gezogen und mit T gespeichert:

    • Erste Linie: Längsachse
    • Zweite Linie: Querachse

    Das Script Messdaten_speichern_(Linien).js setzt genau dieses Format voraus.

    4.5. Navigation

    • Mit + rein- und - rauszoomen
    • Bei eingezoometem Bild Leertaste halten und linke Maustaste gedrückt halten zum Verschieben des Ausschnitts.

    5. Die Pilzmikroskopie-Scripts

    Die fünf Scripts funktionieren unabhängig voneinander, sind aber für einen verzahnten Workflow konzipiert. Jedes Script kann interaktiv per Dialog oder vollautomatisch über Makro-Parameter gesteuert werden. Das Automatisierungsprinzip ist das Folgende: Wenn beim Aufruf mindestens ein Makro-Parameter übergeben wird, öffnet sich kein Dialogfenster. Fehlende Parameter fallen auf ihre Standardwerte zurück.

    5.1. Messbalken_hinzufügen.js

    Dieses Script zeichnet einen kalibrierten Messbalken dauerhaft in das Bild ein (kein Overlay – die Änderung ist permanent im Bildprozessor). Die auszuwählenden Optionen sind:

    5.1.1. Dialog-Parameter

    Parameter Standard Beschreibung Variable
    Pixel pro µm auto Automatisch aus Bildkalibrierung; manuell überschreibbar pixels_per_um
    Länge (µm) 10 Länge des Messbalkens in Mikrometern length_um
    Dicke (px) 10 Linienstärke des Balkens in Pixeln thickness
    Schriftgröße 30 Schriftgröße der Beschriftung font_size
    Rand vertikal (%) 5 Abstand vom vertikalen Bildrand margin_vertical
    Rand horizontal (%) 2 Abstand vom horizontalen Bildrand margin_horizontal
    Farbe Blau Weiß, Schwarz, Rot, Grün, Blau, Gelb, Magenta, Cyan color
    Position Unten rechts Unten rechts/links, Oben rechts/links position
    Vertikale Endbalken Ja Abschlusslinien an beiden Enden des Balkens endcaps


    Dieses Script nutze ich in der Regel für das Dialogmenü.

    5.1.2. Makro-Beispiel

    Code
    run("Messbalken hinzufügen",
        "pixels_per_um=44.6 length_um=10 thickness=8 font_size=28 " +
        "margin_vertical=3 margin_horizontal=2 " +
        "color=Blau position=Unten_rechts endcaps=yes");

    5.2. Messdaten_speichern_(Linien).js

    Misst alle ROIs im ROI Manager aus und exportiert die Ergebnisse als formatierte ASCII-Tabelle in eine Textdatei. Voraussetzung: Im Manager befinden sich genau zwei Linien-ROIs pro Objekt (Längsachse + Querachse). Die Gesamtanzahl muss geradzahlig sein.


    Das Script sortiert intern: Die längere Linie wird als Länge, die kürzere als Breite behandelt. Der Q-Wert (Länge ÷ Breite) wird automatisch berechnet.

    5.2.1. Ausgabeformat

    Code
    | Nr. | Länge (µm) | Breite (µm) | Q-Wert |
    |-----+------------+-------------+--------|
    |   1 |        8,4 |         4,1 |    2,0 |
    |   2 |        9,1 |         4,5 |    2,0 |
    
    Sporenmaße: 8,8 ± 0,5 µm × 4,3 ± 0,3 µm, Q̄ = 2,0 ± 0,1
    Reichweite: 8,4–9,1 µm × 4,1–4,5 µm, Q = 2,0–2,0
    n = 2

    Dateiname der Ausgabe: [Präfix] [Bildname ohne Endung].[Endung]

    5.2.2. Parameter

    Parameter Standard Beschreibung
    measurement_prefix [gemessen] Präfix im Ausgabedateinamen
    measurement_extension txt Dateiendung (ohne Punkt)
    delete_rois true ROIs nach Export löschen
    close_image true Bild nach Export schließen

    5.2.3. Makro-Beispiel

    Code
    run("Messdaten speichern (Linien)",
        "measurement_prefix=[gemessen] measurement_extension=txt " +
        "delete_rois=false close_image=false");

    5.3. Messdaten_speichern_(Rechtecke).js

    Funktioniert analog zu 5.2, jedoch für Rechteck-ROIs. Pro ROI eine Messung (nicht 2 ROIs pro Objekt). Das Script setzt intern die Messoptionen auf fit bounding display add, um Width/Height (gerade Rechtecke) oder Major/Minor (rotierte Rechtecke) zu erfassen.


    Ausgabedatei-Kopfzeile: Rechteckmaße: statt Sporenmaße:. Die Parameter sind identisch mit 5.2.

    5.4. Bild_mit_Messdaten_versehen.js

    Dieses Script liest alle ROIs aus dem ROI Manager, berechnet deren Maße aus der Bildkalibrierung und zeichnet beschriftete Overlays ins Bild. Das Ergebnis wird als neue Bilddatei gespeichert (Präfix [gemessen] vor dem Originalnamen).


    Die unterstützten ROI-Typen sind …

    1. einfache Linie
    2. segmentierte Linie
    3. Freihandlinie
    4. Rechteck
    5. rotiertes Rechteck.

    Das Script enthält eine Kollisionslogik: Wenn eine Beschriftung eine andere Linie überschneiden würde, wird das Label automatisch entlang der Linie verschoben. Bei Rechtecken werden Maßtexte stets außerhalb platziert.

    5.4.1. Dialog-Parameter

    Der Dialog ist in drei Abschnitte aufgeteilt: Einfache Linien, Segmentierte Linien, Rechtecke. Jeder Abschnitt enthält:

    Parameter Standard Beschreibung
    Linienstärke 4 / 8 / 4 Breite der Linie in Pixeln
    Linienfarbe blue Farbe als Name (blue, red, green, black …)
    Schriftgröße 40 / 80 / 40 Fontgröße der Maßbeschriftung
    Schriftfarbe blue Farbe des Beschriftungstexts
    Nachkommastellen 1 Dezimalstellen des Messwerts

    Zudem gibt es noch die folgenden Parameter:

    Parameter Standard Beschreibung
    rect_show_area false Flächeninhalt des Rechtecks anzeigen
    save_to_overlay true Overlay (true) oder ROI (false)
    save_overlay_image true Beschriftetes Bild als Datei speichern
    measurement_folder (leer) Optionaler Unterordner für gespeicherte Bilder
    close_overlay_image_after_saving true Originalbild nach dem Speichern schließen
    delete_rois_after_saving true ROIs nach dem Speichern löschen

    5.4.2. Makro-Beispiel

    Code
    run("Bild mit Messdaten versehen",
        "line_width=3 line_color=green line_font_size=36 line_digits=1 " +
        "seg_width=6 seg_color=green seg_font_size=60 seg_digits=1 " +
        "save_overlay_image=true close_overlay_image_after_saving=false " +
        "delete_rois_after_saving=false measurement_folder=gemessen");

    5.5. Messdaten_zusammenführen.js

    Dieses Script lies alle Einzelmessdateien eines Ordners (erzeugt durch Scripts 5.2 / 5.3) und führt sie zu einer Gesamtstatistik zusammen. Quelldateien werden anhand ihres Präfixes und ihrer Endung identifiziert.


    Das Script sucht im Verzeichnis des aktuell geöffneten Bildes. Alle Dateien mit passendem Präfix und passender Endung werden eingelesen, die Werte akkumuliert und eine Ausgabedatei erstellt.


    Ein Hinweis zu eckigen Klammern: Wird das Präfix im Makro-Modus ohne eckige Klammern übergeben (z. B. gemessen statt [gemessen]), ergänzt das Script die Klammern automatisch.

    5.5.1. Ausgabeformat

    Die Ausgabedatei enthält drei Abschnitte:

    1. GESAMTSTATISTIK FÜR [STRUKTUR] – Mittelwert ± SD, Reichweite, n
    2. AKKUMULIERTE MESSDATEN – vollständige Wertetabelle aller Einzelmessungen
    3. QUELLDATEIEN (optional) – Ursprungsdateien mit Nummernbereichen, Ordner, Datum und Uhrzeit

    5.5.2. Parameter

    Parameter Standard Beschreibung
    measurement_prefix [gemessen] Präfix der Quelldateien
    measurement_file_ext txt Endung der Quelldateien
    output_file [merged] Messwerte Dateiname der Ausgabedatei
    output_ext txt Endung der Ausgabedatei
    structure_to_measure Sporen Name der Struktur (Sporen, Basidien, Zystiden …)
    show_sources yes Quelldateiliste in der Ausgabe anzeigen
    delete_sources yes Quelldateien nach dem Merge löschen
    close_fiji no Fiji nach Abschluss beenden

    5.5.3. Makro-Beispiel

    Code
    run("Messdaten zusammenführen",
        "measurement_prefix=[gemessen] measurement_file_ext=txt " +
        "output_file=[merged] Messwerte output_ext=txt " +
        "structure_to_measure=Sporen show_sources=yes " +
        "delete_sources=yes close_fiji=yes");

    6. Effizienter Workflow mit Makros

    Für das tägliche Messen vieler Bilder empfiehlt sich ein Workflow, der alle Scripts über Tastenkürzel automatisch aufruft – ohne Dialoge, ohne manuelle Eingaben.

    6.1. Konzept

    Die Workflow-Makros werden in der StartupMacros-Datei hinterlegt. Jedes Makro ruft die benötigten Scripts mit festen Parametern auf und öffnet anschließend das nächste Bild im Ordner. Existiert kein nächstes Bild, wird die Gesamtstatistik automatisch erstellt und Fiji beendet. Meine Tastenbelegungen sind:

    Taste Funktion
    1 Messen + Overlay einbrennen + nächstes Bild öffnen
    2 Bild überspringen (kein Overlay, nur weiterblättern)
    3 Nur Messdaten speichern, Bild schließen (kein Overlay)
    4 Letztes Bild manuell beenden: Messdaten speichern + Zusammenführen

    6.2. Schriftgröße und Linienstärke je Objektiv

    Das Hilfsskript getWidthAndFontByScale() liest die aktuelle Kalibrierung aus und gibt passende Werte zurück:

    Objektiv Pixel/µm (ca.) Linienstärke Schriftgröße
    10× ~4,7 1 1
    25× ~11,7 1 3
    40× ~18,9 1 10
    100× ~45 1 20

    6.3. Workflow-Makros (vollständiger Code)

    6.4. Schritt-für-Schritt: Typischer Messdurchlauf

    1. Fiji starten → Autorun-Script konfiguriert Werkzeuge automatisch.
    2. Erstes Bild öffnen (Drag & Drop). Kalibrierung ggf. per F-Taste setzen.
    3. Für jede Spore: Längsachse ziehen → T, Querachse ziehen → T.
    4. Taste 1 drücken:
      1. Messdaten werden in eine .txt-Datei exportiert.
      2. Ein beschriftetes Bild ([gemessen] Bildname) wird gespeichert.
      3. Das nächste Bild im Ordner öffnet sich automatisch.
    5. Schritte 3–4 für alle weiteren Bilder wiederholen.
    6. Am letzten Bild: ROIs setzen, dann Taste 1 drücken.
      1. Das Script erkennt, dass kein weiteres Bild folgt.
      2. Alle Einzeldateien werden zur Gesamtstatistik zusammengeführt.
      3. Fiji schließt sich.

    Soll ein Bild ohne Messung übersprungen werden: Taste 2 drücken.

    7. Tipps und häufige Fehler

    7.1. Häufige Fehlermeldungen

    Fehler / Problem Ursache Lösung
    „ROI Manager ist leer" Keine ROIs vorhanden Linien zeichnen und mit T speichern, dann Script aufrufen
    „Messzahl ist ungerade oder 0" Ungerade ROI-Anzahl Genau 2 ROIs pro Spore anlegen
    Beschriftung außerhalb des Bildbereichs Schriftgröße zu groß line_font_size / seg_font_size verringern
    Farbe nicht erkannt Unbekannter Farbname Nur Java-Standardfarben verwenden (s. Abschnitt 7.2)
    Keine Quelldateien beim Zusammenführen Präfix oder Endung stimmt nicht Präfix inkl. eckiger Klammern und Dateiendung prüfen
    Bild wird im falschen Ordner gespeichert Bild noch nicht auf Disk gespeichert Bild vor dem Script-Aufruf speichern
    Kalibrierung nach Neustart weg Nicht in StartupMacros eingetragen Makros gemäß Abschnitt 3.2 in StartupMacros eintragen

    7.2. Unterstützte Farbnamen

    Parameterwert Farbe
    blue Blau
    red Rot
    green Grün
    black Schwarz
    white Weiß
    yellow Gelb
    magenta Magenta
    cyan Cyan


    Groß- und Kleinschreibung werden automatisch normalisiert.

    7.3. Präfix-Konvention

    Präfixe mit eckigen Klammern (z. B. [gemessen]) werden beim alphabetischen Sortieren im Dateimanager ganz oben angezeigt. So lassen sich gemessene und ungemessene Bilder auf einen Blick unterscheiden.

    8. Schnellübersicht

    8.1. Scripts

    Script Funktion Voraussetzung
    Messbalken_hinzufügen.js Messbalken dauerhaft ins Bild einzeichnen Geöffnetes Bild (kalibriert)
    Bild_mit_Messdaten_versehen.js Maßlinien und Beschriftungen ins Bild brennen ROIs im ROI Manager
    Messdaten_speichern_(Linien).js Sporenmaße aus Linien-ROIs exportieren Gerade Anzahl Linien-ROIs
    Messdaten_speichern_(Rechtecke).js Maße aus Rechteck-ROIs exportieren Rechteck-ROIs im Manager
    Messdaten_zusammenführen.js Einzeldateien zu Gesamtstatistik zusammenführen Gespeicherte Einzeldateien

    8.2. Tastenkürzel

    Taste Funktion
    F1 – F3 Kalibrierung setzen (10×, 40×, 100×)
    T Aktuelle Linie/ROI im ROI Manager speichern
    1 Messen + Overlay + nächstes Bild
    2 Bild überspringen
    3 Nur Messdaten speichern, Bild schließen
    4 Letztes Bild: Messdaten speichern + Zusammenführen + Fiji beenden
    + / − Rein-/Rauszoomen
    Leertaste Bild bei gedrückter linker Maustaste verschieben