KlassenKlassenKlassenKlassen | | | | Operatoren

rank_rectrank_rectRankRectrank_rectRankRectRankRect (Operator)

Name

rank_rectrank_rectRankRectrank_rectRankRectRankRect — Rangfilterung mit rechteckigen Rangmasken.

Signatur

rank_rect(Image : ImageRank : MaskWidth, MaskHeight, Rank : )

Herror rank_rect(const Hobject Image, Hobject* ImageRank, const Hlong MaskWidth, const Hlong MaskHeight, const Hlong Rank)

Herror T_rank_rect(const Hobject Image, Hobject* ImageRank, const Htuple MaskWidth, const Htuple MaskHeight, const Htuple Rank)

Herror rank_rect(Hobject Image, Hobject* ImageRank, const HTuple& MaskWidth, const HTuple& MaskHeight, const HTuple& Rank)

HImage HImage::RankRect(const HTuple& MaskWidth, const HTuple& MaskHeight, const HTuple& Rank) const

HImageArray HImageArray::RankRect(const HTuple& MaskWidth, const HTuple& MaskHeight, const HTuple& Rank) const

void RankRect(const HObject& Image, HObject* ImageRank, const HTuple& MaskWidth, const HTuple& MaskHeight, const HTuple& Rank)

HImage HImage::RankRect(Hlong MaskWidth, Hlong MaskHeight, Hlong Rank) const

void HOperatorSetX.RankRect(
[in] IHUntypedObjectX* Image, [out] IHUntypedObjectX*ImageRank, [in] VARIANT MaskWidth, [in] VARIANT MaskHeight, [in] VARIANT Rank)

IHImageX* HImageX.RankRect(
[in] Hlong MaskWidth, [in] Hlong MaskHeight, [in] Hlong Rank)

static void HOperatorSet.RankRect(HObject image, out HObject imageRank, HTuple maskWidth, HTuple maskHeight, HTuple rank)

HImage HImage.RankRect(int maskWidth, int maskHeight, int rank)

Beschreibung

rank_rectrank_rectRankRectrank_rectRankRectRankRect führt eine Rangfilterung des Eingabebildes ImageImageImageImageImageimage mit einer rechteckigen Maske der Größe MaskWidthMaskWidthMaskWidthMaskWidthMaskWidthmaskWidth × MaskHeightMaskHeightMaskHeightMaskHeightMaskHeightmaskHeight durch und liefert das gefilterte Bild in ImageRankImageRankImageRankImageRankImageRankimageRank zurück.

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 MaskWidthMaskWidthMaskWidthMaskWidthMaskWidthmaskWidth * MaskHeightMaskHeightMaskHeightMaskHeightMaskHeightmaskHeight dem größten Grauwert innerhalb der Maske. Für RankRankRankRankRankrank = (MaskWidthMaskWidthMaskWidthMaskWidthMaskWidthmaskWidth * MaskHeightMaskHeightMaskHeightMaskHeightMaskHeightmaskHeight - 1) / 2 + 1 liefert rank_rectrank_rectRankRectrank_rectRankRectRankRect den Median zurück (siehe median_rectmedian_rectMedianRectmedian_rectMedianRectMedianRect). Für RankRankRankRankRankrank = 1 entspricht rank_rectrank_rectRankRectrank_rectRankRectRankRect 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 = MaskWidthMaskWidthMaskWidthMaskWidthMaskWidthmaskWidth * MaskHeightMaskHeightMaskHeightMaskHeightMaskHeightmaskHeight 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_rectrank_rectRankRectrank_rectRankRectRankRect 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_rectrank_rectRankRectrank_rectRankRectRankRect 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. MaskWidthMaskWidthMaskWidthMaskWidthMaskWidthmaskWidth * MaskHeightMaskHeightMaskHeightMaskHeightMaskHeightmaskHeight etwas höhere bzw. niedrigere Werte für RankRankRankRankRankrank zu wählen.

Achtung

Werden für MaskHeightMaskHeightMaskHeightMaskHeightMaskHeightmaskHeight oder MaskWidthMaskWidthMaskWidthMaskWidthMaskWidthmaskWidth gerade statt ungerade Werte übergeben, verwendet rank_rectrank_rectRankRectrank_rectRankRectRankRect an ihrer Stelle die nächstgrößeren ungeraden Werte.

