Inhaltsverzeichnis
1 Crunching Pixels
1.1 Programmieren mit Bildern
1.2 Bildanalyse und "intelligente" Verfahren
2 Digitale Bilder
2.1 Arten von digitalen Bildern
2.2 Bildaufnahme
2.2.1 Das Modell der Lochkamera
2.2.2 Die "dünne" Linse
2.2.3 Übergang zum Digitalbild
2.2.4 Bildgröße
und Auflösung
2.2.5 Bildkoordinaten
2.2.6 Pixelwerte
2.3 Dateiformate für Bilder
2.3.1 Raster- vs. Vektordaten
2.3.2 Tagged Image File Format (TIFF)
2.3.3 Graphics Interchange Format (GIF)
2.3.4 Portable Network Graphics (PNG)
2.3.5 JPEG
2.3.6 Windows Bitmap (BMP)
2.3.7 Portable Bitmap Format (PBM)
2.3.8 Weitere Dateiformate
2.3.9 Bits und Bytes
2.4 Aufgaben
3 ImageJ
3.1 Software für digitale Bilder
3.1.1 Software zur Bildbearbeitung
3.1.2 Software zur Bildverarbeitung
3.2 Eigenschaften von ImageJ
3.2.1 Features
3.2.2 Fertige Werkzeuge
3.2.3 ImageJ-Plugins
3.2.4 Beispiel-Plugin: "inverter"
3.3 Weitere Informationen zu ImageJ und Java
3.3.1 Ressourcen für ImageJ
3.3.2 Programmieren mit Java
3.4 Aufgaben
4 Histogramme
4.1 Was ist ein Histogramm?
4.2 Was ist aus Histogrammen abzulesen?
4.2.1 Belichtung, Kontrast und Dynamik
4.2.2 Bildfehler
4.3 Berechnung von Histogrammen
4.4 Histogramme für Bilder mit mehr als 8 Bit
4.4.1 Binning
4.4.2 Beispiel
4.4.3 Implementierung
4.5 Histogramme von Farbbildern
4.5.1 Luminanzhistogramm
4.5.2 Histogramme der Farbkomponenten
4.5.3 Kombinierte Farbhistogramme
4.6 Das kumulative Histogramm
4.7 Aufgaben
5 Punktoperationen
5.1 Änderung der Bildintensität
5.1.1 Kontrast und Helligkeit
5.1.2 Beschränkung der Ergebniswerte (clamping)
5.1.3 Invertieren
von Bildern
5.1.4 Schwellwertoperation
(tresholding)
5.2 Punktoperationen und Histogramme
5.3 Automatische Kontrastanpassung
5.4 Linearer Histogrammausgleich
5.5 Histogrammanpassung
5.5.1 Häufigkeiten und
Wahrscheinlichkeiten
5.5.2 Prinzip der Histogrammanpassung
5.5.3 Stückweise lineare
Referenzverteilung
5.5.4 Anpassung an ein
konkretes Histogramm
5.5.5 Beispiele
5.6 Gammakorrektur
5.6.1 Warum Gamma?
5.6.2 Die Gammafunktion
5.6.3 Reale Gammawerte
5.6.4 Anwendung der Gammakorrektur
5.6.5 Implementierung
5.6.6 Modifizierte Gammafunktion
5.7 Punktoperationen in ImageJ
5.7.1 Punktoperationen
mit Lookup-Tabellen
5.7.2 Arithmetische Standardoperationen
5.7.3 Punktoperationen
mit mehreren Bildern
5.7.4 ImageJ Plugins für
mehrere Bilder
5.8 Aufgaben
6 Filter
6.1 Was ist ein Filter?
6.2 Lineare Filter
6.2.1 Die Filtermatrix
6.2.2 Anwendung des Filters
6.2.3 Berechnung der Filteroperation
6.2.4 Beispiele für Filter-Plugins
6.2.5 Ganzzahlige Koeffizienten
6.2.6 Filter beliebiger Größe
6.2.7 Arten von linearen Filtern
6.3 Formale Eigenschaften linearer Filter
6.3.1 Lineare Faltung
6.3.2 Eigenschaften der linearen Faltung
6.3.3 Separierbarkeit von Filtern
6.3.4 Impulsantwort eines Filters
6.4 Nichtlineare Filter
6.4.1 Minimum- und Maximum-Filter
6.4.2 Medianfilter
6.4.3 Das gewichtete Medianfilter
6.4.4 Andere nichtlineare Filter
6.5 Implementierung von Filtern
6.5.1 Effizienz von Filterprogrammen
6.5.2 Behandlung der Bildränder
6.6 Filteroperationen in ImageJ
6.6.1 Lineare Filter
6.6.2 Gauß-Filter
6.6.3 Nichtlineare Filter
6.7 Aufgaben
7 Kanten und Konturen
7.1 Wie entsteht eine Kante?
7.2 Gradienten-basierte Kantendetektion
7.2.1 Partielle Ableitung und Gradient
7.2.2 Ableitungsfilter
7.3 Filter zur Kantendetektion
7.3.1 Prewitt- und Sobel-Operator
7.3.2 Roberts-Operator
7.3.3 Kompass-Operatoren
7.3.4 Kantenoperatoren in ImageJ
7.4 Weitere Kantenoperatoren
7.4.1 Kantendetektion mit zweiten Ableitungen
7.4.2 Kanten auf verschiedenen Skalenebenen
7.4.3 Canny-Filter
7.5 Von Kanten zu Konturen
7.5.1 Konturen verfolgen
7.5.2 Kantenbilder
7.6 Kantenschärfung
7.6.1 Kantenschärfung mit dem Laplace-Filter
7.6.2 Unscharfe Maskierung (unsharp masking)
7.7 Aufgaben
8 Auffinden von Eckpunkten
8.1 "Points of interest"
8.2 Harris-Detektor
8.2.1 Lokale Strukturmatrix
8.2.2 Corner Response Function (CRF)
8.2.3 Bestimmung der Eckpunkte
8.2.4 Beispiele
8.3 Implementierung
8.3.1 Schritt 1 - Berechnung der corner response function
8.3.2 Schritt 2 - Bestimmung der Eckpunkte
8.3.3 Anzeigen der Eckpunkte
8.3.4 Zusammenfassung
8.4 Aufgaben
9 Detektion einfacher Kurven
9.1 Auffällige Strukturen
9.2 Hough-Transformation
9.2.1 Parameterraum
9.2.2 Akkumulator-Array
9.2.3 Eine bessere Geradenparametrisierung
9.3 Implementierung der Hough-Transformation
9.3.1 Füllen des Akkumulator-Arrays
9.3.2 Auswertung des Akkumulator-Arrays
9.3.3 Erweiterungen der Hough-Transformation
9.4 Hough-Transformation für Kreise und Ellipsen
9.4.1 Kreise und Kreisbögen
9.4.2 Ellipsen
9.5 Aufgaben
10 Morphologische Filter
10.1 Schrumpfen und wachsen lassen
10.1.1 Nachbarschaft von Bildelementen
10.2 Morphologische Grundoperationen
10.2.1 Das Strukturelement
10.2.2 Punktmengen
10.2.3 Dilation
10.2.4 Erosion
10.2.5 Eigenschaften von Dilation und Erosion
10.2.6 Design morphologischer Filter
10.2.7 Anwendungsbeispiel: Outline
10.3 Zusammengesetzte Operationen
10.3.1 Opening
10.3.2 Closing
10.3.3 Eigenschaften von Opening und Closing
10.4 Morphologische Filter für Grauwert- und Farbbilder
10.4.1 Strukturelemente
10.4.2 Grauwert-Dilation und -Erosion
10.4.3 Grauwert-Opening und -Closing
10.5 Implementierung morphologischer Filter
10.5.1 Binäre Bilder in ImageJ
10.5.2 Dilation und Erosion
10.5.3 Opening und Closing
10.5.4 Outline
10.5.5 Morphologische Operationen in ImageJ
10.6 Aufgaben
11 Regionen in Binärbildern
11.1 Auffinden von Bildregionen
11.1.1 Regionenmarkierung
durch Flood Filling
11.1.2 Sequentielle Regionenmarkierung
11.1.3 Regionenmarkierung - Zusammenfassung
11.2 Konturen von Regionen
11.2.1 Äußere und innere Konturen
11.2.2 Kombinierte Regionenmarkierung und Konturfindung
11.2.3 Implementierung
11.2.4 Beispiele
11.3 Repräsentation von Bildregionen
11.3.1 Matrix-Repräsentation
11.3.2 Lauflängenkodierung
11.3.3 Chain Codes
11.4 Eigenschaften binärer Bildregionen
11.4.1 Formmerkmale (Features)
11.4.2 Geometrische Eigenschaften
11.4.3 Statistische Formeigenschaften
11.4.4 Momentenbasierte geometrische Merkmale
11.4.5 Projektionen
11.4.6 Topologische Merkmale
11.5 Aufgaben
12 Farbbilder
12.1 RGB-Farbbilder
12.1.1 Aufbau von Farbbildern
12.1.2 Farbbilder in ImageJ
12.2 Farbräume und Farbkonversion
12.2.1 Umwandlung in Grauwertbilder
12.2.2 Desaturierung von Farbbildern
12.2.3 HSV/HSB- und HLS-Farbraum
12.2.4 TV-Komponentenfarbräume - YUV, YIQ und YCbCr
12.2.5 Farbräume für den Druck - CMY und CMYK
12.3 Colorimetrische Farbräume
12.3.1 CIE-Farbräume
12.3.2 CIE LAB
12.3.3 sRGB
12.3.4 Adobe RGB
12.3.5 Farben und Farbräume in Java
12.4 Statistiken von Farbbildern
12.4.1 Wie viele Farben enthält ein Bild?
12.4.2 Histogramme
12.5 Farbquantisierung
12.5.1 Skalare Farbquantisierung
12.5.2 Vektorquantisierung
12.6 Aufgaben
13 Einführung in Spektraltechniken
13.1 Die Fouriertransformation
13.1.1 Sinus- und Kosinusfunktionen
13.1.2 Fourierreihen als Darstellung periodischer Funktionen
13.1.3 Fourierintegral und Fourierspektrum
13.1.4 Die Fouriertransformation
13.1.5 Fourier-Transformationspaare
13.1.6 Wichtige Eigenschaften der Fouriertransformation
13.2 Übergang zu diskreten Daten
13.2.1 Abtastung
13.2.2 Diskrete und periodische Funktionen
13.3 Die diskrete Fouriertransformation (DFT)
13.3.1 Definition der DFT
13.3.2 Diskrete Basisfunktionen
13.3.3 Schon wieder Aliasing!
13.3.4 Einheiten im Orts- und Spektralraum
13.3.5 Das Leistungsspektrum
13.4 Implementierung der DFT
13.4.1 Direkte Implementierung
13.4.2 Fast Fourier Transform (FFT)
13.5 Aufgaben
14 Die diskrete Fouriertransformation in 2D
14.1 Definition der 2D-DFT
14.1.1 2D-Basisfunktionen
14.1.2 Implementierung der zweidimensionalen DFT
14.2 Darstellung der Fouriertransformierten in 2D
14.2.1 Wertebereich
14.2.2 Zentrierte Darstellung
14.3 Frequenzen und Orientierung in 2D
14.3.1 Effektive Frequenz
14.3.2 Frequenzlimits und Aliasing in 2D
14.3.3 Orientierung
14.3.4 Geometrische Korrektur des 2D-Spektrums
14.3.5 Auswirkungen der Periodizität
14.3.6 Windowing
14.3.7 Fensterfunktionen
14.4 Beispiele für Fouriertransformierte in 2D
14.5 Anwendungen der DFT
14.5.1 Lineare Filteroperationen im Spektralraum
14.5.2 Lineare Faltung und Korrelation
14.5.3 Inverse Filter
14.6 Aufgaben
15 Die diskrete Kosinustransformation (DCT)
15.1 Eindimensionale DCT
15.1.1 Basisfunktionen der DCT
15.1.2 Implementierung der eindimensionalen DCT
15.2 Zweidimensionale DCT
15.2.1 Separierbarkeit
15.2.2 Beispiele
15.3 Andere Spektraltransformationen
15.4 Aufgaben
16 Geometrische Bildoperationen
16.1 Koordinatentransformation in 2D
16.1.1 Einfache Abbildungen
16.1.2 Homogene Koordinaten
16.1.3 Affine Abbildung (Dreipunkt-Abbildung)
16.1.4 Projektive Abbildung (Vierpunkt-Abbildung)
16.1.5 Bilineare Abbildung
16.1.6 Weitere nichtlineare Bildverzerrungen
16.1.7 Lokale Transformationen
16.2 Resampling
16.2.1 Source-to-Target Mapping
16.2.2 Target-to-Source Mapping
16.3 Interpolation
16.3.1 Einfache Interpolationsverfahren
16.3.2 Ideale Interpolation
16.3.3 Interpolation durch Faltung
16.3.4 Kubische Interpolation
16.3.5 Lanczos-Interpolation
16.3.5 Interpolation in 2D
16.3.6 Aliasing
16.4 Java-Implementierung
16.4.1 Geometrische Abbildungen
16.4.2 Pixel-Interpolation
16.4.3 Anwendungsbeispiele
16.5 Aufgaben
17 Bildvergleich
17.1 Template Matching in Intensitätsbildern
17.1.1 Abstand zwischen Bildmustern
17.1.2 Umgang mit Drehungen und Grö ßenänderungen
17.1.3 Implementierung
17.2 Vergleich von Binärbildern
17.2.1 Direkter Vergleich von Binärbildern
17.2.2 Die Distanztransformation
17.2.3 Chamfer Matching
17.3 Aufgaben
Anhang A Mathematische Notation
A.1 Häufig verwendete Symbole
A.2 Komplexe Zahlen C
A.3 Algorithmische Komplexität und O-Notation
Anhang B Java-Notizen
B.1 Arithmetik
B.1.1 Ganzzahlige Division
B.1.2 Modulo-Operator
B.1.3 Unsigned Bytes
B.1.4 Mathematische Funktionen (Math-Klasse)
B.1.5 Runden
B.1.6 Inverse Tangensfunktion
B.1.7 Float und Double (Klassen)
B.2 Arrays in Java
B.2.1 Arrays erzeugen
B.2.2 Größe von Arrays
B.2.3 Zugriff auf Array-Elemente
B.2.4 Zweidimensionale Arrays
Anhang C ImageJ-Kurzreferenz
C.1 Installation und Setup
C.2 ImageJ-API
C.2.1 Bilder (Package ij)
C.2.2 Bildprozessoren (Package ij.process)
C.2.3 Plugins (Packages ij.plugin, ij.plugin.filter)
C.2.4 GUI-Klassen (Package ij.gui)
C.2.5 Window-Management (Package ij)
C.2.6 Utility-Klassen (Package ij)
C.2.7 Input-Output (Package ij.io)
C.3 Bilder und Bildfolgen erzeugen
C.3.1 ImagePlus (Klasse)
C.3.2 ImageStack (Klasse)
C.3.3 NewImage (Klasse)
C.3.4 ImageProcessor (Klasse)
C.4 Bildprozessoren erzeugen
C.4.1 ImageProcessor (Klasse)
C.4.2 ByteProcessor (Klasse)
C.4.3 ColorProcessor (Klasse)
C.4.4 FloatProcessor (Klasse)
C.4.5 ShortProcessor (Klasse)
C.5 Bildparameter
C.5.1 ImageProcessor (Klasse)
C.6 Zugriff auf Pixel
C.6.1 ImageProcessor (Klasse)
C.7 Konvertieren von Bildern
C.7.1 ImageProcessor (Klasse)
C.7.2 ImagePlus, ImageConverter (Klassen)
C.8 Histogramme und Bildstatistiken
C.8.1 ImageProcessor (Klasse)
C.9 Punktoperationen
C.9.1 ImageProcessor (Klasse)
C.9.2 Blitter (Interface)
C.10 Filter
C.10.1 ImageProcessor (Klasse)
C.11 Geometrische Operationen
C.11.1 ImageProcessor (Klasse)
C.12 Grafische Operationen in Bildern
C.12.1 ImageProcessor (Klasse)
C.13 Bilder darstellen
C.13.1 ImagePlus (Klasse)
C.14 Operationen auf Bildfolgen (Stacks)
C.14.1 ImagePlus (Klasse)
C.14.2 ImageStack (Klasse)
C.14.3 Stack-Beispiel
C.15 Region of Interest (ROI)
C.15.1 ImageProcessor (Klasse)
C.15.2 ImageStack (Klasse)
C.15.3 ImagePlus (Klasse)
C.15.4 Roi, Line, OvalRoi, PolygonRoi (Klassen)
C.16 Image Properties
C.16.1 ImagePlus (Klasse)
C.17 Interaktion
C.17.1 IJ (Klasse)
C.17.2 ImageProcessor (Klasse)
C.17.3 GenericDialog (Klasse)
C.18 Plugins
C.18.1 PlugIn (Interface)
C.18.2 PlugInFilter (Interface)
C.18.3 Plugins ausführen - IJ (Klasse)
C.19 Window-Management
C.19.1 WindowManager (Klasse)
C.20 Weitere Funktionen
C.20.1 ImagePlus (Klasse)
C.20.2 IJ (Klasse)
Anhang D Source Code
D.1 Harris Corner Detector
D.1.1 File Corner.java
D.1.2 File HarrisCornerDetector.java
D.1.3 File HarrisCornerPlugin_.java
D.2 Kombinierte Regionenmarkierung-Konturverfolgung
D.2.1 File ContourTracingPlugin_.java
D.2.2 File Node.java
D.2.3 File Contour.java
D.2.4 File OuterContour.java
D.2.5 File InnerContour.java
D.2.6 File ContourSet.java
D.2.7 File ContourTracer.java
D.2.8 File ContourOverlay.java
Literaturverzeichnis
Sachverzeichnis