median_imagemedian_imageMedianImageMedianImage (Operator)

Name

median_imagemedian_imageMedianImageMedianImage — Medianfilterung mit verschiedenen Masken.

Signatur

median_image(Image : ImageMedian : MaskType, Radius, Margin : )

Herror median_image(const Hobject Image, Hobject* ImageMedian, const char* MaskType, const Hlong Radius, const char* Margin)

Herror T_median_image(const Hobject Image, Hobject* ImageMedian, const Htuple MaskType, const Htuple Radius, const Htuple Margin)

void MedianImage(const HObject& Image, HObject* ImageMedian, const HTuple& MaskType, const HTuple& Radius, const HTuple& Margin)

HImage HImage::MedianImage(const HString& MaskType, Hlong Radius, const HTuple& Margin) const

HImage HImage::MedianImage(const HString& MaskType, Hlong Radius, const HString& Margin) const

HImage HImage::MedianImage(const char* MaskType, Hlong Radius, const char* Margin) const

HImage HImage::MedianImage(const wchar_t* MaskType, Hlong Radius, const wchar_t* Margin) const   (Nur Windows)

static void HOperatorSet.MedianImage(HObject image, out HObject imageMedian, HTuple maskType, HTuple radius, HTuple margin)

HImage HImage.MedianImage(string maskType, int radius, HTuple margin)

HImage HImage.MedianImage(string maskType, int radius, string margin)

Beschreibung

median_imagemedian_imageMedianImageMedianImageMedianImage führt eine Medianfilterung des Eingabebildes ImageImageImageImageimage mit einer quadratischen oder kreisförmigen Maske durch und liefert das gefilterte Bild in ImageMedianImageMedianImageMedianImageMedianimageMedian zurück. Die Form der Maske kann mit MaskTypeMaskTypeMaskTypeMaskTypemaskType gewählt werden. Der Radius der Maske wird mit RadiusRadiusRadiusRadiusradius bestimmt.

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) (N - 1) / 2 + 1 der sortierten Grauwerte, wobei N die Anzahl der Pixel der Filtermaske ist. Hierbei entspricht der Rang 1 dem kleinsten Grauwert und der Rang N dem größten Grauwert innerhalb der Maske (siehe auch rank_imagerank_imageRankImageRankImageRankImage).

Die Filtermaske wird über die Parameter RadiusRadiusRadiusRadiusradius und MaskTypeMaskTypeMaskTypeMaskTypemaskType festgelegt. Dabei bestimmt RadiusRadiusRadiusRadiusradius die Größe der Maske und MaskTypeMaskTypeMaskTypeMaskTypemaskType die Form mit folgenden Optionen:

median_imagemedian_imageMedianImageMedianImageMedianImage 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_thresholdDynThresholdDynThresholdDynThreshold) verwendet werden.

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

Wird eine quadratische Maske mit RadiusRadiusRadiusRadiusradius 1 oder 2 (und somit eine 3x3 oder 5x5 Pixel Filtermaske) mit der Randbehandlung 'mirrored'"mirrored""mirrored""mirrored""mirrored" verwendet, kann median_imagemedian_imageMedianImageMedianImageMedianImage auf OpenCL Geräten ausgeführt werden.

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

Achtung

median_imagemedian_imageMedianImageMedianImageMedianImage verwendet einen Algorithmus mit einer Laufzeit pro Pixel, die von der Maskenhöhe 2 * RadiusRadiusRadiusRadiusradius + 1 abhängt. Daher ist median_imagemedian_imageMedianImageMedianImageMedianImage für quadratische Masken mit einer großen Maskenhöhe langsamer als median_rectmedian_rectMedianRectMedianRectMedianRect. Die genaue Maskenhöhe, ab der median_rectmedian_rectMedianRectMedianRectMedianRect 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 median_rectmedian_rectMedianRectMedianRectMedianRect 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_imageMedianImageMedianImageMedianImage auch für größere Maskenhöhen schneller als median_rectmedian_rectMedianRectMedianRectMedianRect ist.

Aus Laufzeitgründen wird das Eingabebild ImageImageImageImageimage nicht auf NaNs überprüft. Die Verwendung eines Eingabebildes mit NaNs führt zum Absturz von HALCON.

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) objectHImageHImageHobject (byte* / int2* / uint2* / int4* / real*) *erlaubt für Compute Devices

Zu filterndes Bild.

ImageMedianImageMedianImageMedianImageMedianimageMedian (output_object)  (multichannel-)image(-array) objectHImageHImageHobject * (byte / int2 / uint2 / int4 / real)

Gefiltertes Bild.

MaskTypeMaskTypeMaskTypeMaskTypemaskType (input_control)  string HTupleHTupleHtuple (string) (string) (HString) (char*)

Art der Filtermaske.

Defaultwert: 'circle' "circle" "circle" "circle" "circle"

Werteliste: 'circle'"circle""circle""circle""circle", 'square'"square""square""square""square"

Werteliste (für Compute Devices): 'square'"square""square""square""square"

RadiusRadiusRadiusRadiusradius (input_control)  integer HTupleHTupleHtuple (integer) (int / long) (Hlong) (Hlong)

Radius der Filtermaske.

Defaultwert: 1

Werteliste (für Compute Devices): 1, 2

Wertevorschläge: 1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 15, 19, 25, 31, 39, 47, 59

Typischer Wertebereich: 1 ≤ Radius Radius Radius Radius radius ≤ 4095

Minimale Schrittweite: 1

Empfohlene Schrittweite: 2

MarginMarginMarginMarginmargin (input_control)  string HTupleHTupleHtuple (string / integer / real) (string / int / long / double) (HString / Hlong / double) (char* / Hlong / double)

Randbehandlung.

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

Werteliste (für Compute Devices): 'mirrored'"mirrored""mirrored""mirrored""mirrored"

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

Beispiel (HDevelop)

read_image (Image, 'fabrik')
median_image (Image, Median, 'circle', 3, 'continued')
dev_display(Median)

Komplexität

Pro Bildpunkt: O(2 * RadiusRadiusRadiusRadiusradius + 1).

Ergebnis

Sind die Parameterwerte korrekt, dann liefert median_imagemedian_imageMedianImageMedianImageMedianImage 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>)SetSystem("no_object_result",<Result>) festlegen. Gegebenenfalls wird eine Fehlerbehandlung durchgeführt.

Vorgänger

read_imageread_imageReadImageReadImageReadImage

Nachfolger

thresholdthresholdThresholdThresholdThreshold, dyn_thresholddyn_thresholdDynThresholdDynThresholdDynThreshold, regiongrowingregiongrowingRegiongrowingRegiongrowingRegiongrowing

Alternativen

median_rectmedian_rectMedianRectMedianRectMedianRect, rank_imagerank_imageRankImageRankImageRankImage, rank_rectrank_rectRankRectRankRectRankRect

Siehe auch

gray_erosion_rectgray_erosion_rectGrayErosionRectGrayErosionRectGrayErosionRect, gray_dilation_rectgray_dilation_rectGrayDilationRectGrayDilationRectGrayDilationRect, gray_erosion_shapegray_erosion_shapeGrayErosionShapeGrayErosionShapeGrayErosionShape, gray_dilation_shapegray_dilation_shapeGrayDilationShapeGrayDilationShapeGrayDilationShape, gray_erosiongray_erosionGrayErosionGrayErosionGrayErosion, gray_dilationgray_dilationGrayDilationGrayDilationGrayDilation

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