pouringpouringPouringPouring (Operator)

Name

pouringpouringPouringPouring — Segmentieren nach dem „Gießkannen“-Prinzip.

Signatur

pouring(Image : Regions : Mode, MinGray, MaxGray : )

Herror pouring(const Hobject Image, Hobject* Regions, const char* Mode, const Hlong MinGray, const Hlong MaxGray)

Herror T_pouring(const Hobject Image, Hobject* Regions, const Htuple Mode, const Htuple MinGray, const Htuple MaxGray)

void Pouring(const HObject& Image, HObject* Regions, const HTuple& Mode, const HTuple& MinGray, const HTuple& MaxGray)

HRegion HImage::Pouring(const HString& Mode, Hlong MinGray, Hlong MaxGray) const

HRegion HImage::Pouring(const char* Mode, Hlong MinGray, Hlong MaxGray) const

HRegion HImage::Pouring(const wchar_t* Mode, Hlong MinGray, Hlong MaxGray) const   (Nur Windows)

static void HOperatorSet.Pouring(HObject image, out HObject regions, HTuple mode, HTuple minGray, HTuple maxGray)

HRegion HImage.Pouring(string mode, int minGray, int maxGray)

Beschreibung

pouringpouringPouringPouringPouring 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. pouringpouringPouringPouringPouring 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 ModeModeModeModemode 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 ModeModeModeModemode werden nachfolgend erläutert.

'all'

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.

'maxima'

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.

'regions'

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 MinGrayMinGrayMinGrayMinGrayminGray und MaxGrayMaxGrayMaxGrayMaxGraymaxGray die Möglichkeit, Grauwertschwellen vorzugeben, so dass der Hintergrund ausmaskiert wird. Ein gewünschter unterer Grauwert wird in MinGrayMinGrayMinGrayMinGrayminGray 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 MinGrayMinGrayMinGrayMinGrayminGray auf 0 und MaxGrayMaxGrayMaxGrayMaxGraymaxGray auf 255 und erreicht so eine Bearbeitung des kompletten Grauwertspektrums. Auf MinGrayMinGrayMinGrayMinGrayminGray < MaxGrayMaxGrayMaxGrayMaxGraymaxGray ist zu achten.

Ausführungsinformationen

Parameter

ImageImageImageImageimage (input_object)  singlechannelimage objectHImageHImageHobject (byte)

Eingabebild.

RegionsRegionsRegionsRegionsregions (output_object)  region-array objectHRegionHRegionHobject *

Segmentierte Regionen.

ModeModeModeModemode (input_control)  string HTupleHTupleHtuple (string) (string) (HString) (char*)

Gewünschter Modus für den Programmablauf.

Defaultwert: 'all' "all" "all" "all" "all"

Werteliste: 'all'"all""all""all""all", 'maxima'"maxima""maxima""maxima""maxima", 'regions'"regions""regions""regions""regions"

MinGrayMinGrayMinGrayMinGrayminGray (input_control)  integer HTupleHTupleHtuple (integer) (int / long) (Hlong) (Hlong)

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 MinGray MinGray MinGray minGray ≤ 255 (lin)

Minimale Schrittweite: 1

Empfohlene Schrittweite: 10

Restriktion: MinGray >= 0

MaxGrayMaxGrayMaxGrayMaxGraymaxGray (input_control)  integer HTupleHTupleHtuple (integer) (int / long) (Hlong) (Hlong)

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 MaxGray MaxGray MaxGray maxGray ≤ 255 (lin)

Minimale Schrittweite: 1

Empfohlene Schrittweite: 10

Restriktion: MaxGray <= 255 && MaxGray > MinGray

Beispiel (HDevelop)

* 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)

Beispiel (C)

/* Segmentation of a filtered image */
read_image(&Image,"br2");
mean_image(Image,&Mean,11,11);
pouring(Mean,&Seg,"all",0,255);
disp_image(Mean,WindowHandle);
set_colored(WindowHandle,12);
disp_region(Seg,WindowHandle);

/* Segmentation of an image with masking of a dark backround */
read_image(&Image,"hand");
mean_image(Image,&Mean,15,15);
pouring(Mean,&Seg,"all",40,255);
disp_image(Mean,WindowHandle);
set_colored(WindowHandle,12);
disp_region(Seg,WindowHandle);

Beispiel (HDevelop)

* 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)

Beispiel (HDevelop)

* 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)

Beispiel (HDevelop)

* 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)

Komplexität

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

Ergebnis

pouringpouringPouringPouringPouring liefert normalerweise den Wert 2 (H_MSG_TRUE). Gegebenenfalls wird eine Fehlerbehandlung durchgeführt.

Vorgänger

binomial_filterbinomial_filterBinomialFilterBinomialFilterBinomialFilter, gauss_filtergauss_filterGaussFilterGaussFilterGaussFilter, smooth_imagesmooth_imageSmoothImageSmoothImageSmoothImage, mean_imagemean_imageMeanImageMeanImageMeanImage

Alternativen

watershedswatershedsWatershedsWatershedsWatersheds, local_maxlocal_maxLocalMaxLocalMaxLocalMax, watersheds_thresholdwatersheds_thresholdWatershedsThresholdWatershedsThresholdWatershedsThreshold, watersheds_markerwatersheds_markerWatershedsMarkerWatershedsMarkerWatershedsMarker

Siehe auch

histo_2dimhisto_2dimHisto2dimHisto2dimHisto2dim, expand_regionexpand_regionExpandRegionExpandRegionExpandRegion, expand_grayexpand_grayExpandGrayExpandGrayExpandGray, expand_gray_refexpand_gray_refExpandGrayRefExpandGrayRefExpandGrayRef

Modul

Foundation