KlassenKlassenKlassenKlassen | | | | Operatoren

median_rectmedian_rectMedianRectmedian_rectMedianRectMedianRect (Operator)

Name

median_rectmedian_rectMedianRectmedian_rectMedianRectMedianRect — Medianfilterung mit rechteckigen Masken.

Signatur

median_rect(Image : ImageMedian : MaskWidth, MaskHeight : )

Herror median_rect(const Hobject Image, Hobject* ImageMedian, const Hlong MaskWidth, const Hlong MaskHeight)

Herror T_median_rect(const Hobject Image, Hobject* ImageMedian, const Htuple MaskWidth, const Htuple MaskHeight)

Herror median_rect(Hobject Image, Hobject* ImageMedian, const HTuple& MaskWidth, const HTuple& MaskHeight)

HImage HImage::MedianRect(const HTuple& MaskWidth, const HTuple& MaskHeight) const

HImageArray HImageArray::MedianRect(const HTuple& MaskWidth, const HTuple& MaskHeight) const

void MedianRect(const HObject& Image, HObject* ImageMedian, const HTuple& MaskWidth, const HTuple& MaskHeight)

HImage HImage::MedianRect(Hlong MaskWidth, Hlong MaskHeight) const

void HOperatorSetX.MedianRect(
[in] IHUntypedObjectX* Image, [out] IHUntypedObjectX*ImageMedian, [in] VARIANT MaskWidth, [in] VARIANT MaskHeight)

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

static void HOperatorSet.MedianRect(HObject image, out HObject imageMedian, HTuple maskWidth, HTuple maskHeight)

HImage HImage.MedianRect(int maskWidth, int maskHeight)

Beschreibung

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

Konzeptuell sortiert der Medianfilter alle Grauwerte innerhalb der Maske aufsteigend und wählt dann den Median der Grauwerte aus. Der Median ist der „mittlere“ der sortierten Grauwerte, d.h. der Grauwert mit dem Rang (Position) (MaskWidthMaskWidthMaskWidthMaskWidthMaskWidthmaskWidth * MaskHeightMaskHeightMaskHeightMaskHeightMaskHeightmaskHeight - 1) / 2 + 1 der sortierten Grauwerte, wobei der Rang 1 dem kleinsten Grauwert und der Rang MaskWidthMaskWidthMaskWidthMaskWidthMaskWidthmaskWidth * MaskHeightMaskHeightMaskHeightMaskHeightMaskHeightmaskHeight dem größten Grauwert innerhalb der Maske entspricht (siehe auch rank_rectrank_rectRankRectrank_rectRankRectRankRect).

median_rectmedian_rectMedianRectmedian_rectMedianRectMedianRect kann unter anderem zur Glättung von Bildern, zum Unterdrücken unterwünschter Objekte (z.B. Punkte und Linienstrukturen), die kleiner als die Maske sind, und somit zur Schätzung der Hintergrundbeleuchtung für eine Shading-Korrektur oder als Vorverarbeitung für die dynamische Schwellwertoperation (siehe dyn_thresholddyn_thresholdDynThresholddyn_thresholdDynThresholdDynThreshold) verwendet werden.

median_rectmedian_rectMedianRectmedian_rectMedianRectMedianRect kann bei Verwendung einer quadratischen 3x3 oder 5x5 Filtermaske auf OpenCL Geräten ausgeführt werden.

Achtung

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

median_rectmedian_rectMedianRectmedian_rectMedianRectMedianRect 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 median_rectmedian_rectMedianRectmedian_rectMedianRectMedianRect für große Masken die schnellste Implementierung des Medianfilters 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 median_imagemedian_imageMedianImagemedian_imageMedianImageMedianImage und rank_imagerank_imageRankImagerank_imageRankImageRankImage verwendete Implementierung schneller als median_rectmedian_rectMedianRectmedian_rectMedianRectMedianRect. 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 median_rectmedian_rectMedianRectmedian_rectMedianRectMedianRect 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 median_imagemedian_imageMedianImagemedian_imageMedianImageMedianImage und rank_imagerank_imageRankImagerank_imageRankImageRankImage auch für größere Werte von MaskHeightMaskHeightMaskHeightMaskHeightMaskHeightmaskHeight schneller als median_rectmedian_rectMedianRectmedian_rectMedianRectMedianRect sind.

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*) *erlaubt für Compute Devices

Zu filterndes Bild.

ImageMedianImageMedianImageMedianImageMedianImageMedianimageMedian (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

Werteliste (für Compute Devices): 3, 5

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

Werteliste (für Compute Devices): 3, 5

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

Komplexität

Pro Bildpunkt: O(1).

Ergebnis

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

median_imagemedian_imageMedianImagemedian_imageMedianImageMedianImage, rank_rectrank_rectRankRectrank_rectRankRectRankRect, rank_imagerank_imageRankImagerank_imageRankImageRankImage

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