median_rect
— Medianfilterung mit rechteckigen Masken.
median_rect(Image : ImageMedian : MaskWidth, MaskHeight : )
median_rect
führt eine Medianfilterung des Eingabebildes
Image
mit einer rechteckigen Maske der Größe
MaskWidth
× MaskHeight
durch und
liefert das gefilterte Bild in ImageMedian
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) (MaskWidth
*
MaskHeight
- 1) / 2 + 1 der sortierten Grauwerte, wobei
der Rang 1 dem kleinsten Grauwert und der Rang MaskWidth
*
MaskHeight
dem größten Grauwert innerhalb der Maske
entspricht (siehe auch rank_rect
).
median_rect
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.
median_rect
kann bei Verwendung einer quadratischen 3x3 oder 5x5
Filtermaske auf OpenCL Geräten ausgeführt werden.
Das Konzept der Glättungsfilter ist in der Einleitung zum Kapitel Filter / Glättung beschrieben.
Werden für MaskWidth
oder MaskHeight
gerade statt
ungerade Werte übergeben, verwendet median_rect
an ihrer
Stelle die nächstgrößeren ungeraden Werte.
median_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
median_rect
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 MaskHeight
die in median_image
und
rank_image
verwendete Implementierung schneller als
median_rect
. Typischerweise ist das für MaskHeight
15 der Fall, kann aber z.B. bei nicht vorhandenen
SIMD-Befehlen und langsamem Speicher auch für größere Werte von
MaskHeight
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
und rank_image
auch für größere Werte
von MaskHeight
schneller als median_rect
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.
Image
(input_object) (multichannel-)image(-array) →
object (byte*) *erlaubt für Compute Devices
Zu filterndes Bild.
ImageMedian
(output_object) (multichannel-)image(-array) →
object (byte)
Gefiltertes Bild.
MaskWidth
(input_control) integer →
(integer)
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
≤
4095
Minimale Schrittweite: 2
Empfohlene Schrittweite: 2
MaskHeight
(input_control) integer →
(integer)
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
≤
4095
Minimale Schrittweite: 2
Empfohlene Schrittweite: 2
Pro Bildpunkt: O(1).
Sind die Parameterwerte korrekt, dann liefert median_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>)
festlegen.
Gegebenenfalls wird eine Fehlerbehandlung durchgeführt.
threshold
,
dyn_threshold
,
regiongrowing
median_image
,
rank_rect
,
rank_image
gray_erosion_rect
,
gray_dilation_rect
,
gray_erosion_shape
,
gray_dilation_shape
,
gray_erosion
,
gray_dilation
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.
Foundation