Kapitel 12: Bildverarbeitung - Lokale Operatoren

Lokale Bildoperatoren (local image operators) transformieren jeden Pixel abhängig von seiner Nachbarschaft. Kernwerkzeug ist die Faltung (convolution) mit einem Kernel: Weichzeichner (Mittelwert, Gauss), Kantendetektoren (Differenz, Sobel, Laplace), der Kontrastfilter (sharpening), die nicht-linearen Rangordnungsoperatoren (Median, Dilatation, Erosion, Opening, Closing) sowie die Segmentierung über Zusammenhangskomponenten und Flood Fill.

Überblick

Ein Punktoperator (point operator) verändert jeden Pixel für sich allein, ohne die Nachbarn zu betrachten (z.B. Helligkeit, Kontrast, Gamma, Farbtransformation). Ein lokaler Bildoperator (local image operator) dagegen berechnet den neuen Wert eines Pixels aus dem Pixel und seinen Nachbarn. Genau das leistet die Faltung.

Roter Faden (auf mehreren Zwischenfolien wiederholt):

  • Weichzeichner (blur/smoothing): Mittelwertoperator, Gauss-Filter
  • Kantendetektoren (edge detectors): Differenzoperator und Sobel (1. Ableitung), Laplace (2. Ableitung)
  • Kontrastverbesserung (contrast enhancement): Sharpening-Filter, motiviert durch den Mach-Band-Effekt
  • Rangordnungsoperatoren (rank-order / morphological operators): Median, Erosion, Dilatation, Opening, Closing
  • Segmentierung (segmentation): Zusammenhangskomponenten (ZHK) und Flood Fill

Faltung, Kernel und Nachbarschaften

Faltung (convolution): Der neue Wert eines Pixels ist die gewichtete Summe aus dem Pixel und seinen Nachbarn. Die Gewichte stehen in der Faltungsmatrix / im Kernel (convolution matrix, kernel), einer kleinen (typisch 3x3) Matrix, die Pixel für Pixel über das Bild geschoben wird.

Zwei Nachbarschaftsbegriffe:

  • 4er-Nachbarschaft (N4): die 4 direkt anliegenden Pixel (oben, unten, links, rechts) - kreuzförmig.
  • 8er-Nachbarschaft (N8): alle 8 umgebenden Pixel inklusive Diagonalen - der volle 3x3-Block um das Zentrum.

Die Faltungsformel für einen 3x3-Kernel (N8):

e(i,j)=l=02k=02g(i1+k,  j1+l)    f(k,l)e(i,j) = \sum_{l=0}^{2}\sum_{k=0}^{2} g(i-1+k,\; j-1+l)\; \cdot\; f(k,l)

mit gg = Eingabebild, ff = Kernel, ee = Faltungsergebnis.

Warum ungerade Kernelgrössen (3x3, 5x5)? Nur bei ungerader Kantenlänge gibt es genau ein Zentrum (central pixel), das eindeutig durch das Ergebnis ersetzt wird. Bei gerader Grösse läge das Zentrum zwischen vier Pixeln und das Ergebnis würde sich um einen halben Pixel verschieben. Deshalb sind Kernel praktisch immer 3x3, 5x5, 7x7 usw.

Identitätsoperator

Der Identitätsoperator (identity operator) hat eine 1 in der Mitte, sonst nur Nullen. Eingabe und Ergebnis sind identisch - er dient als Ausgangspunkt für andere Kernel.

FId=[000010000]F_{Id} = \begin{bmatrix} 0 & 0 & 0 \\ 0 & 1 & 0 \\ 0 & 0 & 0 \end{bmatrix}

Weichzeichner: Mittelwert und Gauss

Mittelwertoperator (box blur)

Der Mittelwertoperator (mean filter, box blur) besteht aus lauter Einsen und bildet den Durchschnitt der 9 Werte. Damit das Ergebnis im Grauwertbereich [0..255][0..255] bleibt, wird mit 1/91/9 normiert:

FMittel=19[111111111]F_{Mittel} = \frac{1}{9}\begin{bmatrix} 1 & 1 & 1 \\ 1 & 1 & 1 \\ 1 & 1 & 1 \end{bmatrix}

