KlassenKlassenKlassenKlassen | | | | Operatoren

median_imagemedian_imageMedianImagemedian_imageMedianImageMedianImage (Operator)

Name

median_imagemedian_imageMedianImagemedian_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)

Herror median_image(Hobject Image, Hobject* ImageMedian, const HTuple& MaskType, const HTuple& Radius, const HTuple& Margin)

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

HImageArray HImageArray::MedianImage(const HTuple& MaskType, const HTuple& Radius, const HTuple& Margin) const

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

void HOperatorSetX.MedianImage(
[in] IHUntypedObjectX* Image, [out] IHUntypedObjectX*ImageMedian, [in] VARIANT MaskType, [in] VARIANT Radius, [in] VARIANT Margin)

IHImageX* HImageX.MedianImage(
[in] BSTR MaskType, [in] Hlong Radius, [in] VARIANT Margin)

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_imageMedianImagemedian_imageMedianImageMedianImage führt eine Medianfilterung des Eingabebildes ImageImageImageImageImageimage mit einer quadratischen oder kreisförmigen Maske durch und liefert das gefilterte Bild in ImageMedianImageMedianImageMedianImageMedianImageMedianimageMedian zurück. Die Form der Maske kann mit MaskTypeMaskTypeMaskTypeMaskTypeMaskTypemaskType gewählt werden. Der Radius der Maske wird mit RadiusRadiusRadiusRadiusRadiusradius 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) (A - 1) / 2 + 1 der sortierten Grauwerte, wobei A die Fläche der durch MaskTypeMaskTypeMaskTypeMaskTypeMaskTypemaskType und RadiusRadiusRadiusRadiusRadiusradius selektierten Filtermaske ist. Hierbei entspricht der Rang 1 dem kleinsten Grauwert und der Rang A dem größten Grauwert innerhalb der Maske (siehe auch rank_imagerank_imageRankImagerank_imageRankImageRankImage).

median_imagemedian_imageMedianImagemedian_imageMedianImageMedianImage 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.

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.

median_imagemedian_imageMedianImagemedian_imageMedianImageMedianImage kann bei Verwendung einer quadratischen 3x3 oder 5x5 Filtermaske und der Randbehandlung 'mirrored'"mirrored""mirrored""mirrored""mirrored""mirrored" auf OpenCL Geräten ausgeführt werden.

Achtung

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

Parallelisierung

Parameter

ImageImageImageImageImageimage (input_object)  (multichannel-)image(-array) objectHImageHImageHImageHImageXHobject (byte* / int2* / uint2* / int4* / real*) *erlaubt für Compute Devices

Zu filterndes Bild.

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

Gefiltertes Bild.

MaskTypeMaskTypeMaskTypeMaskTypeMaskTypemaskType (input_control)  string HTupleHTupleHTupleVARIANTHtuple (string) (string) (HString) (char*) (BSTR) (char*)

Art der Filtermaske.

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

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

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

RadiusRadiusRadiusRadiusRadiusradius (input_control)  integer HTupleHTupleHTupleVARIANTHtuple (integer) (int / long) (Hlong) (Hlong) (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 radius ≤ 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"

Werteliste (für Compute Devices): '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')
median_image (Image, Median, 'circle', 3, 'continued')
dev_display(Median)

Komplexität

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

Ergebnis

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

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