median_image
— Medianfilterung mit verschiedenen Masken.
median_image(Image : ImageMedian : MaskType, Radius, Margin : )
median_image
führt eine Medianfilterung des Eingabebildes
Image
mit einer quadratischen oder kreisförmigen Maske
durch und liefert das gefilterte Bild in ImageMedian
zurück. Die Form der Maske kann mit MaskType
gewählt
werden. Der Radius der Maske wird mit Radius
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_image
).
Die Filtermaske wird über die Parameter Radius
und
MaskType
festgelegt.
Dabei bestimmt Radius
die Größe der Maske
und MaskType
die Form mit folgenden Optionen:
'circle' : Die Maske besteht aus den Pixeln innerhalb
eines Kreises mit Radius
um das Pixel des Maskenzentrums.
'square' : Die Maske besteht aus den Pixeln innerhalb
eines Quadrats mit einer Kantenlänge von
Radius
Pixel.
median_image
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_threshold
) verwendet werden.
Bei der Filterung kann über Margin
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.
Wird eine quadratische Maske mit Radius
1 oder 2 (und somit eine
3x3 oder 5x5 Pixel Filtermaske) mit der Randbehandlung 'mirrored'
verwendet, kann median_image
auf OpenCL Geräten ausgeführt werden.
Das Konzept der Glättungsfilter ist in der Einleitung zum Kapitel Filter / Glättung beschrieben.
median_image
verwendet einen Algorithmus mit einer Laufzeit
pro Pixel, die von der Maskenhöhe 2
* Radius
+ 1 abhängt. Daher ist median_image
für
quadratische Masken mit einer großen Maskenhöhe langsamer als
median_rect
. Die genaue Maskenhöhe, ab der
median_rect
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_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
median_image
auch für größere Maskenhöhen schneller als
median_rect
ist.
Aus Laufzeitgründen wird das Eingabebild Image
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.
Image
(input_object) (multichannel-)image(-array) →
object (byte* / int2* / uint2* / int4* / real*) *erlaubt für Compute Devices
Zu filterndes Bild.
ImageMedian
(output_object) (multichannel-)image(-array) →
object (byte / int2 / uint2 / int4 / real)
Gefiltertes Bild.
MaskType
(input_control) string →
(string)
Art der Filtermaske.
Defaultwert: 'circle'
Werteliste: 'circle' , 'square'
Werteliste (für Compute Devices): 'square'
Radius
(input_control) integer →
(integer)
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
≤
4095
Minimale Schrittweite: 1
Empfohlene Schrittweite: 2
Margin
(input_control) string →
(string / integer / real)
Randbehandlung.
Defaultwert: 'mirrored'
Werteliste (für Compute Devices): 'mirrored'
Wertevorschläge: 'mirrored' , 'cyclic' , 'continued' , 0, 30, 60, 90, 120, 150, 180, 210, 240, 255
read_image (Image, 'fabrik') median_image (Image, Median, 'circle', 3, 'continued') dev_display(Median)
Pro Bildpunkt: O(2 *
Radius
+ 1).
Sind die Parameterwerte korrekt, dann liefert median_image
den Wert 2 (H_MSG_TRUE). Das Verhalten bei leerer Eingabe (keine
Eingabebilder vorhanden) lässt sich mittels
set_system('no_object_result',<Result>)
festlegen.
Gegebenenfalls wird eine Fehlerbehandlung durchgeführt.
threshold
,
dyn_threshold
,
regiongrowing
median_rect
,
rank_image
,
rank_rect
gray_erosion_rect
,
gray_dilation_rect
,
gray_erosion_shape
,
gray_dilation_shape
,
gray_erosion
,
gray_dilation
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.
Foundation