Er macht Grauwertbereiche homogener (Blur), verwischt aber auch Kanten.

Randproblem (worked example): Am Bildrand liegen nicht alle 9 Kernelpositionen im Bild. Deckt der Kernel bei einem einzelnen weissen Pixel (255) nur 8 der 9 Positionen ab, so ergibt sich:

g(i,j)=25589=227g'(i,j) = \frac{255 \cdot 8}{9} = 227

Gauss-Filter

Der Gauss-Filter (Gaussian filter) gewichtet die Mitte stärker und wirkt dadurch natürlicher als der Mittelwert. Kernelsumme = 16, Normierung 1/161/16:

FGauss=116[121242121]F_{Gauss} = \frac{1}{16}\begin{bmatrix} 1 & 2 & 1 \\ 2 & 4 & 2 \\ 1 & 2 & 1 \end{bmatrix}

Grösserer Gauss-Kernel (5x5, Summe 256, Normierung 1/2561/256):

FGauss,5=1256[1464141624164624362464162416414641]F_{Gauss,5} = \frac{1}{256}\begin{bmatrix} 1 & 4 & 6 & 4 & 1 \\ 4 & 16 & 24 & 16 & 4 \\ 6 & 24 & 36 & 24 & 6 \\ 4 & 16 & 24 & 16 & 4 \\ 1 & 4 & 6 & 4 & 1 \end{bmatrix}

Je grösser der Kernel, desto stärker die Unschärfe. Die Kernelgrösse hängt von Auflösung und gewünschtem Effekt ab.

Lineare Rücktransformation: Rechnet man ohne integrierten Normierungsfaktor, liegen die Faltungsergebnisse e(i,j)e(i,j) ausserhalb [0..255][0..255] und werden linear zurückabgebildet:

  • Nach Mittelwertoperator: g(i,j)=19e(i,j)+0g'(i,j) = \tfrac{1}{9}\cdot e(i,j) + 0
  • Nach Gauss-Filter: g(i,j)=116e(i,j)+0g'(i,j) = \tfrac{1}{16}\cdot e(i,j) + 0

Gerichteter Mittelwert (motion blur)

Ist der Kernel nur eine Zeile oder Spalte lang, verwischt er nur in eine Richtung:

Fy=13[010010010](vertikaler Verwisch)Fx=13[000111000](horizontaler Verwisch)F_{y} = \frac{1}{3}\begin{bmatrix} 0 & 1 & 0 \\ 0 & 1 & 0 \\ 0 & 1 & 0 \end{bmatrix} \quad\text{(vertikaler Verwisch)} \qquad F_{x} = \frac{1}{3}\begin{bmatrix} 0 & 0 & 0 \\ 1 & 1 & 1 \\ 0 & 0 & 0 \end{bmatrix} \quad\text{(horizontaler Verwisch)}

Faltung farbiger Bilder (RGB)

Ein Farbbild wird in die drei Kanäle R, G, B zerlegt, jeder Kanal wird als Grauwertbild einzeln gefiltert, anschliessend werden die Kanäle wieder zu einem Farbbild kombiniert.

Mach-Band-Effekt (Motivation für Kontrastverstärkung)

Der Mach-Band-Effekt (Mach band effect, Ernst Mach 1865) ist ein Wahrnehmungsphänomen: An Helligkeitsübergängen (Kanten) nimmt das Auge höheren Kontrast wahr, als physikalisch vorhanden ist. Gleichbleibende Flächenreize werden gedämpft, Kontraste überzeichnet - an der Kante entstehen ein Über- und ein Unterschwinger (over-/undershoot). In der Radiologie kann das zu Fehldeutungen führen (verstärkte Hell-Dunkel-Kontraste werden z.B. fälschlich als Karies interpretiert). Der Kontrastverbesserungsfilter wurde mathematisch so entwickelt, dass er Kanten genau so betont, wie es unsere Wahrnehmung tut.

Kantendetektoren I: Differenzoperator (1. Ableitung)

Der Differenzoperator (difference operator, gradient) erkennt Kanten über die diskrete 1. Ableitung der Grauwerte. Wo die 1. Ableitung ungleich Null ist, liegt eine Kante.

Kontinuierlich:

