WPF Bildverarbeitung: Übungen ImageJ

 

 

Prof. Dr. Wolfgang Konen                          TH Köln                                                       SS21

 

Download ImageJ-Tutorial von W. Bailer im ILIAS-Verzeichnis zu WPF BV

 

Inhalt

WPF Bildverarbeitung: Übungen ImageJ. 1

Benutzung ImageJ. 1

Bildbearbeitung mit ImageJ. 2

ImageJ-Plugins programmieren. 3

 

 

Benutzung ImageJ

Ü1.             Bilder und Selektionen

Starten Sie ImageJ.
Machen Sie sich mit den wichtigsten Befehlen im
Menü "Edit" vertraut.
Laden Sie das Bild
images\baboon.jpg.

o   Wählen Sie eine genau 150x100 Pixel (w x h) große Region aus dem Bild aus.

o   Erzeugen Sie ein neues Bild "Ausschnitt-baboon", das genau diese Region enthält (mind. 2 verschiedene Methoden)

o   Erzeugen Sie jetzt eine Kopie des Originalbildes "Neg-baboon", für die Sie das Negativ erzeugen (Schwarz wird Weiß, Blau wird Orange usw.).  Mit welchem Shortcut kann man das Negativ bilden?

o   Kontrollieren Sie für Pixel (x,y)=(176,68): Welche RGB-Werte hat es im Original, welche RGB-Werte im Negativbild? Wie ist wohl die Formel für die Umrechnung?

 

Ü2.             Bilder konvertieren / modifizieren

Machen Sie sich mit den wichtigsten Befehlen im Menü "Image" vertraut (OHNE Stack, OHNE Lookup Tables).
Laden Sie das Bild images\baboon.jpg.

o   Wählen Sie eine beliebig platzierte 120x100 Region aus und packen Sie diese in ein neues Bild (s. Ü1)

o   Machen Sie daraus ein doppelt so großes Bild (Faktor 2 mehr Pixel in jeder Richtung) (2 Möglichkeiten)

o   Was ist der Unterschied zu Zoom auf 200%?

o   Konvertieren Sie den Ausschnitt auf 8-Bit-Grauwertbild und speichern Sie dies als "baboon-grey.jpg" ab.

o   Was passiert, wenn Sie den Ausschnitt jetzt wieder auf RGB konvertieren? Ist also RGB  8-Bit-Grau  RGB eine invariante Operation?

o    Wäre 8-Bit-Grau  RGB  8-Bit-Grau eine invariante Operation?

 

 

Ü3.                  Macros

Mit Macros lassen sich Bildverarbeitungsschritte in ImageJ ähnlich wie mit einer Skriptsprache automatisieren.

o   Schalten Sie den Macro-Recorder ein (Plugins – MacrosRecord...) und führen Sie die Verarbeitungsschritte aus Ü2 erneut durch.

o   Speichern Sie das Macro als "MacroBaboon.txt" ab.

o   Installieren Sie dieses Macro und bringen es erneut zur Ausführung

 

 

Ü4.                  Beispiel-Macros


Spielen Sie einige Macros aus dem Ordner <ImageJ>/macros durch (Plugins – Macros – Edit..., im Edit-Window dann Run Macro (Strg+R)). Versuchen Sie nachzuvollziehen, was das jeweilige Macro macht und wie es dies mit seinen einzelnen Befehlen macht. Schlagen Sie Befehle, deren Bedeutung Ihnen unklar bleibt, bei ImageJ nach: entweder Resources – ImageJ Macro Language oder Built-In Macro Functions. Interessante Demo-Macros sind z.B.

o   DoWandDemo.ijm

o   RandomOvals.ijm

o   AnimatedGaussianBlur.ijm

o   ....



 

Bildbearbeitung mit ImageJ

Hinweis (Für DIE Nachfolgenden Übungen Ü5 + Ü6):
Nachdem Sie durch Ausprobieren wissen, wie Sie die Übung lösen können, dokumentieren Sie diese Ihre Lösung, indem Sie sie als möglichst kompaktes Macro aufzeichnen, abspeichern und ausführlich dokumentieren!
(Kommentare in Macros werden wie in Java durch "//" eingeleitet)

 

Ü5.                  Grünes Reiskorn

Laden Sie das Bild images\rice-bin.png. Erzeugen Sie durch geeignete ImageJ-Operationen ein RGB-Bild mit folgenden Eigenschaften:

o   es sieht überall so aus wie rice-bin.png,

