KlassenKlassenKlassenKlassen | | | | Operatoren

rank_imagerank_imageRankImagerank_imageRankImageRankImage (Operator)

Name

rank_imagerank_imageRankImagerank_imageRankImageRankImage — Rangfilterung mit beliebigen Masken.

Signatur

rank_image(Image, Mask : ImageRank : Rank, Margin : )

Herror rank_image(const Hobject Image, const Hobject Mask, Hobject* ImageRank, const Hlong Rank, const char* Margin)

Herror T_rank_image(const Hobject Image, const Hobject Mask, Hobject* ImageRank, const Htuple Rank, const Htuple Margin)

Herror rank_image(Hobject Image, Hobject Mask, Hobject* ImageRank, const HTuple& Rank, const HTuple& Margin)

HImage HImage::RankImage(const HRegion& Mask, const HTuple& Rank, const HTuple& Margin) const

HImageArray HImageArray::RankImage(const HRegion& Mask, const HTuple& Rank, const HTuple& Margin) const

void RankImage(const HObject& Image, const HObject& Mask, HObject* ImageRank, const HTuple& Rank, const HTuple& Margin)

HImage HImage::RankImage(const HRegion& Mask, Hlong Rank, const HTuple& Margin) const

HImage HImage::RankImage(const HRegion& Mask, Hlong Rank, const HString& Margin) const

HImage HImage::RankImage(const HRegion& Mask, Hlong Rank, const char* Margin) const

void HOperatorSetX.RankImage(
[in] IHUntypedObjectX* Image, [in] IHUntypedObjectX* Mask, [out] IHUntypedObjectX*ImageRank, [in] VARIANT Rank, [in] VARIANT Margin)

IHImageX* HImageX.RankImage(
[in] IHRegionX* Mask, [in] Hlong Rank, [in] VARIANT Margin)

static void HOperatorSet.RankImage(HObject image, HObject mask, out HObject imageRank, HTuple rank, HTuple margin)

HImage HImage.RankImage(HRegion mask, int rank, HTuple margin)

HImage HImage.RankImage(HRegion mask, int rank, string margin)

Beschreibung

rank_imagerank_imageRankImagerank_imageRankImageRankImage führt eine Rangfilterung des Eingabebildes ImageImageImageImageImageimage mit einer Maske, die durch die Region MaskMaskMaskMaskMaskmask beschrieben wird, durch und liefert das gefilterte Bild in ImageRankImageRankImageRankImageRankImageRankimageRank zurück. Die Form der Maske kann beliebig gewählt werden und z.B. mit Operatoren wie gen_circlegen_circleGenCirclegen_circleGenCircleGenCircle oder draw_regiondraw_regionDrawRegiondraw_regionDrawRegionDrawRegion erzeugt werden. Die Position der Maske spielt dabei keine Rolle, da der Schwerpunkt der Maskenregion als Referenzpunkt der Maske verwendet wird.

Konzeptuell sortiert der Rangfilter alle Grauwerte innerhalb der Maske aufsteigend und wählt dann den Grauwert mit dem Rang RankRankRankRankRankrank aus. Dabei entspricht der Rang 1 dem kleinsten Grauwert und der Rang A dem größten Grauwert innerhalb der Maske. Hierbei ist A die Fläche von MaskMaskMaskMaskMaskmask (siehe area_centerarea_centerAreaCenterarea_centerAreaCenterAreaCenter). Für RankRankRankRankRankrank = (A - 1) / 2 + 1 liefert rank_imagerank_imageRankImagerank_imageRankImageRankImage den Median zurück (siehe median_imagemedian_imageMedianImagemedian_imageMedianImageMedianImage). Für RankRankRankRankRankrank = 1 entspricht rank_imagerank_imageRankImagerank_imageRankImageRankImage einer Grauwerterosion (siehe gray_erosion_rectgray_erosion_rectGrayErosionRectgray_erosion_rectGrayErosionRectGrayErosionRect, gray_erosion_shapegray_erosion_shapeGrayErosionShapegray_erosion_shapeGrayErosionShapeGrayErosionShape und gray_erosiongray_erosionGrayErosiongray_erosionGrayErosionGrayErosion), für RankRankRankRankRankrank = A entspricht rank_rectrank_rectRankRectrank_rectRankRectRankRect einer Grauwertdilatation (siehe gray_dilation_rectgray_dilation_rectGrayDilationRectgray_dilation_rectGrayDilationRectGrayDilationRect, gray_dilation_shapegray_dilation_shapeGrayDilationShapegray_dilation_shapeGrayDilationShapeGrayDilationShape und gray_dilationgray_dilationGrayDilationgray_dilationGrayDilationGrayDilation).

