WPF Bildverarbeitung und Algorithmen - Aufgaben |
Lehrveranstaltung von Prof. Dr.
Download dieser Aufgaben inkl. aller Bilder (1.5MB ZIP)
A.1.
Aufgabe Histogramm und Kontrast
A.5.
Histogramm-Ausgleich (Equalization)
A.6.
Aufgabe FFT / Sinus Gratings
A.7. Aufgaben Bildrestauration
A.9.
"Kleiner ist nicht immer feiner"
Histogramm und Binärmerkmale
Lösen Sie als Macro-Aufgabe: Laden Sie das
Sample Image "Boats". Finden Sie heraus, wie man ein Histogramm
H0 dieses Bildes erstellt und ermitteln Sie damit den höchsten Grauwert im
Bild.
Erstellen Sie eine Kopie von
"Boat" und spreizen Sie dort die Grauwertverteilung so, dass der
höchste Grauwert 220 auf den Wert 231 kommt (2 Möglichkeiten)
Betrachten Sie das Histogramm H1 dieses
neuen Bildes. Fällt Ihnen im Vergleich zu H0 etwas auf, und haben Sie eine
Idee, wie man den Artefakt erklären kann?
Analog: Senken Sie den höchsten Grauwert um
5% ab.
Betrachten Sie das neue Histogramm H2. Fällt
Ihnen etwas auf, und haben Sie eine Idee, wie man den (neuen) Artefakt erklären
kann?
Wieviel Information steckt noch in dem Differenzbild "Original minus um 5% abgesenkte Kopie"? Spreizen Sie das Differenzbild wieder auf den vollen Grauwertbereich.
Gegeben ein Binärbild rice-bin.png mit Reiskörnern. Implementieren Sie Algorithmen, die für alle ganz sichtbaren Reiskörner verschiedene Eigenschaften ermitteln
Anleitung: Alle diese Eigenschaften können Sie über Befehle im Menu Analyze ermitteln. Machen Sie sich mit Set Measurements..., Analyze Particles... und Measure vertraut. Finden Sie heraus, wie man Ergebnisse im Results-Window erhält und speichern Sie die Ergebnisse in Results.xls. Nutzen Sie die Sortierfunktion von Excel, um Ausreisser in Größe und Breite Bounding Box zu finden, und lokalisieren Sie diese dann wieder um im Bild.
Aber wir wollen einige dieser Merkmale pro Reiskorn auch selbst nachrechnen.
Anleitung: Dazu wählen wir mit dem Wand Tool (Zauberstab) ein Reiskorn aus, erzeugen mit Edit – Selection – Create Mask ein neues Bild (die Maske Mask), das nur dieses Reiskorn enthält. Schreiben Sie nun ein Plugin, das auf Mask operiert und folgende Dinge ermittelt
Daraus können wir leicht berechnen und im Log-Window ausgeben:
Nun zum Umfang: Ein vereinfachter Ansatz besteht darin, alle Pixel des Reiskorns zu zählen, die in ihrer 4er-Nachbarschaft mindestens ein Hintergrund-Pixel haben. Implementieren Sie dies im Plugin, und nehmen Sie die Anzahl dieser Pixel als Schätzwert für
Vergleichen Sie die Ergebnisse Ihres Plugins für ein Reiskorn mit den entsprechenden Results von Analyze Particle... Stimmt's überein? – Bei Perimeter hat ImageJ einen nicht-ganzzahligen Wert (während unsere Näherung ganzzahlig ist). Können Sie erklären wieso?
Gegeben ein Binärbild rice-bin.png mit Reiskörnern. Damit der Computer die einzelnen, getrennten Regionen auch wirklich getrennt bearbeiten kann, müssen wir jedem Pixel einer Region einen eindeutigen Regions-Index zuweisen. Im Bild rechts hat jedes Reiskorn einen anderen Farbindex.
Implementieren Sie einen Algorithmus "Connected Region Labeling", der jede zusammenhängende weiße Region mit einem eindeutigen Index belegt.
Dabei soll der Algorithmus den Begriff "zusammenhängend" wahlweise über 4er-Nachbarschaft oder über 8er-Nachbarschaft umsetzen. Ergeben sich Unterschiede?
Dokumentieren Sie Ihre Ergebnisse, indem Sie für jede gefundene Region im Result-Window ausgeben: Index, XStart, YStart, wobei (XStart,YStart) das erste Pixel jeder Region bei zeilenweisem Abscannen bezeichnet.
Vergleichen Sie Ihre Ergebnisse mit denen aus dem ImageJ-Befehl Analyze – Analyze Particles, indem Sie die Result-Listen vergleichen: Gleiche Anzahl von Regionen? Gleiche Startpixel?
Hinweis:
Zum Algorithmus 8er-Nachbarschaft können Sie sich das Flussdiagramm bei
[Umbaugh98, S. 134] anschauen. Allerdings hat es einen kleinen Fehler! Finden
Sie den Fehler? Überlegen Sie, wie der Algorithmus (a) auf eine senkrechte
Linie aus Pixeln, (b) auf eine Diagonale "links-oben nach
rechts-unten" und (c) auf eine Diagonale "rechts-oben nach
links-unten" wirkt.
·
[Umbaugh98], Kap. 2.6.2, S. 133f.
·
[Burger05],
Kap. 11.1.2, S. 200f: Sequentielle Regionenmarkierung
·
Image Processing Toolbox,
Matlab-Help, Kapitel 9
Wir wollen im obigen Bild rice.png die Anzahl der Reiskörner zählen und die durchschnittliche Größe eines Reiskorns bestimmen.
Dazu muss man erstmal die Reiskörner erstmal vom Hintergrund abtrennen; diesen Prozess nennt man Segmentierung. Die Aufgabe ist gelöst, wenn wir ein Binärbild haben, in dem alle Reis-Pixel auf "1", alle Hintergrund-Pixel auf "0" stehen.
Wie segmentiert man das?
Anleitung: Überzeugen Sie sich, dass einfache Schwellwert-Binarisierung für keine Schwelle zum Erfolg führt. Eine Alternative wäre morphologische Segmentierung.
Laden Sie dazu von der ImageJ-Website http://rsb.info.nih.gov/ij das Plugin Grayscale Morphology, installieren es und machen sich mit seiner Wirkungsweise vertraut. Entwickeln Sie dann ein Macro, das die Segmentierungsaufgabe löst
Beim anschließenden Reiskörner-Zählen und Größe-Ermitteln ist wieder Analyze Particles... ein nützlicher Befehl (s.o.)
Zusatzaufgabe: Wie könnte eine morphologische Operation aussehen, mit der Sie den Outline aller Reiskörner (s. Bild) ermitteln können?
· [Burger05], Kap. 10 (insbes. S. 179ff.)
·
Implementieren Sie ein Plugin, das den Histogramm-Ausgleich rechnet.
Stellen Sie das kumulative Histogramm vor und nach dem Histogramm-Ausgleich dar. Entspricht das Histogramm Ihren Erwartungen?
Beschreiben Sie in eigenen Worten, was nach Anwendung des
Histogramm-Ausgleichs auf Bild copter2.jpg
besser und was schlechter geworden ist.
Hätte man eine qualitativ ähnliche Verbesserung auch mit Brigtness/Contrast
erhalten können?
Hinweise zur Implementierung:
PlotWindow
p1 = new PlotWindow("Titel","x","y",x_arr,h_arr);
p1.setColor(Color.blue);
p1.draw();
anzeigen
(a) (b)
o Frequenz-Ursprung in Ecke oder in Mitte,
o logarithmiert vs. unlogarithmiert,
o Plots von geeigneten Schnittlinien (Line Selection Tool, dann Analyze – Plot Profile),
o Colormaps = Lookup Tables,
Wie lassen sich im Ergebnis die wesentlichen Eigenschaften des FFT-Bildes beschreiben? Erklärung?
·
[Lad+93] M. Lades et al.: Distortion invariant object recognition in the
dynamic link architecture, IEEE Transaction
on Computers, 42, 1993, p. 300-311.
Gegeben das Bild links Jet-frequency.jpg mit einer starken Frequenz-Störung.
Entwickeln Sie einen geeigneten Filter, mit dem sich die
Störung möglichst weit beseitigen läßt, zum Beispiel wie im Bild rechts.
Hinweise zu ImageJ /
Plugin FFTJ:
· Um die Berechnungen schnell ausführen zu können, empfiehlt
es sich, aus Jet-frequency.jpg
einen 256x256-Ausschnitt zu nehmen.
· Wie man die Methoden aus
FFTJ in seinem eigenen Plugin-Java-Code ansprechen kann, ist in TR_IJ_FFT.pdf beschrieben. Die dort erläuterte
Beispieldatei Ideal_LP_FFTJ.java kann
aus dem Ordner images/ geladen werden und muss im Ordner plugins/FFTJ
installiert werden.
Das Bild building-1.jpg enthält ein unscharfes Bild (Das scharfe Original steht in building-sw.jpg). Implementieren Sie die Methode des Unsharp-Masking und erzeugen Sie damit eine geschärfte Version des Bildes.
Experimentieren Sie mit anders unscharf gemachten Bildern des Originals building-sw.jpg. Können Sie Aussagen darüber machen, bei welchen Parametern (sigma, alpha) man die besten Resultate erhält?
Implementieren Sie eine Warping-Routine, die folgendes leistet:
Hinweise:
Das gezeigte linke
Bild zeichnung01.jpg
hat eine Auflösung von 1423x1499.
(Das Bild zeigt eine Skizze zu einer neuroendoskopischen OP-Technik, bei der auch Bildverarbeitung zum Einsatz kommt. Die Zusammenhänge sind allerdings hier ohne Belang, das Bild wurde nur gewählt, weil die Zeichnungselemente (dünne Linien) besonders deutlich zeigen, wenn beim Verkleinern etwas schief läuft.)
Ziel: Wie erzeugt man von diesem Bild eine qualitativ möglichst hochwertige Verkleinerung auf 20% der Originalgröße? Ein erster Ansatz könnte darin bestehen, einfach nur jede 5. Linie aus dem Originalbild zu nehmen. Das Ergebnis wir ähnlich wie das rechte Bild zeichnung-bil-blank.jpg aussehen, also wenig befriedigend sein (Linien sind unterbrochen oder in Stufen zerhackt, Schrift schlecht lesbar, "körniger" Eindruck).
Aufgaben:
Was muss man also darüber hinaus tun, um eine gute Verkleinerung zu erhalten?
Zusatzaufgabe:
©