rank_rectrank_rectRankRectRankRectrank_rect (Operator)

Name

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

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

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

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

def rank_rect(image: HObject, mask_width: int, mask_height: int, rank: int) -> HObject

Beschreibung

rank_rectrank_rectRankRectRankRectrank_rect führt eine Rangfilterung des Eingabebildes ImageImageImageimageimage mit einer rechteckigen Maske der Größe MaskWidthMaskWidthMaskWidthmaskWidthmask_width × MaskHeightMaskHeightMaskHeightmaskHeightmask_height durch und liefert das gefilterte Bild in ImageRankImageRankImageRankimageRankimage_rank zurück.

Konzeptuell sortiert der Rangfilter alle Grauwerte innerhalb der Maske aufsteigend und wählt dann den Grauwert mit dem Rang RankRankRankrankrank aus. Dabei entspricht der Rang 1 dem kleinsten Grauwert und der Rang MaskWidthMaskWidthMaskWidthmaskWidthmask_width * MaskHeightMaskHeightMaskHeightmaskHeightmask_height dem größten Grauwert innerhalb der Maske. Für RankRankRankrankrank = (MaskWidthMaskWidthMaskWidthmaskWidthmask_width * MaskHeightMaskHeightMaskHeightmaskHeightmask_height - 1) / 2 + 1 liefert rank_rectrank_rectRankRectRankRectrank_rect den Median zurück (siehe median_rectmedian_rectMedianRectMedianRectmedian_rect). Für RankRankRankrankrank = 1 entspricht rank_rectrank_rectRankRectRankRectrank_rect einer Grauwerterosion (siehe gray_erosion_rectgray_erosion_rectGrayErosionRectGrayErosionRectgray_erosion_rect, gray_erosion_shapegray_erosion_shapeGrayErosionShapeGrayErosionShapegray_erosion_shape und gray_erosiongray_erosionGrayErosionGrayErosiongray_erosion), für RankRankRankrankrank = MaskWidthMaskWidthMaskWidthmaskWidthmask_width * MaskHeightMaskHeightMaskHeightmaskHeightmask_height entspricht rank_rectrank_rectRankRectRankRectrank_rect einer Grauwertdilatation (siehe gray_dilation_rectgray_dilation_rectGrayDilationRectGrayDilationRectgray_dilation_rect, gray_dilation_shapegray_dilation_shapeGrayDilationShapeGrayDilationShapegray_dilation_shape und gray_dilationgray_dilationGrayDilationGrayDilationgray_dilation).

rank_rectrank_rectRankRectRankRectrank_rect 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_rectRankRectRankRectrank_rect unempfindlicher gegenüber Rauschen als die entsprechenden Operatoren der Grauwertmorphologie. Um eine robustere Version der Grauwertmorphologie zu erhalten, empfiehlt es sich daher, anstatt 1 bzw. MaskWidthMaskWidthMaskWidthmaskWidthmask_width * MaskHeightMaskHeightMaskHeightmaskHeightmask_height etwas höhere bzw. niedrigere Werte für RankRankRankrankrank zu wählen.

Das Konzept der Glättungsfilter ist in der Einleitung zum Kapitel Filter / Glättung beschrieben.

Achtung

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

rank_rectrank_rectRankRectRankRectrank_rect 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_rectRankRectRankRectrank_rect 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 MaskHeightMaskHeightMaskHeightmaskHeightmask_height die in rank_imagerank_imageRankImageRankImagerank_image verwendete Implementierung schneller als rank_rectrank_rectRankRectRankRectrank_rect. Typischerweise ist das für MaskHeightMaskHeightMaskHeightmaskHeightmask_height 15 der Fall, kann aber z.B. bei nicht vorhandenen SIMD-Befehlen und langsamem Speicher auch für größere Werte von MaskHeightMaskHeightMaskHeightmaskHeightmask_height zutreffen.

