Inhalt (1. Auflage)
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 Automatische Kontrastanpassung
5.1.4 Invertieren von Bildern
5.1.5 Schwellwertoperation
(tresholding)
5.1.6 Punktoperationen
und Histogramme
5.2 Linearer Histogrammausgleich
5.2.1 Histogramm-Spezifikation
5.3 Gammakorrektur
5.3.1 Warum Gamma?
5.3.2 Die Gammafunktion
5.3.3 Reale Gammawerte
5.3.4 Anwendung der Gammakorrektur
5.3.5 Implementierung
5.3.6 Gammafunktion mit
Offset
5.4 Punktoperationen in ImageJ
5.4.1 Punktoperationen
mit Lookup-Tabellen
5.4.2 Arithmetische Standardoperationen
5.4.3 Punktoperationen
mit mehreren Bildern
5.4.4 ImageJ Plugins für
mehrere Bilder
5.5 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 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
ACHTUNG: Die hier verfügbaren Materialien beziehen sich auf eine ältere (vergriffene) Auflage des Buchs. Informationen und Unterlagen zur aktuellen Auflage finden Sie hier.