KlassenKlassenKlassenKlassen | | | | Operatoren

gray_insidegray_insideGrayInsidegray_insideGrayInsideGrayInside (Operator)

Name

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

Herror gray_inside(Hobject Image, Hobject* ImageDist)

HImage HImage::GrayInside() const

HImageArray HImageArray::GrayInside() const

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

HImage HImage::GrayInside() const

void HOperatorSetX.GrayInside(
[in] IHUntypedObjectX* Image, [out] IHUntypedObjectX*ImageDist)

IHImageX* HImageX.GrayInside()

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

HImage HImage.GrayInside()

Beschreibung

gray_insidegray_insideGrayInsidegray_insideGrayInsideGrayInside „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 watershedswatershedsWatershedswatershedsWatershedsWatersheds 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 watershedswatershedsWatershedswatershedsWatershedsWatersheds empfiehlt es sich, vor gray_insidegray_insideGrayInsidegray_insideGrayInsideGrayInside eine Glättung (z.B. binomial_filterbinomial_filterBinomialFilterbinomial_filterBinomialFilterBinomialFilter oder gauss_filtergauss_filterGaussFiltergauss_filterGaussFilterGaussFilter) 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.

Parallelisierung

Parameter

ImageImageImageImageImageimage (input_object)  (multichannel-)image(-array) objectHImageHImageHImageHImageXHobject (byte)

Zu bearbeitendes Bild.

ImageDistImageDistImageDistImageDistImageDistimageDist (output_object)  (multichannel-)image(-array) objectHImageHImageHImageHImageXHobject * (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);
open_window (0,0,512,512,0,"visible","",&WindowHandle);
gray_inside(GaussImage,Result);
disp_image(Result,WindowHandle);

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)

Beispiel (HDevelop)

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

Ergebnis

gray_insidegray_insideGrayInsidegray_insideGrayInsideGrayInside liefert immer den Wert 2 (H_MSG_TRUE).

Vorgänger

binomial_filterbinomial_filterBinomialFilterbinomial_filterBinomialFilterBinomialFilter, gauss_filtergauss_filterGaussFiltergauss_filterGaussFilterGaussFilter, smooth_imagesmooth_imageSmoothImagesmooth_imageSmoothImageSmoothImage, mean_imagemean_imageMeanImagemean_imageMeanImageMeanImage, median_imagemedian_imageMedianImagemedian_imageMedianImageMedianImage

Nachfolger

select_shapeselect_shapeSelectShapeselect_shapeSelectShapeSelectShape, area_centerarea_centerAreaCenterarea_centerAreaCenterAreaCenter, count_objcount_objCountObjcount_objCountObjCountObj

Siehe auch

watershedswatershedsWatershedswatershedsWatershedsWatersheds

Modul

Foundation


KlassenKlassenKlassenKlassen | | | | Operatoren