guided_filter — Geführte Filterung eines Bildes.
guided_filter(Image, ImageGuide : ImageGuided : Radius, Amplitude : )
guided_filter filtert das Eingabebild Image mit Hilfe
des Führungsbildes ImageGuide und liefert das Ergebnis in
ImageGuided zurück. Image und ImageGuide müssen
die selbe Größe haben und vom selben Typ sein.
Der Radius bestimmt die Größe der Filtermaske. Größere Werte
erhöhen den Einflussbereich des Filters und führen dazu, dass weniger
Details erhalten bleiben. Der Wert von Radius hat keinen Einfluss
auf die Laufzeit des Operators.
Amplitude wird verwendet, um zu entscheiden, was eine Kante und
was eine homogene Fläche ist. Größere Werte von Amplitude führen
dazu, dass stärkere Kanten geglättet werden.
Als Daumenregel sollte Amplitude kleiner sein als der Kontrast
der Kanten, die erhalten werden sollen.
Es ist zu beachten, dass der Kontrast in uint2- oder real-Bildern deutlich
vom Defaultwert von Amplitude abweichen kann und der Parameter
daher gesondert eingestellt werden muss.
Sind Image und ImageGuide identisch, verhält sich
guided_filter wie ein kantenerhaltender Glättungsfilter mit einer
Filtermaske mit dem Radius Radius.
Pixel an Kanten mit einem Kontrast, der deutlich über Amplitude
liegt, werden erhalten, während Pixel in homogenen Bereichen geglättet
werden. Daher ist guided_filter eine schnelle Alternative zu
anisotropic_diffusion oder bilateral_filter.
| (1) | (2) | (3) |
Image und (2) ImageGuide sind identisch.
Das führt zu kantenerhaltender Glättung in (3) ImageGuided.
Sind Image und ImageGuide verschieden, wird Image
mit einer Filtermaske mit Radius Radius geglättet, außer in
Bereichen, wo ImageGuide Kanten mit deutlich höherem Kontrast als
Amplitude aufweist.
| (1) | (2) | (3) |
Image und (2) ImageGuide sind verschieden.
Nur Kanten in Bereichen, wo ImageGuide Kanten hat, bleiben in
(3) ImageGuided erhalten.
Ist ImageGuide konstant, verhält sich guided_filter
äquivalent zu 2 aufeinanderfolgenden Aufrufen von mean_image mit
Maskengröße 2*Radius+1.
| (1) | (2) | (3) |
ImageGuide ist konstant. Das entspricht einer
doppelten Glättung von (1) Image mit mean_image.
(3) ImageGuided.
Die folgenden Beispiele zeigen den Einfluss von Amplitude auf
einem künstlichen Bild. In diesem Bild liegt das Rauschlevel bei 10
Grauwerten, die linke Kante hat einen Kontrast von 50 Grauwerten,
die rechte Kante hat einen Kontrast von 100 Grauwerten.
Die gelbe Linie zeigt das Grauwertprofile eines horizontalen Querschnitts.
Image als auch für ImageGuide verwendet.
Amplitude = 25:
Das Rauschen wird geglättet, die Kanten werden erhalten.
Amplitude = 50:
Die schwächere Kante wird geglättet, die stärkere Kante wird erhalten.
Amplitude = 100: Beide Kanten werden
geglättet.
guided_filter kann iterativ aufgerufen werden. In dem Fall wird das
Ergebnis einer Iteration als Führungsbild der nächsten Iteration verwendet.
Das kann nützlich sein, z.B. um kleine Strukturen aus dem Originalbild zu
entfernen, auch wenn sie einen hohen Kontrast haben.
Im folgenden Beispiel wird der Rolling-Guided-Filter verwendet, um die Textur vom Originalbild zu trennen.
| (1) | (2) | (3) |
* Verwenden des Rolling-Guided-Filter * (verwende ein konstantes Führungsbild für die erste Iteration). gen_image_proto (Image, ImageStructure, 0) for I := 1 to 4 by 1 guided_filter (Image, ImageStructure, ImageStructure, 1.5, 60) endfor * Extrahiere die Textur durch Abziehen der großen Strukturen vom Original. sub_image (Image, ImageStructure, ImageTexture, 1, 128)
Da sich guided_filter mit konstantem ImageGuide ähnlich
zu mean_image verhält, kann die erste Iteration durch einen Aufruf
von mean_image (oder einem ähnlichen Glättungsfilter) ersetzt
werden, was schneller ist.
Die Berechnung der gefilterten Grauwerte an der
Position beruht auf folgender Formel:
wobei
und
Dabei sind und die Grauwerte von
Image und ImageGuide an der Pixelposition .
ist die Umgebung um mit dem Radius
Radius. ,
, und
sind die Mittelwerte aller ,
, oder in .
ist die Standardabweichung aller Grauwerte
von in . Und
ist die Anzahl der Pixel in .
Das Konzept der Glättungsfilter ist in der Einleitung zum Kapitel Filter / Glättung beschrieben.
Image (input_object) (multichannel-)image(-array) → object (byte / uint2 / real)
Eingabebild.
ImageGuide (input_object) (multichannel-)image(-array) → object (byte / uint2 / real)
Führungsbild.
ImageGuided (output_object) (multichannel-)image(-array) → object (byte / uint2 / real)
Ausgabebild.
Radius (input_control) integer → (integer)
Radius der Filterung.
Defaultwert: 3
Wertevorschläge: 1, 2, 3, 5, 10
Restriktion: Radius > 0
Amplitude (input_control) real → (real)
Steuert den Einfluss der Kanten bei der Filterung.
Defaultwert: 20.0
Wertevorschläge: 3.0, 10.0, 20.0, 50.0, 100.0
Restriktion: Amplitude > 0
read_image (Image, 'mreut') * Edge-preserving smoothing guided_filter (Image, Image, ImageGuided, 5, 20) * Rolling filter (5 iterations) gen_image_proto (Image, ImageGuide, 0) for I := 1 to 5 by 1 guided_filter (Image, ImageGuide, ImageGuide, 5, 20) endfor
threshold,
dyn_threshold,
regiongrowing
bilateral_filter,
anisotropic_diffusion,
median_image
Kaiming He, Jian Sun, Xiaoou Tang: „Guided Image Filtering“; IEEE Transactions on Pattern Analysis and Machine Intelligence; PAMI-35, no. 6; S. 1397-1409; 2013.
Foundation