rank_rectrank_rectRankRectrank_rectRankRectRankRect verwendet einen Algorithmus mit konstanter Laufzeit pro Pixel, so dass die Laufzeit des Operators nur von der Eingabebildgröße und nicht von der Maskengröße abhängt. Daher ist rank_rectrank_rectRankRectrank_rectRankRectRankRect für große Masken die schnellste Implementierung des Rangfilters in HALCON. Abhängig von der Rechnerarchitektur (Prozessortyp, Verfügbarkeit von SIMD-Befehlen wie SSE2 oder MMX, Cachegröße und -durchsatz, Speicherdurchsatz) ist für kleine Werte von MaskHeightMaskHeightMaskHeightMaskHeightMaskHeightmaskHeight die in rank_imagerank_imageRankImagerank_imageRankImageRankImage verwendete Implementierung schneller als rank_rectrank_rectRankRectrank_rectRankRectRankRect. Typischerweise ist das für MaskHeightMaskHeightMaskHeightMaskHeightMaskHeightmaskHeight 15 der Fall, kann aber z.B. bei nicht vorhandenen SIMD-Befehlen und langsamem Speicher auch für größere Werte von MaskHeightMaskHeightMaskHeightMaskHeightMaskHeightmaskHeight 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 Werte von MaskHeightMaskHeightMaskHeightMaskHeightMaskHeightmaskHeight schneller als rank_rectrank_rectRankRectrank_rectRankRectRankRect ist.

rank_rectrank_rectRankRectrank_rectRankRectRankRect sollte weder mit RankRankRankRankRankrank = 1 zur Berechnung einer Grauwerterosion noch mit RankRankRankRankRankrank = MaskWidthMaskWidthMaskWidthMaskWidthMaskWidthmaskWidth * MaskHeightMaskHeightMaskHeightMaskHeightMaskHeightmaskHeight zur Berechnung einer Grauwertdilatation verwendet werden. In diesen Fällen sind die Operatoren gray_erosion_rectgray_erosion_rectGrayErosionRectgray_erosion_rectGrayErosionRectGrayErosionRect oder gray_erosion_shapegray_erosion_shapeGrayErosionShapegray_erosion_shapeGrayErosionShapeGrayErosionShape bzw. gray_dilation_rectgray_dilation_rectGrayDilationRectgray_dilation_rectGrayDilationRectGrayDilationRect oder gray_dilation_shapegray_dilation_shapeGrayDilationShapegray_dilation_shapeGrayDilationShapeGrayDilationShape für fast alle Maskengrößen schneller als rank_rectrank_rectRankRectrank_rectRankRectRankRect.

Parallelisierung

Parameter

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

Zu filterndes Bild.

ImageRankImageRankImageRankImageRankImageRankimageRank (output_object)  (multichannel-)image(-array) objectHImageHImageHImageHImageXHobject * (byte)

Gefiltertes Bild.

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

Breite der Filtermaske.

Defaultwert: 15

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

Typischer Wertebereich: 3 ≤ MaskWidth MaskWidth MaskWidth MaskWidth MaskWidth maskWidth ≤ 4095

Minimale Schrittweite: 2

Empfohlene Schrittweite: 2

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

Höhe der Filtermaske.

Defaultwert: 15

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

Typischer Wertebereich: 3 ≤ MaskHeight MaskHeight MaskHeight MaskHeight MaskHeight maskHeight ≤ 4095

Minimale Schrittweite: 2

Empfohlene Schrittweite: 2

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

Minimale Schrittweite: 1

Empfohlene Schrittweite: 2

Restriktion: 1 <= Rank && Rank <= MaskWidth * MaskHeight

Komplexität

Pro Bildpunkt: O(1).

Ergebnis

Sind die Parameterwerte korrekt, dann liefert rank_rectrank_rectRankRectrank_rectRankRectRankRect 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

Nachfolger

thresholdthresholdThresholdthresholdThresholdThreshold, dyn_thresholddyn_thresholdDynThresholddyn_thresholdDynThresholdDynThreshold, regiongrowingregiongrowingRegiongrowingregiongrowingRegiongrowingRegiongrowing

Alternativen

rank_imagerank_imageRankImagerank_imageRankImageRankImage, median_rectmedian_rectMedianRectmedian_rectMedianRectMedianRect, median_imagemedian_imageMedianImagemedian_imageMedianImageMedianImage

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

S. Perreault, P. Hébert; „Median Filtering in Constant Time“; IEEE Transactions on Image Processing, vol. 16, no. 9, pp. 2389-2394, 2007.
D. Cline, K.B. White, P.K. Egbert; „Fast 8-Bit Median Filtering Based On Separability“; International Conference on Image Processing, vol. V, pp. 281-284, 2007.

Modul

Foundation


KlassenKlassenKlassenKlassen | | | | Operatoren