o   außer an der Stelle des mit Pfeil markierten Reiskorns, dieses ist komplett grün gefärbt.


[Hinweis: RGB-Bild, Wand-Tool]

           

 

 

 

 

 

Ü6.                  "Blau gerahmter Affe"

Laden Sie das Bild images\baboon.jpg. Verkleinern Sie das Bild um den Faktor 2 und versehen Sie es dann mit einem genau 5 Pixel breiten blauen Rand, wie nebenstehend gezeigt.
Kontrollieren Sie durch Explorieren der Pixelwerte im Status-Bar, dass genau 5 Spalten / Zeilen den RGB-Wert für Blau haben (welcher?)



[Hinweis: Selection, erst spezifizieren, dann invertieren]

            baboon2

 

 

 

 

ImageJ-Plugins programmieren

Allgemeine Tipps:

·        Starten Sie ein neues Plugin mit Plugin – New … und speichern Sie es unter neuem Namen (z.B. My_Test.java) ab.

·        Um ein vorhandenes Plugin zu editieren, wählen Sie Plugin – Macros – Edit…

·        Es kann notwendig sein, ImageJ als Admin auszuführen, damit Plugin-Dir C:\Programme\ImageJ\plugins schreibbar ist.

·        Wie man das Plugin-Dir umbiegt, steht hier in notes_ImageJ:docx.

 

 

Ü7.                  Spieglein, Spieglein ...

Verwenden Sie MyInverter_.java aus [Burger06, S. 33] bzw. My_Inverter_A.java aus [Burger15, S. 32] als Vorlage, um ein eingenes Plugin zu programmieren, das ein Grauwertbild horizontal (oder vertikal) spiegelt. Testen Sie das neue Plugin anhand geeigneter (auch sehr kleiner) Bilder und überprüfen Sie die Ergebnisse genau.

Zusatzaufgabe: Erweitern Sie das Plugin so, dass im Falle einer im Bild definierten rechteckigen ROI (Region of Interest) nur dieses Rechteck gespiegelt wird.

Ü8.                  Weißer Rahmen

(nur wenn Zeit)

Erstellen Sie ein neues Plugin für 8-Bit-Grauwertbilder, das um (d.h. in) das übergebene Bild (beliebiger Größe) einen weißen Rahmen (Pixelwert = 255) mit 10 Pixeln Breite malt.

Ü9.                  Horizontales Rollen

-- s. Aufg. 3.4 in [Burger06]     ==     Aufg. 2.7 in [Burger15] –

Erstellen Sie ein Plugin, das ein 8-Bit-Grauwertbild horizontal und zyklisch verschiebt, bis der ursprüngliche Zustand wiederhergestellt ist.

Bauen Sie mit IJ.wait(5); nach jedem Roll-Step eine 5-ms-Wartezeit ein.

Zusatzaufgabe: Erweitern Sie das Plugin so, dass im Falle einer im Bild definierten rechteckigen ROI (Region of Interest) nur dieses horzontal gerollt wird.

Hinweis: Um das modifizierte Bild nach jeder Verschiebung am Bildschirm anzeigen zu können, benötigt man eine Referenz auf das zugehörige ImagePlus-Bild imp, das nur als Parameter der setup()-Methode zugänglich ist. Speichern Sie imp als Member ab und benutzen Sie an geeigneter Stelle imp.updateAndDraw();

 

Ü10.             Einfache GUI

Für viele Algorithmen muss man einige Parameter eingeben. ImageJ stellt einfache Methoden zur Verfügung, um aus Plugins über einen Dialog numerische Werte, Strings, Checkboxen oder Listen einzugeben: Die Klasse GenericDialog.

Arbeiten Sie die Abschnitte 6.1-6.3 aus dem Tutorial [Bailer01] durch und schreiben Sie ein Plugin, das vom User die Eingabe eines oberen und unteren Schwellwertes O und U verlangt und dann in einem Grauwertbild alle Pixel mit Grauwert aus Intervall [U,O[ auf weiß und alle anderen auf schwarz setzt (Binarisierung).


Zusatzaufgaben: a) Checken Sie, ob der User im Dialog auch gültige Zahlenwerte eingegeben hat und geben Sie fallweise eine Fehlermeldung in einer Dialogbox aus. b) Falls der User den Dialog mit ‚Cancel‘ verlässt, wird das Plugin so beendet, dass nichts an dem Bild verändert wird.

[Hinweis zu a): Methoden boolean invalidNumber() der Klasse GenericDialog und IJ.showMessage(String s)]