rank_image
— Rangfilterung mit beliebigen Masken.
rank_image
führt eine Rangfilterung des Eingabebildes
Image
mit einer Maske, die durch die Region Mask
beschrieben wird, durch und liefert das gefilterte Bild in
ImageRank
zurück. Die Form der Maske kann beliebig gewählt
werden und z.B. mit Operatoren wie gen_circle
oder
draw_region
erzeugt werden. Die Position der Maske spielt
dabei keine Rolle, da der Schwerpunkt der Maskenregion als
Referenzpunkt der Maske verwendet wird.
Konzeptuell sortiert der Rangfilter alle Grauwerte innerhalb der
Maske aufsteigend und wählt dann den Grauwert mit dem Rang
Rank
aus. Dabei entspricht der Rang 1 dem kleinsten
Grauwert und der Rang A dem größten Grauwert innerhalb der Maske.
Hierbei ist A die Fläche von Mask
(siehe
area_center
). Für Rank
= (A - 1) / 2 + 1 liefert
rank_image
den Median zurück (siehe median_image
).
Für Rank
= 1 entspricht rank_image
einer
Grauwerterosion (siehe gray_erosion_rect
,
gray_erosion_shape
und gray_erosion
), für
Rank
= A entspricht rank_rect
einer
Grauwertdilatation (siehe gray_dilation_rect
,
gray_dilation_shape
und gray_dilation
).
rank_image
kann unter anderem zur Rauschunterdrückung oder
zum Unterdrücken unerwünschter Objekte, die kleiner als die Maske
sind, verwendet werden. Außerdem ist rank_image
unempfindlicher gegenüber Rauschen als die entsprechenden Operatoren
der Grauwertmorpholgie. Um eine robustere Version der
Grauwertmorphologie zu erhalten, empfiehlt es sich daher, anstatt 1
bzw. A etwas höhere bzw. niedrigere Werte für Rank
zu
wählen.
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.
Das Konzept der Glättungsfilter ist in der Einleitung zum Kapitel Filter / Glättung beschrieben.
rank_image
verwendet einen Algorithmus mit einer Laufzeit
pro Pixel, die von der Anzahl der Sehnen der Maske Mask
abhängt. Daher ist rank_image
für rechteckige Masken mit
einer großen Maskenhöhe langsamer als rank_rect
. Die genaue
Maskenhöhe, ab der rank_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 rank_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 rank_image
auch für größere Maskenhöhen schneller als rank_rect
ist.
rank_image
sollte weder mit Rank
= 1 zur
Berechnung einer Grauwerterosion noch mit Rank
= A zur
Berechnung einer Grauwertdilatation verwendet werden. In diesen
Fällen sind die Operatoren gray_erosion_rect
,
gray_erosion_shape
oder gray_erosion
bzw.
gray_dilation_rect
, gray_dilation_shape
oder
gray_dilation
typischerweise schneller als
rank_image
.
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)
Zu filterndes Bild.
Mask
(input_object) region →
object
Filtermaske.
ImageRank
(output_object) multichannel-image(-array) →
object (byte / int2 / uint2 / int4 / real)
Gefiltertes Bild.
Rank
(input_control) integer →
(integer)
Rang des Ausgabegrauwerts.
Defaultwert: 5
Wertevorschläge: 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 31, 49, 51, 61, 71, 81, 91, 101
Typischer Wertebereich: 1
≤
Rank
≤
4095
Minimale Schrittweite: 1
Empfohlene Schrittweite: 2
Margin
(input_control) string →
(string / integer / real)
Randbehandlung.
Defaultwert: 'mirrored'
Wertevorschläge: 'mirrored' , 'cyclic' , 'continued' , 0, 30, 60, 90, 120, 150, 180, 210, 240, 255
read_image (Image, 'fabrik') draw_region (Region, WindowHandle) rank_image (Image, Region, ImageRank, 5, 'mirrored') dev_display(ImageRank)
Pro Bildpunkt: O(N), wobei N die Anzahl der Sehnen von
Mask
ist (siehe runlength_features
).
Sind die Parameterwerte korrekt, dann liefert rank_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.
read_image
,
draw_region
,
gen_circle
,
gen_rectangle1
,
gen_rectangle2
threshold
,
dyn_threshold
,
regiongrowing
rank_rect
,
median_image
,
median_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