g(x)=limΔx0g(x+Δx)g(x)Δxg'(x) = \lim_{\Delta x \to 0} \frac{g(x+\Delta x) - g(x)}{\Delta x}

Diskret im Rasterbild (Δx=1\Delta x = 1):

g(x)=g(x+1)g(x)1=g(x+1)g(x)g'(x) = \frac{g(x+1) - g(x)}{1} = g(x+1) - g(x)

Kernel für vertikale Kanten FDyF_{Dy} und für horizontale Kanten:

FDy=[000011000]FDx=[000010010]F_{Dy} = \begin{bmatrix} 0 & 0 & 0 \\ 0 & -1 & 1 \\ 0 & 0 & 0 \end{bmatrix} \qquad F_{Dx} = \begin{bmatrix} 0 & 0 & 0 \\ 0 & -1 & 0 \\ 0 & 1 & 0 \end{bmatrix}

Eigenschaften: markiert Kanten nur 1 Pixel breit, ist aber rauschempfindlich. Nimmt man Nachbarn hinzu, wird der Operator robuster (horizontale Variante):

F=[000111111]F = \begin{bmatrix} 0 & 0 & 0 \\ -1 & -1 & -1 \\ 1 & 1 & 1 \end{bmatrix}

Wertebereich und lineare Abbildung: Das Ergebnis liegt in {255,...,255}\{-255, ..., 255\} und muss auf {0,...,255}\{0, ..., 255\} abgebildet werden:

g(i,j)=e(i,j)0,5+127g'(i,j) = e(i,j)\cdot 0{,}5 + 127

Also: e=0e=0 \to Mittelgrau 127, e=2550e=-255 \to 0 (schwarz), e=+255255e=+255 \to 255 (weiss). Das Vorzeichen liefert die Kantenrichtung: eine linke Kante erscheint hell, die gegenüberliegende dunkel.

Kantendetektoren II: Sobel-Operator

Der Sobel-Operator (Sobel operator) ist ein Differenzoperator mit zusätzlicher Puffer-Zeile bzw. Puffer-Spalte (buffer row/column). Dadurch wird er robuster gegen Rauschen, markiert Kanten aber mehrere Pixel breit (im Gegensatz zur 1-Pixel-Kante des reinen Differenzoperators).

Vier Varianten:

Sobel-x (vertikale Kanten)=[101101101]Sobel-y (horizontale Kanten)=[111000111]\text{Sobel-x (vertikale Kanten)} = \begin{bmatrix} -1 & 0 & 1 \\ -1 & 0 & 1 \\ -1 & 0 & 1 \end{bmatrix} \qquad \text{Sobel-y (horizontale Kanten)} = \begin{bmatrix} -1 & -1 & -1 \\ 0 & 0 & 0 \\ 1 & 1 & 1 \end{bmatrix} Diagonal=[011101110]Diagonal=[110101011]\text{Diagonal} = \begin{bmatrix} 0 & -1 & -1 \\ 1 & 0 & -1 \\ 1 & 1 & 0 \end{bmatrix} \qquad \text{Diagonal} = \begin{bmatrix} -1 & -1 & 0 \\ -1 & 0 & 1 \\ 0 & 1 & 1 \end{bmatrix}

Kantenoperator ins Eingabebild einfügen

Um Kanten zu betonen, ohne das Original zu verlieren, addiert man das nn-fache der Identität zum Differenzoperator (F=nFId+FDiffF = n \cdot F_{Id} + F_{Diff}):

F=[1110n0111]F=[1101n1011]F = \begin{bmatrix} -1 & -1 & -1 \\ 0 & n & 0 \\ 1 & 1 & 1 \end{bmatrix} \qquad F = \begin{bmatrix} -1 & -1 & 0 \\ -1 & n & 1 \\ 0 & 1 & 1 \end{bmatrix}

Je grösser nn, desto stärker dominiert das Original und desto subtiler die Kantenbetonung.

Kantendetektoren III: Laplace-Operator (2. Ableitung)

Der Laplace-Operator (Laplace operator) erkennt Kanten über die 2. Ableitung. Der Nulldurchgang (zero crossing) der 2. Ableitung liegt genau an der Kante. Er ist isotrop, reagiert also gleichermassen auf Zeilen- und Spaltenkanten.

