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) |
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) |
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) |
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.
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