rank_imagerank_imageRankImagerank_imageRankImageRankImage kann unter anderem zur Rauschunterdrückung oder zum Unterdrücken unerwünschter Objekte, die kleiner als die Maske sind, verwendet werden. Außerdem ist rank_imagerank_imageRankImagerank_imageRankImageRankImage unempfindlicher gegenüber Rauschen als die entsprechenden Operatoren der Grauwertmorpholgie. Um eine robustere Version der Grauwertmorphologie zu erhalten, empfiehlt es sich daher, anstatt 1 bzw. A etwas höhere bzw. niedrigere Werte für RankRankRankRankRankrank zu wählen.

Bei der Filterung kann über MarginMarginMarginMarginMarginmargin zwischen verschiedenen Randbehandlungen gewählt werden:

    Grauwert     Bildpunkte außerhalb der Bildränder werden als
                 konstant (mit dem angegebenen Grauwert) angenommen.
    'continued'  Fortsetzung der Randpunkte.
    'cyclic'     zyklische Fortsetzung der Bildränder.
    'mirrored'   Spiegelung der Bildpunkte an den Bildrändern.

Achtung

rank_imagerank_imageRankImagerank_imageRankImageRankImage verwendet einen Algorithmus mit einer Laufzeit pro Pixel, die von der Anzahl der Sehnen der Maske MaskMaskMaskMaskMaskmask abhängt. Daher ist rank_imagerank_imageRankImagerank_imageRankImageRankImage für rechteckige Masken mit einer großen Maskenhöhe langsamer als rank_rectrank_rectRankRectrank_rectRankRectRankRect. Die genaue Maskenhöhe, ab der rank_rectrank_rectRankRectrank_rectRankRectRankRect schneller ist, ist abhängig von der Rechnerarchitektur (Prozessortyp, Verfügbarkeit von SIMD-Befehlen wie SSE2 oder MMX, Cachegröße und -durchsatz, Speicherdurchsatz). Typischerweise ist das für eine Maskenhöhe > 15 der Fall, kann aber z.B. bei nicht vorhandenen SIMD-Befehlen und langsamem Speicher auch erst für größere Maskenhöhen zutreffen.

Weiterhin ist zu beachten, dass rank_rectrank_rectRankRectrank_rectRankRectRankRect aufgrund der rekursiven Implementierung die Filterantwort intern auf dem kleinsten umschließenden Rechteck der Region des Bildes berechnet. Falls die Region nur einen sehr kleinen Teil des umschließenden Rechtecks abdeckt, kann es daher vorkommen, dass rank_imagerank_imageRankImagerank_imageRankImageRankImage auch für größere Maskenhöhen schneller als rank_rectrank_rectRankRectrank_rectRankRectRankRect ist.

rank_imagerank_imageRankImagerank_imageRankImageRankImage sollte weder mit RankRankRankRankRankrank = 1 zur Berechnung einer Grauwerterosion noch mit RankRankRankRankRankrank = A zur Berechnung einer Grauwertdilatation verwendet werden. In diesen Fällen sind die Operatoren gray_erosion_rectgray_erosion_rectGrayErosionRectgray_erosion_rectGrayErosionRectGrayErosionRect, gray_erosion_shapegray_erosion_shapeGrayErosionShapegray_erosion_shapeGrayErosionShapeGrayErosionShape oder gray_erosiongray_erosionGrayErosiongray_erosionGrayErosionGrayErosion bzw. gray_dilation_rectgray_dilation_rectGrayDilationRectgray_dilation_rectGrayDilationRectGrayDilationRect, gray_dilation_shapegray_dilation_shapeGrayDilationShapegray_dilation_shapeGrayDilationShapeGrayDilationShape oder gray_dilationgray_dilationGrayDilationgray_dilationGrayDilationGrayDilation typischerweise schneller als rank_imagerank_imageRankImagerank_imageRankImageRankImage.

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 / int2 / uint2 / int4 / real)

Zu filterndes Bild.

MaskMaskMaskMaskMaskmask (input_object)  region objectHRegionHRegionHRegionHRegionXHobject

Filtermaske.

ImageRankImageRankImageRankImageRankImageRankimageRank (output_object)  multichannel-image(-array) objectHImageHImageHImageHImageXHobject * (byte / int2 / uint2 / int4 / real)

Gefiltertes Bild.

