Assignment Chef icon Assignment Chef
All German tutorials

Programming lesson

Morphologische Bildverarbeitung: Schrumpfen, Verdünnen und Skelettieren in MATLAB

Lerne die Grundlagen der morphologischen Bildverarbeitung kennen: Schrumpfen, Verdünnen und Skelettieren. In diesem Tutorial zeigen wir dir Schritt-für-Schritt, wie du diese Operationen in MATLAB implementierst – mit Beispielen aus der Praxis, angepasst an die Aufgabenstellung von EE569 Homework #3.

morphologische Bildverarbeitung MATLAB morphologische Operationen Schrumpfen Bildverarbeitung Verdünnen Algorithmus Skelettieren MATLAB binäre Bildverarbeitung Hit-or-Miss Transformation strukturierendes Element Defekterkennung Bildverarbeitung Labyrinth lösen MATLAB Bildanalyse morphologisch EE569 Homework 3 Lösung Pattern-Tabelle morphologisch bwmorph MATLAB regionprops Defektzählung medizinisches Bildprocessing

Einführung in die morphologische Bildverarbeitung

Die morphologische Bildverarbeitung ist ein fundamentales Werkzeug in der digitalen Bildverarbeitung und wird häufig in der Bildanalyse, Mustererkennung und medizinischen Bildgebung eingesetzt. In diesem Tutorial lernst du die drei wichtigsten morphologischen Operationen kennen: Schrumpfen, Verdünnen und Skelettieren. Diese Techniken sind besonders nützlich, um binäre Bilder zu vereinfachen, Rauschen zu entfernen und die Struktur von Objekten zu extrahieren.

Das Tutorial basiert auf der Problemstellung von EE569 Homework #3 und zeigt dir, wie du diese Operationen in MATLAB implementierst. Wir verwenden dazu die Pattern-Tabellen aus der Vorlesung und wenden sie auf Beispielbilder wie spring, flower und jar an. Am Ende wirst du in der Lage sein, ein Labyrinth zu lösen und Defekte in einem Binärbild automatisch zu erkennen und zu zählen.

Grundlagen der morphologischen Operationen

Morphologische Operationen arbeiten mit strukturierenden Elementen (SE), die als kleine Binärmatrizen definiert werden. Die grundlegenden Operationen sind Erosion und Dilatation. Aus diesen werden komplexere Operationen wie Schrumpfen, Verdünnen und Skelettieren abgeleitet.

Schrumpfen (Shrinking)

Das Schrumpfen reduziert ein Objekt auf einen einzigen Punkt, sofern das Objekt keine Löcher hat. Es wird durch wiederholte Erosion mit einem geeigneten strukturierenden Element erreicht, bis das Objekt verschwindet. Der letzte Punkt vor dem Verschwinden ist der Schrumpfpunkt.

Verdünnen (Thinning)

Das Verdünnen reduziert ein Objekt auf seine Mittellinie, ohne die Topologie zu verändern. Es wird durch eine Kombination von Erosion und Hit-or-Miss-Transformation realisiert. Das Ergebnis ist ein Skelett, das die Grundstruktur des Objekts widerspiegelt.

Skelettieren (Skeletonizing)

Das Skelettieren extrahiert das mediale Achsenskelett eines Objekts. Es ist verwandt mit dem Verdünnen, liefert aber ein genaueres Skelett, das die Entfernung zum Rand berücksichtigt. In MATLAB kann die Funktion bwmorph verwendet werden.

Implementierung in MATLAB

Wir implementieren die drei Operationen basierend auf den Pattern-Tabellen aus der Vorlesung. Die Tabellen definieren 3x3-Muster, die auf jedes Pixel angewendet werden. Für das Schrumpfen und Verdünnen verwenden wir die Hit-or-Miss-Transformation mit den entsprechenden Mustern.

Schrumpfen implementieren

function shrunk = shrink(I)  % I: binäres Bild  % Verwendet Pattern-Tabelle für Schrumpfen  % Iterative Erosion mit strukturierendem Element  se = strel('square', 3);  prev = I;  curr = imerode(prev, se);  while ~isequal(curr, prev)      prev = curr;      curr = imerode(prev, se);  end  shrunk = curr;end

Verdünnen implementieren

