pouringpouringPouringPouringpouring (Operator)

Name

pouringpouringPouringPouringpouring — 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)

def pouring(image: HObject, mode: str, min_gray: int, max_gray: int) -> HObject

Beschreibung

pouringpouringPouringPouringPouringpouring 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. pouringpouringPouringPouringPouringpouring 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 ModeModeModeModemodemode 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 ModeModeModeModemodemode werden nachfolgend erläutert.

'all'

Diese Parameterbelegung stellt den normalen Modus dar. Es wird die komplette Segmentierungsroutine gestartet, bei der alle lokalen Maxima mit den zuzuordnenden Bereichen ermittelt werden. Überschneidungsbereiche werden aufgeteilt.

'maxima'

Die Segmentierungsroutine terminiert, sobald die lokalen Maxima der Eingabebilder ermittelt worden sind. Eine Segmentierung in zugehörige Bereiche wird dann nicht mehr durchgeführt. Die Ausgabe besteht aus den verschiedenen Maxima.

'regions'

Bei dieser Parameterbelegung führt die Segmentierungsroutine 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 Segmentierung die Aufteilung eines gleichmäßigen, vom restlichen Eingabebild verschiedenen Hintergrundes zu vermeiden, bieten die Parameter MinGrayMinGrayMinGrayMinGrayminGraymin_gray und MaxGrayMaxGrayMaxGrayMaxGraymaxGraymax_gray die Möglichkeit, Grauwertschwellen vorzugeben, so dass der Hintergrund ausmaskiert wird. Ein gewünschter unterer Grauwert wird in MinGrayMinGrayMinGrayMinGrayminGraymin_gray 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 Segmentierung aller Bildpunkte des Eingabebildes setzt man MinGrayMinGrayMinGrayMinGrayminGraymin_gray auf 0 und MaxGrayMaxGrayMaxGrayMaxGraymaxGraymax_gray auf 255 und erreicht so eine Bearbeitung des kompletten Grauwertspektrums. Auf MinGrayMinGrayMinGrayMinGrayminGraymin_gray < MaxGrayMaxGrayMaxGrayMaxGraymaxGraymax_gray ist zu achten.

Ausführungsinformationen

Parameter

ImageImageImageImageimageimage (input_object)  singlechannelimage objectHImageHObjectHImageHobject (byte)

Eingabebild.

RegionsRegionsRegionsRegionsregionsregions (output_object)  region-array objectHRegionHObjectHRegionHobject *

Segmentierte Regionen.

ModeModeModeModemodemode (input_control)  string HTuplestrHTupleHtuple (string) (string) (HString) (char*)

Gewünschter Modus für den Programmablauf.

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

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

MinGrayMinGrayMinGrayMinGrayminGraymin_gray (input_control)  integer HTupleintHTupleHtuple (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 min_gray ≤ 255 (lin)

Minimale Schrittweite: 1

Empfohlene Schrittweite: 10

Restriktion: MinGray >= 0

MaxGrayMaxGrayMaxGrayMaxGraymaxGraymax_gray (input_control)  integer HTupleintHTupleHtuple (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 max_gray ≤ 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

pouringpouringPouringPouringPouringpouring liefert normalerweise den Wert TRUE. Gegebenenfalls wird eine Fehlerbehandlung durchgeführt.

Vorgänger

binomial_filterbinomial_filterBinomialFilterBinomialFilterBinomialFilterbinomial_filter, gauss_filtergauss_filterGaussFilterGaussFilterGaussFiltergauss_filter, smooth_imagesmooth_imageSmoothImageSmoothImageSmoothImagesmooth_image, mean_imagemean_imageMeanImageMeanImageMeanImagemean_image

Alternativen

watershedswatershedsWatershedsWatershedsWatershedswatersheds, local_maxlocal_maxLocalMaxLocalMaxLocalMaxlocal_max, watersheds_thresholdwatersheds_thresholdWatershedsThresholdWatershedsThresholdWatershedsThresholdwatersheds_threshold, watersheds_markerwatersheds_markerWatershedsMarkerWatershedsMarkerWatershedsMarkerwatersheds_marker

Siehe auch

histo_2dimhisto_2dimHisto2dimHisto2dimHisto2dimhisto_2dim, expand_regionexpand_regionExpandRegionExpandRegionExpandRegionexpand_region, expand_grayexpand_grayExpandGrayExpandGrayExpandGrayexpand_gray, expand_gray_refexpand_gray_refExpandGrayRefExpandGrayRefExpandGrayRefexpand_gray_ref

Modul

Foundation