Kontinuierlich und diskret:

g(x)=limΔx0(g(x+Δx)g(x))(g(x)g(xΔx))Δxg(x)=g(x+1)2g(x)+g(x1)g''(x) = \lim_{\Delta x \to 0} \frac{(g(x+\Delta x)-g(x)) - (g(x)-g(x-\Delta x))}{\Delta x} \qquad g''(x) = g(x+1) - 2\,g(x) + g(x-1)

Der Kernel entsteht als Summe der 2. Ableitung in Zeilen- und in Spaltenrichtung (Kernelsumme = 0):

[000121000]Zeile+[010020010]Spalte=[010141010]FL\underbrace{\begin{bmatrix} 0 & 0 & 0 \\ 1 & -2 & 1 \\ 0 & 0 & 0 \end{bmatrix}}_{\text{Zeile}} + \underbrace{\begin{bmatrix} 0 & 1 & 0 \\ 0 & -2 & 0 \\ 0 & 1 & 0 \end{bmatrix}}_{\text{Spalte}} = \underbrace{\begin{bmatrix} 0 & 1 & 0 \\ 1 & -4 & 1 \\ 0 & 1 & 0 \end{bmatrix}}_{F_L}

Vom Laplace zum Kontrastverbesserungsfilter (Sharpening)

Damit die Kantenbetonung dem Mach-Band-Effekt entspricht (helle Seite heller, dunkle Seite dunkler), wird der Laplace zunächst invertiert:

FL,inv=[010141010]F_{L,inv} = \begin{bmatrix} 0 & -1 & 0 \\ -1 & 4 & -1 \\ 0 & -1 & 0 \end{bmatrix}

Der Kontrastverbesserungsfilter / Sharpening-Kernel (contrast enhancement / sharpening filter) FKF_K entsteht durch Addition des nn-fachen der Identität (also FK=nFId+FL,invF_K = n \cdot F_{Id} + F_{L,inv}):

FK=[0101n+41010]  n=1  [010151010]F_K = \begin{bmatrix} 0 & -1 & 0 \\ -1 & n+4 & -1 \\ 0 & -1 & 0 \end{bmatrix} \quad\xrightarrow{\;n=1\;}\quad \begin{bmatrix} 0 & -1 & 0 \\ -1 & 5 & -1 \\ 0 & -1 & 0 \end{bmatrix}

Mit n=1n=1 ist die Kernelsumme =1= 1, der Filter also helligkeitserhaltend.

Worked Example: Faltung mit dem Sharpening-Kernel (Ergebnis 320)

Angewandt auf einen Bildausschnitt mit Zentralpixel 105 (obere/linke Nachbarn teils am Rand mit Zero-Padding = 0, Nachbar oben 102, Nachbar unten 103):

e=00+0(1)+00+0(1)+1055+102(1)+00+103(1)+990e = 0\cdot0 + 0\cdot(-1) + 0\cdot0 + 0\cdot(-1) + 105\cdot5 + 102\cdot(-1) + 0\cdot0 + 103\cdot(-1) + 99\cdot0 e=1055102103=525205=320e = 105\cdot 5 - 102 - 103 = 525 - 205 = 320

Das Ergebnis 320 liegt über 255, weshalb eine Rücktransformation (Clipping oder lineare Abbildung) nötig ist. Der überhöhte Wert an der Kante ist genau der gewünschte Schärfungseffekt.

Rangordnungsoperatoren (morphologische Operatoren)

Rangordnungsoperatoren (rank-order operators) tasten das Bild - ähnlich der Faltung - Pixel für Pixel ab, verwenden aber statt eines Kernels ein Strukturelement (structuring element), das beliebige Formen annehmen kann. Die abgedeckten Grauwerte werden nach Grösse sortiert (g0g1...gng_0 \le g_1 \le ... \le g_n); der Zentralpixel wird durch den Wert an einer bestimmten Rangposition ersetzt. Diese Operatoren sind nicht-linear (Sortierung statt gewichteter Summe).

Ersetzungsregeln bei N8 (9 Werte, sortiert g0...g8g_0 \le ... \le g_8):

