gray_insidegray_insideGrayInsideGrayInside (Operator)

Name

gray_insidegray_insideGrayInsideGrayInside — Berechnung des niedrigstmöglichen Grauwerts auf einem beliebigen Weg zum Bildrand für jeden Bildpunkt.

Signatur

gray_inside(Image : ImageDist : : )

Herror gray_inside(const Hobject Image, Hobject* ImageDist)

Herror T_gray_inside(const Hobject Image, Hobject* ImageDist)

void GrayInside(const HObject& Image, HObject* ImageDist)

HImage HImage::GrayInside() const

static void HOperatorSet.GrayInside(HObject image, out HObject imageDist)

HImage HImage.GrayInside()

Beschreibung

gray_insidegray_insideGrayInsideGrayInsideGrayInside „sucht“ sich für jeden Bildpunkt den günstigsten Weg zum Bildrand, d.h. den Weg, auf dem möglichst niedrige Grauwerte zu überwinden sind. Die Differenz des Grauwertes des jeweiligen Punktes zum maximalen Grauwert auf diesem Weg wird für jeden Punkt berechnet und als Ergebnisbild geliefert. Helle Bildbereiche im Ergebnisbild bedeuten also, dass diese Bereiche (die im Originalbild typischerweise eher dunkel sind) von helleren Bereichen eingeschlossen sind. Dunkle bzw. schwarze Bereiche im Ergebnisbild bedeuten, dass zwischen ihnen und dem Bildrand nur geringfügig hellere bzw. dunklere Bildbereiche existieren (was nicht heißen muss, dass sie nur von dunkleren Bereichen umgeben sind; es reicht bereits ein kleiner dunkler „Ausgang“). Der Wert 0 (schwarz) im Ergebnisbild bedeutet, dass entweder gleich helle oder dunklere Grauwerte auf dem Weg zum Bildrand auftreten.

Für die Durchführung wird zunächst die Operation watershedswatershedsWatershedsWatershedsWatersheds benutzt, die eine Segmentation des Bildes in Basins und Watersheds durchführt. Wenn man sich das zu bearbeitende Bild als Grauwertgebirge vorstellt, bilden die Basins die Täler und Becken (mit niedrigeren Grauwerten) , die „Gebirgskämme“ sind die Watersheds. Zunächst werden die Watersheds jeweils benachbarten Regionen zugeteilt, so dass nur noch Basins vorhanden sind. Der Rand des Definitionsbereiches des Ausgangsbildes wird nun nach dem kleinsten Grauwert durchsucht und die Region(Basin) in der er liegt mit den Ergebniswerten belegt. Wenn der kleinste Grauwert am echten Bildrand liegt, können die Ergebniswerte sofort aus der Differenz zwischen Punkt-Grauwert und diesem berechnet werden. Liegt der gefundene kleinste Grauwert jedoch innerhalb des Bildes, muss der bereits existierende Ergebniswert aus der Nachbarregion besorgt werden um mit seiner Hilfe die neuen Ergebniswerte zu berechnen. Die Suche nach der Nachbarregion erfolgt mit 8-er Nachbarschaft. Nach Abzug der gefundenen Region vom Suchbereich erfolgt ein neuer Durchgang u.s.w. So wird Basin für Basin das Bild von außen nach innen „geschält“.

Wie auch bei watershedswatershedsWatershedsWatershedsWatersheds empfiehlt es sich, vor gray_insidegray_insideGrayInsideGrayInsideGrayInside eine Glättung (z.B. binomial_filterbinomial_filterBinomialFilterBinomialFilterBinomialFilter oder gauss_filtergauss_filterGaussFilterGaussFilterGaussFilter) des Bildes vorzunehmen, um die Entstehung zu vieler Einzelregionen im watersheds-Algorithmus (und dadurch sehr lange Laufzeiten) zu vermeiden.

Achtung

Beachten Sie, dass Filteroperatoren eventuell unerwartete Resultate ausgeben, wenn ein Bild mit einer reduzierten Domäne als Input übergeben wird. Weitere Informationen können im Kapitel Filter gefunden werden.

Ausführungsinformationen

Parameter

ImageImageImageImageimage (input_object)  (multichannel-)image(-array) objectHImageHImageHobject (byte)

Zu bearbeitendes Bild.

ImageDistImageDistImageDistImageDistimageDist (output_object)  (multichannel-)image(-array) objectHImageHImageHobject * (int2)

Ergebnisbild.

Beispiel (HDevelop)

read_image(Image,'fabrik')
gauss_filter (Image,GaussImage,11)
gray_inside(GaussImage,ImageOut)
dev_display(ImageOut)

Beispiel (C)

read_image(Image,"fabrik");
gauss_filter(Image,&GaussImage,11);
gray_inside(GaussImage,Result);

Beispiel (HDevelop)

read_image(Image,'fabrik')
gauss_filter (Image,GaussImage,11)
gray_inside(GaussImage,ImageOut)
dev_display(ImageOut)

Beispiel (HDevelop)

read_image(Image,'fabrik')
gauss_filter (Image,GaussImage,11)
gray_inside(GaussImage,ImageOut)
dev_display(ImageOut)

Beispiel (HDevelop)

read_image(Image,'fabrik')
gauss_filter (Image,GaussImage,11)
gray_inside(GaussImage,ImageOut)
dev_display(ImageOut)

Ergebnis

gray_insidegray_insideGrayInsideGrayInsideGrayInside liefert immer den Wert 2 (H_MSG_TRUE).

Vorgänger

binomial_filterbinomial_filterBinomialFilterBinomialFilterBinomialFilter, gauss_filtergauss_filterGaussFilterGaussFilterGaussFilter, smooth_imagesmooth_imageSmoothImageSmoothImageSmoothImage, mean_imagemean_imageMeanImageMeanImageMeanImage, median_imagemedian_imageMedianImageMedianImageMedianImage

Nachfolger

select_shapeselect_shapeSelectShapeSelectShapeSelectShape, area_centerarea_centerAreaCenterAreaCenterAreaCenter, count_objcount_objCountObjCountObjCountObj

Siehe auch

watershedswatershedsWatershedsWatershedsWatersheds

Modul

Foundation