rank_rect
— Rangfilterung mit rechteckigen Rangmasken.
rank_rect(Image : ImageRank : MaskWidth, MaskHeight, Rank : )
rank_rect
führt eine Rangfilterung des Eingabebildes
Image
mit einer rechteckigen Maske der Größe
MaskWidth
× MaskHeight
durch und
liefert das gefilterte Bild in ImageRank
zurück.
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 MaskWidth
* MaskHeight
dem
größten Grauwert innerhalb der Maske. Für Rank
= (MaskWidth
* MaskHeight
- 1) /
2 + 1 liefert rank_rect
den Median zurück (siehe
median_rect
). Für Rank
=
1 entspricht rank_rect
einer Grauwerterosion (siehe
gray_erosion_rect
, gray_erosion_shape
und
gray_erosion
), für Rank
= MaskWidth
*
MaskHeight
entspricht rank_rect
einer
Grauwertdilatation (siehe gray_dilation_rect
,
gray_dilation_shape
und gray_dilation
).
rank_rect
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_rect
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. MaskWidth
* MaskHeight
etwas höhere bzw. niedrigere Werte für Rank
zu wählen.
Das Konzept der Glättungsfilter ist in der Einleitung zum Kapitel Filter / Glättung beschrieben.
Werden für MaskHeight
oder MaskWidth
gerade statt
ungerade Werte übergeben, verwendet rank_rect
an ihrer
Stelle die nächstgrößeren ungeraden Werte.
rank_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
rank_rect
für große Masken die schnellste Implementierung
des Rangfilters 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 rank_image
verwendete
Implementierung schneller als rank_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 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 Werte von MaskHeight
schneller als
rank_rect
ist.
rank_rect
sollte weder mit Rank
= 1 zur Berechnung einer Grauwerterosion noch
mit Rank
= MaskWidth
*
MaskHeight
zur Berechnung einer Grauwertdilatation
verwendet werden. In diesen Fällen sind die Operatoren
gray_erosion_rect
oder gray_erosion_shape
bzw.
gray_dilation_rect
oder gray_dilation_shape
für fast
alle Maskengrößen schneller als rank_rect
.
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)
Zu filterndes Bild.
ImageRank
(output_object) (multichannel-)image(-array) →
object (byte)
Gefiltertes Bild.
MaskWidth
(input_control) integer →
(integer)
Breite der Filtermaske.
Defaultwert: 15
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
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
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
Minimale Schrittweite: 1
Empfohlene Schrittweite: 2
Restriktion: 1 <= Rank && Rank <= MaskWidth * MaskHeight
Pro Bildpunkt: O(1).
Sind die Parameterwerte korrekt, dann liefert rank_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
rank_image
,
median_rect
,
median_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