OperatorRegelWirkung
Mediang(i,j)=g4g'(i,j) = g_4 (Mittelwert der Rangfolge)Rauschen weg, Kanten scharf
Dilatationg(i,j)=g8g'(i,j) = g_8 (Maximum)helle Bereiche wachsen
Erosiong(i,j)=g0g'(i,j) = g_0 (Minimum)dunkle Bereiche wachsen

Medianoperator

Der Medianoperator (median filter) ersetzt den Zentralpixel durch den mittleren Grauwert der sortierten Liste (bei N8: g4g_4, der 5. von 9 Werten). Er beseitigt isolierte fehlerhafte Bildpunkte (Impulsrauschen) und verwischt dabei die Kanten nicht - der entscheidende Vorteil gegenüber dem Mittelwertoperator.

Worked Example (Median 3x3): Bei einem Ausschnitt aus Werten 99 (dunkel) und 144 (hell) mit einem einzelnen Störpixel werden die 9 überdeckten Werte sortiert und der 5. Wert (g4g_4) genommen. Ein einzelner Ausreisser wandert bei der Sortierung an die Ränder (g0g_0 oder g8g_8) und wird so nie ausgewählt; die diagonale 99/144-Kante bleibt aber erhalten, weil dort die Mehrheit der Nachbarn den korrekten Wert liefert.

Dilatation und Erosion

Allgemein arbeiten Dilatation und Erosion mit einem Strukturelement kk auf dem Bild ses_e:

dil(x,y)=maxi,j{se(x+i,  y+j)+k(i,j)}ero(x,y)=mini,j{se(x+i,  y+j)+k(i,j)}dil(x,y) = \max_{i,j}\{\, s_e(x+i,\; y+j) + k(i,j)\,\} \qquad ero(x,y) = \min_{i,j}\{\, s_e(x+i,\; y+j) + k(i,j)\,\}

(i,ji, j laufen über den Geltungsbereich des Strukturelements.)

  • Dilatation (dilation) = Maximum (g8g_8): die hellen Bildbereiche (Vordergrundobjekte) dehnen sich aus.
  • Erosion (erosion) = Minimum (g0g_0): die dunklen Bereiche dehnen sich aus, weisse Pixelbereiche schrumpfen um eine Pixelschicht.

Worked Example (Dilatation/Erosion): Auf demselben 99/144-Ausschnitt breiten sich nach Dilatation die hellen 144er-Werte aus (mehr 144 im Ergebnis, helle Region wächst um eine Pixelschicht). Nach Erosion breiten sich umgekehrt die dunklen 99er-Werte aus.

Opening und Closing

Kombinationen aus Erosion und Dilatation (nn = Anzahl Durchläufe):

  • Opening (opening) =nErosion= n \cdot \text{Erosion} danach nDilatationn \cdot \text{Dilatation}. Zweck: Rauschen eliminieren (kleine, isolierte Vordergrundpixel entfernen).
  • Closing (closing) =nDilatation= n \cdot \text{Dilatation} danach nErosionn \cdot \text{Erosion}. Zweck: Lücken schliessen innerhalb der Vordergrundobjekte.

Reihenfolge ist ergebnisrelevant. Bei der Pfeil-Aufgabe (erst Rauschen weg, dann Lücken zu) liefert die Reihenfolge erst Closing, dann Opening (Variante B) ein deutlich besseres Ergebnis als die umgekehrte Reihenfolge (Variante A). Opening und Closing sind nicht vertauschbar.

Segmentierung

Segmentierung (segmentation) ist die inhaltliche Interpretation eines Bildes auf Pixelebene: Anhand von Pixeleigenschaften (Grauwert/Farbe, Nachbarschaft) wird erkannt, welche Pixel zu einem Objekt gehören; Pixel mit homogenen Eigenschaften werden zu einer Gruppe zusammengefasst.

Semantische Segmentierung (semantic segmentation) teilt das Bild ebenfalls in Klassen, entscheidend ist hier aber nicht die reine Pixeleigenschaft, sondern die Zugehörigkeit zu einer Objektklasse (z.B. Baum, Auto, Fahrbahn, Hintergrund).

