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