WPF Bildverarbeitung und Algorithmen - Aufgaben

 

Lehrveranstaltung von Prof. Dr. Wolfgang Konen                                                   WS2007

 

Download dieser Aufgaben inkl. aller Bilder (1.5MB ZIP)


A. Aufgaben Bildverarbeitung

A. Aufgaben Bildverarbeitung. 1

A.1. Aufgabe Histogramm und Kontrast 2

A.2. Aufgabe Binär-Merkmale. 2

A.3. Aufgabe Region Labeling. 5

Literatur. 5

A.4. Aufgabe Segmentierung. 6

Literatur. 6

A.5. Histogramm-Ausgleich (Equalization) 7

A.6. Aufgabe FFT / Sinus Gratings. 9

A.7. Aufgaben Bildrestauration. 11

Frequenz-Störung. 11

Unsharp-Masking. 11

A.8. Aufgabe Warping. 12

A.9. "Kleiner ist nicht immer feiner". 13

 


Histogramm und Binärmerkmale

A.1. Aufgabe Histogramm und Kontrast

 

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.

 

 

A.2. Aufgabe Binär-Merkmale

 

                

 

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?

 


A.3. Aufgabe Region Labeling

                                        

 

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.

 

Literatur

·          [Umbaugh98], Kap. 2.6.2, S. 133f.

·         [Burger05], Kap. 11.1.2, S. 200f: Sequentielle Regionenmarkierung

·         Image Processing Toolbox, Matlab-Help, Kapitel 9

 


A.4. Aufgabe Segmentierung

Rice grains 

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?

Literatur

·         [Umbaugh98], Kap. 2.4.6

·         [Burger05], Kap. 10 (insbes. S. 179ff.)

·          

 

 

 


A.5. Histogramm-Ausgleich (Equalization)

                    

 

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.6. Aufgabe FFT / Sinus Gratings

 (a)                                 (b)

 

  1. Erzeugen Sie Bilder im Ortsraum, die etwa so aussehen wie oben in (a) und (b) gezeigt (statt des farbigen Randes nehme man einen 5 Pixel breiten Rand mit Grauwert 200). Da die dominante Funktion in diesen synthetischen Bildern der Sinus ist, nennt man sie auch Sinus-Gratings. Der Sinus soll dabei zwischen Grauwert  0=Schwarz und 255=Weiß verlaufen. Die Bildgröße sollte eine 2er-Potenz sein, also z.B. 256x256 oder 512x512. (*)
  2. Installieren Sie das Plugin FFTJ von http://rsb.info.nih.gov/ij, machen Sie damit die FFT dieser Bilder (a) und (b) und visualisieren Sie das Powerspektrum der FFT. Wie Sie sehen werden, ist es nicht ganz einfach, im Powerspektrum etwas zu sehen. Probieren Sie daher verschiedene Visualisierungsformen aus

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?

  1. Wie ändert sich das FFT-Ergebnis, wenn man den 5 Pixel breiten Rand weglässt?
  2. Wie ändert sich das FFT-Ergebnis, wenn man im Sinus-Grating ausserhalb einer Lochblende von z.B. 100 Pixeln Durchmesser alles auf einen mittleren Grauwert setzt? Wählen Sie für diesen Aufgabenteil ein Sinus-Grating mit 50 Wellen (statt 10).


  3. Gehen Sie nun den umgekehrten Weg und starten Sie mit zwei kleinen runden Scheiben im Frequenzraum. Können Sie die Scheiben so anordnen, dass nach inverser FFT das Bild im Ortsraum reell ist? Welches Bild erhalten Sie, wie ändert es sich mit Lage und Radius der Scheiben? Erklärung?
  4. Ersetzen Sie die Scheiben durch Gaussglocken vergleichbarer Breite. Wie ändert sich das Bild im Ortsraum (nach inverser FFT)? Die so erhaltenen Filter gehören zur Funktionenklasse der Gabor-Wavelets. Sie spielen eine große Rolle in Modellen zur visuellen Wahrnehmung bei Mensch und Tier.

    In [Lad+93] werden diese Gabor-Wavelets weitergehend beschrieben und als Feature-Basis für die Gesichtserkennung eingesetzt.

    (*) Warum? - Die meisten FFTs sind für 2er-Potenzen viel performanter als für Bildlängen 255 oder 260 oder sonstige Werte.

Literatur

·         [Lad+93]  M. Lades et al.:  Distortion invariant object recognition in the dynamic link architecture,  IEEE Transaction on Computers, 42, 1993, p. 300-311. (PDF)


A.7. Aufgaben Bildrestauration

Frequenz-Störung

                 

 

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.

 

Unsharp-Masking

 

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?

 

 

 


A.8. Aufgabe Warping

 

                 

 

Implementieren Sie eine Warping-Routine, die folgendes leistet:

 

Hinweise:

  1. Das Anclicken der 4 Positionen macht man am besten mit dem Polygon-Selection-Tool. Die polygonale ROI kann man in Java mit PolygonRoi poRoi = imp.getRoi() abfragen (Doku zu Klasse PolygonRoi lesen, imp = ImagePlus-Objekt)
  2. Zum Matrix-Lösen greift man am beste auf ein Matrix-Package wie Jama (http://math.nist.gov/javanumerics/jama/) zurück. Jama bietet Matrix-Funktionen unter Java, z.B. Matrix A.solve(Matrix B), was die Lösung X des Gleichungssystems A*X = B ermittelt, auch im Least-Square-Sinne.
  3. Jama-Installation: Jama-1.0.2.zip (Version mit Sourcen) herunterladen, entpacken ins Verzeichnis, das das eigene Plugin enthält, dann alle .class-Files löschen (damit erzwingen wir Re-Compile, denn die .class-Files aus dem Download funktionieren nicht mit ImageJ's JRE). Dann eigenes Plugin compilieren.


A.9. "Kleiner ist nicht immer feiner"

                     

 

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:

 


© Wolfgang Konen, 01.10.2007 - 02.12.2006