Binarisierung (binarization, thresholding): Umwandlung in ein Schwarz-Weiss-Bild über einen Schwellwert (threshold). Der optimale Schwellwert lässt sich aus dem Histogramm ablesen (z.B. erstes Minimum nach dem Weiss-Peak). Beispiel Pfeil: Schwellwert 127 liefert ein verrauschtes Bild, der histogrammbasierte Schwellwert 225 ein sauberes.

Zusammenhangskomponenten (ZHK) und Flood Fill

Eine Zusammenhangskomponente / ZHK (connected component, CC) ist eine Gruppe zusammenhängender gleichfarbiger Pixel. Ein Bild wird segmentiert, indem man seine Zusammenhangskomponenten bildet.

Zentrale Regel (WS2025 prüfungsrelevant): Vorder- und Hintergrund müssen immer mit entgegengesetztem Nachbarschaftsverhältnis ermittelt werden - Vordergrund N4 \Rightarrow Hintergrund N8 (und umgekehrt). Grund: Bei einem N4-Vordergrund sind diagonal berührende Pixel nicht verbunden (die Ecken zählen nicht). Würde man den Hintergrund ebenfalls mit N4 zählen, könnte er durch dieselben diagonalen Lücken "hindurchfliessen" und Vordergrundobjekte würden fälschlich getrennt bzw. verbunden. Nur die entgegengesetzte Wahl (eine Seite N4, die andere N8) ergibt eine topologisch konsistente Aufteilung.

Worked Example (ZHK-Zählung): Dasselbe Pixelmuster in einem 8x8-Raster liefert je nach Nachbarschaft unterschiedliche Komponentenzahlen:

Ebenemit N4mit N8
Vordergrund7 ZHK2 ZHK
Hintergrund4 ZHK1 ZHK

Diagonal berührende Pixel bilden unter N8 eine gemeinsame Komponente, unter N4 nicht - daher die stark abweichenden Zahlen.

Flood Fill (rekursives Fluten)

Flood Fill (flood fill algorithm) bildet eine Zusammenhangskomponente rekursiv und markiert alle zusammenhängenden Vordergrundpixel mit derselben Marke (label). Ablauf (Pseudocode-Struktur der Vorlesung):

RekursivesFluten():
  marke = 0
  fuer alle Zeilen j:
    fuer alle Spalten i:
      falls g(i,j) == 255:              // unmarkierter Vordergrundpixel
        marke = marke + 1               // neue Komponente beginnt
        PixelAnlagern(i, j, marke)

PixelAnlagern(i, j, marke):
  fuer alle Nachbarpositionen (k,l) in N4 bzw. N8:
    falls g(k,l) == 255:                // noch unmarkierter Vordergrund
      g(k,l) = marke                    // markieren
      PixelAnlagern(k, l, marke)        // rekursiv weiterfluten

Jeder Aufruf der äusseren Schleife, der auf einen noch unmarkierten Vordergrundpixel (Wert 255) trifft, startet eine neue Marke und flutet von dort aus über alle erreichbaren Nachbarn. Am Ende trägt jede ZHK eine eindeutige Marke. So lässt sich beim Pfeil-Beispiel das grösste Vordergrundobjekt behalten und kleinere Reste (übrig gebliebene Pixelhaufen) verwerfen.

Anwendung: Bildvorverarbeitung (Fahrspurerkennung)

Durchgängiges Beispiel (lane detection): JPEG \to Grauwertbild (Helligkeitskanal) \to Binarisierung (Histogramm, Schwellwert ca. 135) \to Kantenextraktion mit Sobel \to Ausdünnen auf 1 Pixel Breite (Rangordnungsoperatoren bzw. in der Praxis der Canny Edge Detector) \to Hough-Transformation.

  • Hough-Transformation (Hough transform): sucht Geraden im Kantenbild und extrahiert jene, die (im Fahrspurbeispiel) nicht senkrecht verlaufen und die meisten Pixel vereinen. Voraussetzung: Kanten müssen 1 Pixel breit sein, sonst werden pro Kante zwei parallele Geraden erkannt.
  • Canny Edge Detector (Canny edge detector): praxisüblicher Detektor, der nahezu alle Kanten auf eine Pixelbreite ausdünnt.
  • Kalman-Filter (Kalman filter, Ausblick): iteratives Schätzverfahren aus fehlerbehafteten Beobachtungen (z.B. markierte Strassenpixel zu einer Linie verschmelzen, Object Tracking).