Weiterhin ist zu beachten, dass rank_rectrank_rectRankRectRankRectrank_rect 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_imageRankImageRankImagerank_image auch für größere Werte von MaskHeightMaskHeightMaskHeightmaskHeightmask_height schneller als rank_rectrank_rectRankRectRankRectrank_rect ist.

rank_rectrank_rectRankRectRankRectrank_rect sollte weder mit RankRankRankrankrank = 1 zur Berechnung einer Grauwerterosion noch mit RankRankRankrankrank = MaskWidthMaskWidthMaskWidthmaskWidthmask_width * MaskHeightMaskHeightMaskHeightmaskHeightmask_height zur Berechnung einer Grauwertdilatation verwendet werden. In diesen Fällen sind die Operatoren gray_erosion_rectgray_erosion_rectGrayErosionRectGrayErosionRectgray_erosion_rect oder gray_erosion_shapegray_erosion_shapeGrayErosionShapeGrayErosionShapegray_erosion_shape bzw. gray_dilation_rectgray_dilation_rectGrayDilationRectGrayDilationRectgray_dilation_rect oder gray_dilation_shapegray_dilation_shapeGrayDilationShapeGrayDilationShapegray_dilation_shape für fast alle Maskengrößen schneller als rank_rectrank_rectRankRectRankRectrank_rect.

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) objectHImageHObjectHObjectHobject (byte)

Zu filterndes Bild.

ImageRankImageRankImageRankimageRankimage_rank (output_object)  (multichannel-)image(-array) objectHImageHObjectHObjectHobject * (byte)

Gefiltertes Bild.

MaskWidthMaskWidthMaskWidthmaskWidthmask_width (input_control)  integer HTupleintHTupleHtuple (integer) (int / long) (Hlong) (Hlong)

Breite der Filtermaske.

Default: 15

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

Wertebereich: 3 ≤ MaskWidth MaskWidth MaskWidth maskWidth mask_width ≤ 4095

Minimale Schrittweite: 2

Empfohlene Schrittweite: 2

MaskHeightMaskHeightMaskHeightmaskHeightmask_height (input_control)  integer HTupleintHTupleHtuple (integer) (int / long) (Hlong) (Hlong)

Höhe der Filtermaske.

Default: 15

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

Wertebereich: 3 ≤ MaskHeight MaskHeight MaskHeight maskHeight mask_height ≤ 4095

Minimale Schrittweite: 2

Empfohlene Schrittweite: 2

RankRankRankrankrank (input_control)  integer HTupleintHTupleHtuple (integer) (int / long) (Hlong) (Hlong)

Rang des Ausgabegrauwerts.

Default: 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_rectRankRectRankRectrank_rect 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>)SetSystem("no_object_result",<Result>)set_system("no_object_result",<Result>) festlegen. Gegebenenfalls wird eine Fehlerbehandlung durchgeführt.

Vorgänger

read_imageread_imageReadImageReadImageread_image

Nachfolger

thresholdthresholdThresholdThresholdthreshold, dyn_thresholddyn_thresholdDynThresholdDynThresholddyn_threshold, regiongrowingregiongrowingRegiongrowingRegiongrowingregiongrowing

Alternativen

rank_imagerank_imageRankImageRankImagerank_image, median_rectmedian_rectMedianRectMedianRectmedian_rect, median_imagemedian_imageMedianImageMedianImagemedian_image

Siehe auch

gray_erosion_rectgray_erosion_rectGrayErosionRectGrayErosionRectgray_erosion_rect, gray_dilation_rectgray_dilation_rectGrayDilationRectGrayDilationRectgray_dilation_rect, gray_erosion_shapegray_erosion_shapeGrayErosionShapeGrayErosionShapegray_erosion_shape, gray_dilation_shapegray_dilation_shapeGrayDilationShapeGrayDilationShapegray_dilation_shape, gray_erosiongray_erosionGrayErosionGrayErosiongray_erosion, gray_dilationgray_dilationGrayDilationGrayDilationgray_dilation

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