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
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?
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?
Mit Macros lassen sich Bildverarbeitungsschritte in ImageJ ähnlich wie mit einer Skriptsprache automatisieren.
o Schalten Sie den Macro-Recorder ein (Plugins – Macros – Record...) 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
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 ....
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)
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.
|
|
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.
[Hinweis:
Selection, erst spezifizieren, dann invertieren] |
|
·
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.
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.
(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.
-- 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();
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)]