Zusammenfassende Pipeline (5 Stufen): (1) Weichzeichnen (selektiv, kantenerhaltend) \to (2) Binarisierung \to (3) Rangordnungsoperatoren \to (4) Kantenextraktion oder Segmentierung \to (5) Hough-Transformation. Ab Schritt 4/5 beginnt die inhaltliche Bildanalyse.

Kernel-Übersicht

KernelMatrixNormierung / SummeZweck
Identität[000;  010;  000][0\,0\,0;\;0\,1\,0;\;0\,0\,0]1unverändert
Mittelwert[111;  111;  111][1\,1\,1;\;1\,1\,1;\;1\,1\,1]1/91/9Weichzeichner
Gauss 3x3[121;  242;  121][1\,2\,1;\;2\,4\,2;\;1\,2\,1]1/161/16Weichzeichner (natürlicher)
Gauss 5x5siehe oben1/2561/256starker Weichzeichner
Differenz (vert. Kanten)[000;  011;  000][0\,0\,0;\;0\,{-}1\,1;\;0\,0\,0]e0,5+127e\cdot0{,}5+1271. Ableitung, 1 Pixel breit
Differenz (horiz. Kanten)[000;  010;  010][0\,0\,0;\;0\,{-}1\,0;\;0\,1\,0]e0,5+127e\cdot0{,}5+1271. Ableitung
Sobel-x (vert. Kanten)[101;  101;  101][{-}1\,0\,1;\;{-}1\,0\,1;\;{-}1\,0\,1]e0,5+127e\cdot0{,}5+127rauschrobust, breiter
Sobel-y (horiz. Kanten)[111;  000;  111][{-}1\,{-}1\,{-}1;\;0\,0\,0;\;1\,1\,1]e0,5+127e\cdot0{,}5+127rauschrobust, breiter
Laplace FLF_L[010;  141;  010][0\,1\,0;\;1\,{-}4\,1;\;0\,1\,0]Summe 02. Ableitung, isotrop
inv. Laplace[010;  141;  010][0\,{-}1\,0;\;{-}1\,4\,{-}1;\;0\,{-}1\,0]Summe 0Vorstufe Sharpening
Sharpening FKF_K (n=1n{=}1)[010;  151;  010][0\,{-}1\,0;\;{-}1\,5\,{-}1;\;0\,{-}1\,0]Summe 1Kontrast/Schärfung

Prüfungsrelevanz

  • Punktoperator vs. lokaler Operator sicher abgrenzen (Nachbarschaft ja/nein) und Beispiele je Kategorie nennen.
  • Faltungsformel und eine konkrete 3x3-Faltung rechnen (Zero-Padding am Rand). Das Sharpening-Beispiel mit Ergebnis 320 beherrschen.
  • Kernel auswendig: Identität, Mittelwert (1/91/9), Gauss (1/161/16), Laplace [010;141;010][0\,1\,0;1\,{-}4\,1;0\,1\,0], invertierter Laplace, Sharpening [010;151;010][0\,{-}1\,0;{-}1\,5\,{-}1;0\,{-}1\,0], Sobel-Varianten, Differenzoperator.
  • Normierungen: Mittelwert 1/91/9, Gauss 3x3 1/161/16, Gauss 5x5 1/2561/256; Differenzoperator g=e0,5+127g'=e\cdot0{,}5+127.
  • 1. vs. 2. Ableitung: Differenz/Sobel = 1. Ableitung (Peak an Kante); Laplace = 2. Ableitung (Nulldurchgang an Kante). Diskrete Formeln g(x+1)g(x)g(x{+}1)-g(x) bzw. g(x+1)2g(x)+g(x1)g(x{+}1)-2g(x)+g(x{-}1).
  • Sobel vs. Differenzoperator: Sobel mit Puffer-Zeile/-Spalte, rauschrobust aber mehrere Pixel breit; Differenzoperator 1 Pixel breit aber rauschanfällig.
  • Rangordnungsoperatoren sind nicht-linear (Sortierung, Strukturelement statt Kernel). Regeln N8: Median g4g_4, Dilatation g8g_8, Erosion g0g_0.
  • Median vs. Mittelwert: Median entfernt Impulsrauschen ohne Kantenverwaschung (klassische Prüfungsfrage).
  • Erosion/Dilatation-Richtung: Dilatation = Max = helle Bereiche wachsen; Erosion = Min = dunkle Bereiche wachsen / weisse schrumpfen.
  • Opening = Erosion dann Dilatation (Rauschen weg); Closing = Dilatation dann Erosion (Lücken zu). Reihenfolge ist ergebnisrelevant (Variante A vs. B).
  • ZHK: entgegengesetzte Nachbarschaft für Vorder-/Hintergrund; N4 vs. N8 liefert unterschiedliche Komponentenzahlen (Zählaufgabe). Flood-Fill-Ablauf verstehen.
  • Hough braucht 1-Pixel-breite Kanten (sonst doppelte Geraden); Canny dünnt aus.
  • Mach-Band-Effekt als Wahrnehmungsmotivation des Kontrastfilters (Over-/Undershoot, Ernst Mach 1865, radiologische Fehldeutung).