RankRankRankRankRankrank (input_control)  integer HTupleHTupleHTupleVARIANTHtuple (integer) (int / long) (Hlong) (Hlong) (Hlong) (Hlong)

Rang des Ausgabegrauwerts.

Defaultwert: 5

Wertevorschläge: 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 31, 49, 51, 61, 71, 81, 91, 101

Typischer Wertebereich: 1 ≤ Rank Rank Rank Rank Rank rank ≤ 4095

Minimale Schrittweite: 1

Empfohlene Schrittweite: 2

MarginMarginMarginMarginMarginmargin (input_control)  string HTupleHTupleHTupleVARIANTHtuple (string / integer / real) (string / int / long / double) (HString / Hlong / double) (char* / Hlong / double) (BSTR / Hlong / double) (char* / Hlong / double)

Randbehandlung.

Defaultwert: 'mirrored' "mirrored" "mirrored" "mirrored" "mirrored" "mirrored"

Wertevorschläge: 'mirrored'"mirrored""mirrored""mirrored""mirrored""mirrored", 'cyclic'"cyclic""cyclic""cyclic""cyclic""cyclic", 'continued'"continued""continued""continued""continued""continued", 0, 30, 60, 90, 120, 150, 180, 210, 240, 255

Beispiel (HDevelop)

read_image (Image, 'fabrik')
draw_region (Region, WindowHandle)
rank_image (Image, Region, ImageRank, 5, 'mirrored')
dev_display(ImageRank)

Komplexität

Pro Bildpunkt: O(N), wobei N die Anzahl der Sehnen von MaskMaskMaskMaskMaskmask ist (siehe runlength_featuresrunlength_featuresRunlengthFeaturesrunlength_featuresRunlengthFeaturesRunlengthFeatures).

Ergebnis

Sind die Parameterwerte korrekt, dann liefert rank_imagerank_imageRankImagerank_imageRankImageRankImage den Wert 2 (H_MSG_TRUE). Das Verhalten bei leerer Eingabe (keine Eingabebilder vorhanden) lässt sich mittels set_system('no_object_result',<Result>)set_system("no_object_result",<Result>)SetSystem("no_object_result",<Result>)set_system("no_object_result",<Result>)SetSystem("no_object_result",<Result>)SetSystem("no_object_result",<Result>) festlegen. Gegebenenfalls wird eine Fehlerbehandlung durchgeführt.

Vorgänger

read_imageread_imageReadImageread_imageReadImageReadImage, draw_regiondraw_regionDrawRegiondraw_regionDrawRegionDrawRegion, gen_circlegen_circleGenCirclegen_circleGenCircleGenCircle, gen_rectangle1gen_rectangle1GenRectangle1gen_rectangle1GenRectangle1GenRectangle1, gen_rectangle2gen_rectangle2GenRectangle2gen_rectangle2GenRectangle2GenRectangle2

Nachfolger

thresholdthresholdThresholdthresholdThresholdThreshold, dyn_thresholddyn_thresholdDynThresholddyn_thresholdDynThresholdDynThreshold, regiongrowingregiongrowingRegiongrowingregiongrowingRegiongrowingRegiongrowing

Alternativen

rank_rectrank_rectRankRectrank_rectRankRectRankRect, median_imagemedian_imageMedianImagemedian_imageMedianImageMedianImage, median_rectmedian_rectMedianRectmedian_rectMedianRectMedianRect

Siehe auch

gray_erosion_rectgray_erosion_rectGrayErosionRectgray_erosion_rectGrayErosionRectGrayErosionRect, gray_dilation_rectgray_dilation_rectGrayDilationRectgray_dilation_rectGrayDilationRectGrayDilationRect, gray_erosion_shapegray_erosion_shapeGrayErosionShapegray_erosion_shapeGrayErosionShapeGrayErosionShape, gray_dilation_shapegray_dilation_shapeGrayDilationShapegray_dilation_shapeGrayDilationShapeGrayDilationShape, gray_erosiongray_erosionGrayErosiongray_erosionGrayErosionGrayErosion, gray_dilationgray_dilationGrayDilationgray_dilationGrayDilationGrayDilation

Literatur

T.S. Huang, G.J. Yang, G.Y. Tang; „A Fast Two-Dimensional Median Filtering Algorithm“; IEEE Transactions on Acoustics, Speech, and Signal Processing, vol. 27, no. 1, pp. 13-18, 1979.
R. Haralick, L. Shapiro; „Computer and Robot Vision“; Addison-Wesley, 1992, pp. 318-320.

Modul

Foundation


KlassenKlassenKlassenKlassen | | | | Operatoren