Modul Segmentation

Der Vorgang der Objektsegmentierung unterteilt sich im Wesentlichen in zwei Schritte, die Vorfilterung des Bildes sowie der letztendlichen Ermittlung der Kanten des Objektes auf diesem vorgefilterten Bild. Vom Benutzer steuerbar ist ausschließlich der Vorgang der Vorfilterung.

In der Vorfilterung wird zunächst ein Glättungsfilter eingesetzt, um Rauschen und Bildstörungen zu entfernen. Mittels eines Laplcefilters werden im Bild auftretende Kanten extrahiert. Um später das Objekt segmentieren zu können, muss die Objektkontur möglichst geschlossen sein. Hierfür wird ein Closing-Filter angewandt, dessen Stärke vom Benutzer anhand der Zahl der Iterationen gesteuert werden kann. Anschließend wird ein Binärbild erzeugt, wobei es ebenfalls Aufgabe des Benutzers ist, einen geeigneten Schwellwert zu finden.

Um nun die Segmentierung zu erstellen, werden von den Kanten des Bildes zum Mittelpunkt hin die ersten zum Objekt gehörigen Pixel in Form der jeweils ersten weißen Pixels gesucht. Befinden sich zwei Punkte der gefundenen Segmentierung nicht direkt nebeneinander, so wird versucht die Kontur zu schließen, indem entlang der Kante ein Weg von einem Punkt zum nächsten gesucht wird. Wird eine Möglichkeit gefunden, so werden diese Punkte der Segmentierung hinzugefügt. Befinden sich anschließend noch immer Lücken in der Segmentierung, so wird an diesen Stellen interpoliert.

Um die gefundene Segmentierung weiter zu verbessern, gibt es die Möglichkeit einen Snake-Algorithmus auf diese anzuwenden. Hierfür werden Kontrollpunkte der Segmentierung extrahiert und so verschoben, das sich eine optimale Lage bezüglich gleicher Abstände und flacher Winkel zwischen den einzelnen Kontrollpunkten ergibt, und diese möglichst auf einem Pixel liegen, der einen hohen Intensitätsunterschied zu seinem Nachbarn aufweist.

1 Vorfilterung

1.1 Glättungsfilter


Gleitender Mittelwert eines 3x3 Kernels, um Störrauschen aus dem Quellbild zu entfernen.

    
Quellbild gefiltertes Bild

1.2 Kantenerkennungsfilter

Herausfiltern hoher Frequenzen (Kanten) mittels Laplacefilterung auf Grundlage des vorgefilterten Bildes

   
Quellbild gefiltertes Bild

 

 

1.3 Closing

Anwendung eines morphologischen Filters, um Lücken zwischen den gefundenen Kanten zu schließen. Durch die Filterung gehen kleine dunkle Bereiche verloren, helle Bereiche hingegen bleiben erhalten oder vergrößern sich.
Das Ergebnis der Filterung ist abhängig von der Anzahl der Iterationen. Je größer die Anzahl der Iterationen, desto besser schließen sich Lücken zwischen den Kanten, es ergibt sich jedoch auch das Problem, dass kleine konkave Bereiche zulaufen.
Die Anzahl der Iterationen wird über den Parameter closeIteration gesteuert. Erfahrungsgemäß ergeben Werte im Bereich 3-5 gute Ergebnisse als Grundlage für die weitere Verarbeitung des Bildes. Es muss mindestens eine Iteration durchgeführt werden.

    
Quellbild 3 Iterationen
6 Iterationen 10 Iterationen


1.4 Binary-Filter

Der Binary-Filter wird eingesetzt, um aus dem vorgefilterten Graustufenbild ein Binärbild mittels eines Schwellwertes zu erzeugen. Alle Pixel, deren Intensität unterhalb dieses Schwellwertes liegt, werden zu schwarz (0), alle darüber liegenden zu weiß (255). Nur weiße Pixel werden später als Objektkante erkannt.
Der Schwellwerte wird über den Parameter threshold gesteuert. Er muss zwischen 1 und 254 liegen. Gute Ergebnisse zur Weiterverarbeitung haben sich erfahrungsgemäß im Bereich von 50 bis 100 ergeben. Liegt der Schwellwert zu niedrig, so werden Schatten und andere störende Effekte im Hintergrund sichtbar und somit zum Objekt hinzugefügt. Wird der Wert zu hoch gewählt, so können Lücken im Objekt entstehen, wodurch der Algorithmus ins Objektinnere laufen würde.

Schwellwert 30 Schwellwert 50
    
Schwellwert 70 Schwellwert 110


2 Algorithmus zur Segmentierung

2.1 Edge-Iteration

Die Edge-Iteration setzt zunächst Kontrollpunkte auf jedes Pixel der vier Bildkanten. Bei jedem Iterationsschritt werden diese Punkte um einen Pixel zur Mitte hin versetzt. Falls es sich dabei um einen weißen Pixel handelt, so wird dieser Kontrollpunkt als fest markiert und nimmt nicht weiter an der Iteration teil. Die Iteration wird so lange fortgesetzt, bis alle Kontrollpunkte gestoppt wurden oder sich in der Mitte des Bildes befinden.
Die so gefundenen Kontrollpunkte stellen die erste grobe Segmentierung des Objektes dar.


2.2 Kantenschließung

Liegen zwei Kontrollpunkte nicht direkt nebeneinander, so wird in diesem Schritt versucht diese Lücke zu schließen. Wird zwischen diesen Punkten ein Polygonzug weißer Pixel mit jeweils mindestens einem schwarzen Pixelnachbarn gefunden, so werden diese Pixel eingefügt. Zunächst werden die Kontrollpunkte im Uhrzeigersinn bearbeitet, anschließend entgegen.
Die Kantenschließung liefert nur Ergebnisse so lange keine spitzen Winkel entlang der Objektkante dieses Bereiches auftauchen.


forward


backward

2.3 Interpolation

Gibt es noch Kontrollpunkte, die nicht direkt benachbart sind, so findet eine direkte Interpolation zwischen ihnen statt.



C Snake

Mittels des Snake-Algorithmus sollten die gefundenen Kontrollpunkte der Segmentierung weiter verbessert werden. In der Praxis ergab sich jedoch eher eine Verschlechterung der bereits gefundenen Segmentierung.
Die Steuerung der Snake erfolgt über die Angabe der Anzahl der Iterationen sowie einer Gewichtung dreier Faktoren des Algorithmus.