pouring
— Segmentieren nach dem „Gießkannen“-Prinzip.
pouring
sieht die Werte des Eingabebildes als
topologisches (Grauwert-)Gebirge an, das von oben betrachtet wird.
Dabei werden große (= helle) Grauwerte als höher gelegene Punkte
interpretiert, wogegen kleine (= dunkle) Grauwerte entsprechend die
„Täler“ bilden. pouring
segmentiert die
Eingabebilder in mehreren Teilschritten. Zuerst werden die relativ
höchsten Grauwerte --- im Folgenden als „lokale Maxima“
bezeichnet --- ermittelt, d.h. die Pixel, die entweder allein oder
in Form eines zusammenhängenden Plateaus größere Grauwerte
besitzen, als die unmittelbaren Nachbarn. Die Bestimmung der
lokalen Maxima basiert dabei auf Vergleichen in der 4-er
Nachbarschaft. Im nächsten Teilschritt bilden die so gefundenen
lokalen Maxima den Ausgangspunkt für die Bereichszuordnung, bei der
sich die Segmente von den Maxima ausgehend bis in die „Talsohlen“
ausdehnen, d.h. solange absteigende Grauwertketten existieren (wie
Wasser, das aus einer Gießkanne über die Kuppen gegossen wurde und
nun in alle Richtungen nach unten abläuft). Auch hier wird die
4-er Nachbarschaft zugrunde gelegt, jedoch mit abgeschwächter
Bedingung (kleiner gleich). Dabei kann es zur Überschneidungen in
den „Talsohlen“ kommen, wenn die Bedingung für mehr als ein
Segment erfüllt ist. Diese Schnittmengen werden vorerst keinem
Segment zugeordnet, sondern im letzten Teilschritt unter den
konkurrierenden Segmenten aufgeteilt. Die Aufteilung erfolgt durch
pixelweises gleichmäßiges Ausdehnen aller beteiligten Segmente,
bis alle Pixel eindeutig zugeordnet wurden. Mit Hilfe des
Parameters Mode
kann der Programmablauf gesteuert werden.
In Abhängigkeit von diesem Eingabeparameter läuft entweder der
gesamte Algorithmus ab, oder wird nach Vollendung von Teilschritten
--- z.B. dem Auffinden aller lokalen Maxima oder der isolierten
Segmente ohne Aufteilung der Schnittmengen --- beendet. Die
möglichen Werte für Mode
werden nachfolgend erläutert.
Diese Parameterbelegung stellt den normalen Modus dar. Es wird die komplette Segmentationsroutine gestartet, bei der alle lokalen Maxima mit den zuzuordnenden Bereichen ermittelt werden. Überschneidungsbereiche werden aufgeteilt.
Die Segmentationsroutine terminiert, sobald die lokalen Maxima der Eingabebilder ermittelt worden sind. Eine Segmentation in zugehörige Bereiche wird dann nicht mehr durchgeführt. Die Ausgabe besteht aus den verschiedenen Maxima.
Bei dieser Parameterbelegung führt die Segmentationsroutine die Suche nach allen lokalen Maxima sowie den zugehörigen Bereichen, die eindeutig zugeordnet werden können, durch. Die Teilbereiche, in den Überschneidungen auftreten, d.h. die mehr als einem Maximum zugeordnet werden können, werden nicht weiter bearbeitet, also nicht aufgeteilt. Die Ausgabe besteht aus allen ermittelten isolierten Segmenten.
Um bei Ablauf der vollständigen Segmentation die Aufteilung eines
gleichmäßigen, vom restlichen Eingabebild verschiedenen
Hintergrundes zu vermeiden, bieten die Parameter MinGray
und MaxGray
die Möglichkeit, Grauwertschwellen
vorzugeben, so dass der Hintergrund ausmaskiert wird. Ein
gewünschter unterer Grauwert wird in MinGray
angegeben.
Alle Bildpunkte, die einen kleineren Grauwert besitzen, werden dann
weder zur Bestimmung der Maxima, noch zur weiteren Segmentierung
herangezogen. Entsprechendes gilt für die Angabe einer oberen
Grauwertschwelle in MaxGray: alle Pixel mit einem größeren
Grauwert werden ebenfalls einfach ausmaskiert. Für eine komplette
Segmentation aller Bildpunkte des Eingabebildes setzt man
MinGray
auf 0 und MaxGray
auf 255 und erreicht
so eine Bearbeitung des kompletten Grauwertspektrums. Auf
MinGray
< MaxGray
ist zu achten.
Image
(input_object) singlechannelimage →
object (byte)
Eingabebild.
Regions
(output_object) region-array →
object
Segmentierte Regionen.
Mode
(input_control) string →
(string)
Gewünschter Modus für den Programmablauf.
Defaultwert: 'all'
Werteliste: 'all' , 'maxima' , 'regions'
MinGray
(input_control) integer →
(integer)
Alle Grauwerte, die echt unterhalb dieses Schwellenwertes liegen, werden ausmaskiert.
Defaultwert: 0
Wertevorschläge: 0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110
Typischer Wertebereich: 0
≤
MinGray
≤
255
(lin)
Minimale Schrittweite: 1
Empfohlene Schrittweite: 10
Restriktion: MinGray >= 0
MaxGray
(input_control) integer →
(integer)
Alle Grauwerte, die echt oberhalb dieses Schwellenwertes liegen, werden ausmaskiert.
Defaultwert: 255
Wertevorschläge: 100, 110, 120, 130, 140, 150, 160, 170, 180, 190, 200, 210, 220, 230, 240, 250, 255
Typischer Wertebereich: 0
≤
MaxGray
≤
255
(lin)
Minimale Schrittweite: 1
Empfohlene Schrittweite: 10
Restriktion: MaxGray <= 255 && MaxGray > MinGray
* Segment a filtered image read_image(Image,'particle') mean_image(Image,Mean,11,11) pouring(Mean,Seg,'all',0,255) dev_display(Mean) dev_set_colored(12) dev_display(Seg) * Segment an image while masking the dark background read_image(Image,'particle') mean_image(Image,ImageMean,15,15) pouring(Mean,Seg,'all',90,255) dev_display(Mean) dev_set_colored(12) dev_display(Seg)
Sei N die Anzahl der Bildpunkte des Eingabebildes und M die Anzahl der gefundenen Segmente, wobei das umschreibende Rechteck für ein Segment i insgesamt m_{i} Pixel beinhalte. Sei außerdem noch K_{i} die Komplexität der Lauflängenkodierung von Segment i, so beträgt die Laufzeitkomplexität
pouring
liefert normalerweise den Wert 2 (H_MSG_TRUE).
Gegebenenfalls wird eine Fehlerbehandlung durchgeführt.
binomial_filter
,
gauss_filter
,
smooth_image
,
mean_image
watersheds
,
local_max
,
watersheds_threshold
,
watersheds_marker
histo_2dim
,
expand_region
,
expand_gray
,
expand_gray_ref
Foundation