Typische Fehler

  • Zero-Padding am Bildrand vergessen (Randproblem: nur 8 von 9 Positionen gültig, z.B. 2558/9=227255\cdot8/9=227).
  • Normierungsfaktor weglassen und dadurch Werte ausserhalb [0..255][0..255] nicht zurücktransformieren.
  • Kantenrichtung verwechseln: die Orientierung des Kernels bestimmt, ob vertikale oder horizontale Kanten gefunden werden.
    1. und 2. Ableitung vertauschen (Peak an der Kante vs. Nulldurchgang an der Kante).
  • Erosion und Dilatation in der Wirkungsrichtung verwechseln (hell wächst bei Dilatation, dunkel bei Erosion).
  • Opening und Closing vertauschen oder die Reihenfolge der beiden Schritte als beliebig ansehen.
  • Bei ZHK dieselbe Nachbarschaft für Vorder- und Hintergrund verwenden statt der entgegengesetzten.
  • Kernel mit gerader Kantenlänge verwenden (kein eindeutiges Zentrum, Verschiebung um einen halben Pixel).
  • Hough auf mehrere Pixel breite Kanten anwenden und dadurch doppelte Geraden pro Kante erhalten.

Glossar

DeutschEnglish
Bildverarbeitungimage processing
lokale Bildoperationlocal image operation
Punktoperatorpoint operator
Faltungconvolution
Faltungsmatrix / Kernelconvolution matrix / kernel
Faltungsergebnis e(i,j)e(i,j)convolution result
4er-/8er-Nachbarschaft (N4/N8)4-/8-neighborhood
Identitätsoperatoridentity operator
Mittelwertoperatormean filter / box blur
Gauss-FilterGaussian filter
Weichzeichnerblur / smoothing filter
Grauwertgray value
Mach-Band-EffektMach band effect
Differenzoperatordifference operator (gradient)
1. / 2. Ableitung1st / 2nd derivative
Sobel-OperatorSobel operator
Puffer-Zeile/-Spaltebuffer row/column
Laplace-OperatorLaplace operator
invertierter Laplace-Operatorinverted Laplace operator
Kontrastverbesserungsfiltercontrast enhancement / sharpening filter
Kantendetektor / Kantenbildedge detector / edge image
Canny Edge DetectorCanny edge detector
Rangordnungsoperatorrank-order operator
Strukturelementstructuring element
Medianoperatormedian filter
Dilatationdilation
Erosionerosion
Opening / Closingopening / closing
Rauschennoise
Binarisierungbinarization / thresholding
Schwellwertthreshold
Histogrammhistogram
Segmentierungsegmentation
semantische Segmentierungsemantic segmentation
Zusammenhangskomponente (ZHK)connected component
Nachbarschaftsverhältnisneighborhood relation
Rekursives Fluten / Flood Fillflood fill algorithm
Markelabel
Vordergrund / Hintergrundforeground / background
Hough-TransformationHough transform
Fahrspurerkennunglane detection
Kalman-FilterKalman filter
Bildvorverarbeitungimage preprocessing
Helligkeitskanalbrightness / luminance channel