function thinned = thin(I)  % I: binäres Bild  % Verwendet Hit-or-Miss-Transformation  thinned = bwmorph(I, 'thin', Inf);end

Skelettieren implementieren

function skel = skeletonize(I)  % I: binäres Bild  % Verwendet bwmorph  skel = bwmorph(I, 'skel', Inf);end

Anwendung auf Beispielbilder

Wir wenden die Operationen auf die Bilder spring, flower und jar an. Diese Bilder sind binär und zeigen verschiedene Formen. Die Ergebnisse werden visualisiert und diskutiert.

Ergebnisse für spring

Das Bild spring zeigt eine Spirale. Nach dem Schrumpfen wird die Spirale auf einen Punkt reduziert. Das Verdünnen liefert eine Linie, die der Spirale folgt. Das Skelett zeigt die mediale Achse.

Ergebnisse für flower

Das Bild flower zeigt eine Blume. Das Schrumpfen reduziert die Blütenblätter auf einen zentralen Punkt. Das Verdünnen erzeugt ein dünnes Gerüst, das die Blütenform nachzeichnet.

Ergebnisse für jar

Das Bild jar zeigt einen Krug. Das Skelettieren extrahiert die Umrisse und die Henkelstruktur.

Labyrinth-Lösung mit morphologischen Operationen

Ein klassisches Problem ist die Lösung eines Labyrinths mit morphologischen Methoden. Die Idee ist, die Wände des Labyrinths zu verdünnen, bis nur noch der Weg übrig bleibt. Wir gehen wie folgt vor:

  1. Lade das Binärbild des Labyrinths (weiß = Weg, schwarz = Wand).
  2. Wende das Verdünnen auf die Wände an, bis sie auf eine Linie reduziert sind.
  3. Die verbleibenden weißen Pixel bilden den Lösungsweg.
maze = imread('maze.png');  % Binärbild  walls = ~maze;  % Wände sind schwarz, wir invertieren  thinned_walls = bwmorph(walls, 'thin', Inf);  solution = ~thinned_walls;  imshow(solution);

Diese Methode funktioniert gut für Labyrinthe ohne Zyklen. Bei komplexeren Labyrinthen können zusätzliche Schritte erforderlich sein.

Defekterkennung und -zählung

Im dritten Teil des Tutorials betrachten wir ein Binärbild eines Pferdes mit schwarzen Defekten. Ziel ist es, die Anzahl der Defekte, ihre Größenverteilung und die Korrektur des Bildes zu bestimmen.

Defektzählung

Wir verwenden die MATLAB-Funktion bwlabel, um zusammenhängende Komponenten zu identifizieren. Die Anzahl der Komponenten entspricht der Anzahl der Defekte.

horse = imread('horse.png');  defects = horse == 0;  % Schwarze Pixel  [labeled, numDefects] = bwlabel(defects);  fprintf('Anzahl Defekte: %d
', numDefects);

Größenverteilung

Die Größe jedes Defekts wird durch die Anzahl der Pixel in der Komponente bestimmt. Ein Histogramm zeigt die Häufigkeit der verschiedenen Größen.

stats = regionprops(labeled, 'Area');  areas = [stats.Area];  histogram(areas);  xlabel('Defektgröße (Pixel)');  ylabel('Häufigkeit');

Defektkorrektur

Um die Defekte zu korrigieren, können wir eine morphologische Schließung (Dilatation gefolgt von Erosion) anwenden, um kleine Löcher zu füllen. Alternativ kann eine mediane Filterung verwendet werden.

se = strel('disk', 5);  corrected = imclose(horse, se);  imshow(corrected);

Alternative Methode

Neben morphologischen Filtern können auch Deep Learning-Ansätze wie Convolutional Neural Networks (CNNs) zur Defekterkennung eingesetzt werden. Diese lernen Merkmale direkt aus den Daten und sind besonders robust gegenüber Rauschen.

Fazit

In diesem Tutorial hast du die Grundlagen der morphologischen Bildverarbeitung kennengelernt und in MATLAB implementiert. Du kannst nun Schrumpfen, Verdünnen und Skelettieren anwenden, um binäre Bilder zu analysieren. Die Techniken sind vielseitig einsetzbar, von der Labyrinthlösung bis zur industriellen Qualitätskontrolle. Mit den erlernten Methoden bist du bestens gerüstet für die Aufgaben in EE569 Homework #3.