guided_filterguided_filterGuidedFilterGuidedFilter (Operator)

Name

guided_filterguided_filterGuidedFilterGuidedFilter — Geführte Filterung eines Bildes.

Signatur

guided_filter(Image, ImageGuide : ImageGuided : Radius, Amplitude : )

Herror guided_filter(const Hobject Image, const Hobject ImageGuide, Hobject* ImageGuided, const Hlong Radius, double Amplitude)

Herror T_guided_filter(const Hobject Image, const Hobject ImageGuide, Hobject* ImageGuided, const Htuple Radius, const Htuple Amplitude)

void GuidedFilter(const HObject& Image, const HObject& ImageGuide, HObject* ImageGuided, const HTuple& Radius, const HTuple& Amplitude)

HImage HImage::GuidedFilter(const HImage& ImageGuide, Hlong Radius, double Amplitude) const

static void HOperatorSet.GuidedFilter(HObject image, HObject imageGuide, out HObject imageGuided, HTuple radius, HTuple amplitude)

HImage HImage.GuidedFilter(HImage imageGuide, int radius, double amplitude)

Beschreibung

guided_filterguided_filterGuidedFilterGuidedFilterGuidedFilter filtert das Eingabebild ImageImageImageImageimage mit Hilfe des Führungsbildes ImageGuideImageGuideImageGuideImageGuideimageGuide und liefert das Ergebnis in ImageGuidedImageGuidedImageGuidedImageGuidedimageGuided zurück. ImageImageImageImageimage und ImageGuideImageGuideImageGuideImageGuideimageGuide müssen die selbe Größe haben und vom selben Typ sein.

Der RadiusRadiusRadiusRadiusradius 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 RadiusRadiusRadiusRadiusradius hat keinen Einfluss auf die Laufzeit des Operators.

AmplitudeAmplitudeAmplitudeAmplitudeamplitude wird verwendet, um zu entscheiden, was eine Kante und was eine homogene Fläche ist. Größere Werte von AmplitudeAmplitudeAmplitudeAmplitudeamplitude führen dazu, dass stärkere Kanten geglättet werden. Als Daumenregel sollte AmplitudeAmplitudeAmplitudeAmplitudeamplitude 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 AmplitudeAmplitudeAmplitudeAmplitudeamplitude abweichen kann und der Parameter daher gesondert eingestellt werden muss.

Einfluss des Führungsbildes

Sind ImageImageImageImageimage und ImageGuideImageGuideImageGuideImageGuideimageGuide identisch, verhält sich guided_filterguided_filterGuidedFilterGuidedFilterGuidedFilter wie ein kantenerhaltender Glättungsfilter mit einer Filtermaske mit dem Radius RadiusRadiusRadiusRadiusradius. Pixel an Kanten mit einem Kontrast, der deutlich über AmplitudeAmplitudeAmplitudeAmplitudeamplitude liegt, werden erhalten, während Pixel in homogenen Bereichen geglättet werden. Daher ist guided_filterguided_filterGuidedFilterGuidedFilterGuidedFilter eine schnelle Alternative zu anisotropic_diffusionanisotropic_diffusionAnisotropicDiffusionAnisotropicDiffusionAnisotropicDiffusion oder bilateral_filterbilateral_filterBilateralFilterBilateralFilterBilateralFilter.

(1) (2) (3)
(1) ImageImageImageImageimage und (2) ImageGuideImageGuideImageGuideImageGuideimageGuide sind identisch. Das führt zu kantenerhaltender Glättung in (3) ImageGuidedImageGuidedImageGuidedImageGuidedimageGuided.

Sind ImageImageImageImageimage und ImageGuideImageGuideImageGuideImageGuideimageGuide verschieden, wird ImageImageImageImageimage mit einer Filtermaske mit Radius RadiusRadiusRadiusRadiusradius geglättet, außer in Bereichen, wo ImageGuideImageGuideImageGuideImageGuideimageGuide Kanten mit deutlich höherem Kontrast als AmplitudeAmplitudeAmplitudeAmplitudeamplitude aufweist.

(1) (2) (3)
(1) ImageImageImageImageimage und (2) ImageGuideImageGuideImageGuideImageGuideimageGuide sind verschieden. Nur Kanten in Bereichen, wo ImageGuideImageGuideImageGuideImageGuideimageGuide Kanten hat, bleiben in (3) ImageGuidedImageGuidedImageGuidedImageGuidedimageGuided erhalten.

Ist ImageGuideImageGuideImageGuideImageGuideimageGuide konstant, verhält sich guided_filterguided_filterGuidedFilterGuidedFilterGuidedFilter äquivalent zu 2 aufeinanderfolgenden Aufrufen von mean_imagemean_imageMeanImageMeanImageMeanImage mit Maskengröße 2*RadiusRadiusRadiusRadiusradius+1.

(1) (2) (3)
(2) ImageGuideImageGuideImageGuideImageGuideimageGuide ist konstant. Das entspricht einer doppelten Glättung von (1) ImageImageImageImageimage mit mean_imagemean_imageMeanImageMeanImageMeanImage. (3) ImageGuidedImageGuidedImageGuidedImageGuidedimageGuided.

Einfluss der Glättungsparameter

Die folgenden Beispiele zeigen den Einfluss von AmplitudeAmplitudeAmplitudeAmplitudeamplitude 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.

Originalbild mit überlagertem Grauwertprofil. Das Bild wird sowohl für ImageImageImageImageimage als auch für ImageGuideImageGuideImageGuideImageGuideimageGuide verwendet.
Filterergebnis mit AmplitudeAmplitudeAmplitudeAmplitudeamplitude = 1: Kein Effekt, da AmplitudeAmplitudeAmplitudeAmplitudeamplitude unter dem Rauschlevel liegt. Daher wird das Rauschen als Kante behandelt und erhalten.
Filterergebnis mit AmplitudeAmplitudeAmplitudeAmplitudeamplitude = 25: Das Rauschen wird geglättet, die Kanten werden erhalten.
Filterergebnis mit AmplitudeAmplitudeAmplitudeAmplitudeamplitude = 50: Die schwächere Kante wird geglättet, die stärkere Kante wird erhalten.
Filterergebnis mit AmplitudeAmplitudeAmplitudeAmplitudeamplitude = 100: Beide Kanten werden geglättet.

Rolling-Guided-Filter

guided_filterguided_filterGuidedFilterGuidedFilterGuidedFilter 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)
Texturentfernung mit dem Rolling-Guided-Filter: (1) Original, (2) extrahierte Struktur, (3) extrahierte Textur.

* 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_filterguided_filterGuidedFilterGuidedFilterGuidedFilter mit konstantem ImageGuideImageGuideImageGuideImageGuideimageGuide ähnlich zu mean_imagemean_imageMeanImageMeanImageMeanImage verhält, kann die erste Iteration durch einen Aufruf von mean_imagemean_imageMeanImageMeanImageMeanImage (oder einem ähnlichen Glättungsfilter) ersetzt werden, was schneller ist.

Mathematischer Hintergrund

Die Berechnung der gefilterten Grauwerte an der Position beruht auf folgender Formel: wobei und Dabei sind und die Grauwerte von ImageImageImageImageimage und ImageGuideImageGuideImageGuideImageGuideimageGuide an der Pixelposition . ist die Umgebung um mit dem Radius RadiusRadiusRadiusRadiusradius. , , 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.

Ausführungsinformationen

Parameter

ImageImageImageImageimage (input_object)  (multichannel-)image(-array) objectHImageHImageHobject (byte / uint2 / real)

Eingabebild.

ImageGuideImageGuideImageGuideImageGuideimageGuide (input_object)  (multichannel-)image(-array) objectHImageHImageHobject (byte / uint2 / real)

Führungsbild.

ImageGuidedImageGuidedImageGuidedImageGuidedimageGuided (output_object)  (multichannel-)image(-array) objectHImageHImageHobject * (byte / uint2 / real)

Ausgabebild.

RadiusRadiusRadiusRadiusradius (input_control)  integer HTupleHTupleHtuple (integer) (int / long) (Hlong) (Hlong)

Radius der Filterung.

Defaultwert: 3

Wertevorschläge: 1, 2, 3, 5, 10

Restriktion: Radius > 0

AmplitudeAmplitudeAmplitudeAmplitudeamplitude (input_control)  real HTupleHTupleHtuple (real) (double) (double) (double)

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

Beispiel (HDevelop)

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

Vorgänger

read_imageread_imageReadImageReadImageReadImage

Nachfolger

thresholdthresholdThresholdThresholdThreshold, dyn_thresholddyn_thresholdDynThresholdDynThresholdDynThreshold, regiongrowingregiongrowingRegiongrowingRegiongrowingRegiongrowing

Alternativen

bilateral_filterbilateral_filterBilateralFilterBilateralFilterBilateralFilter, anisotropic_diffusionanisotropic_diffusionAnisotropicDiffusionAnisotropicDiffusionAnisotropicDiffusion, median_imagemedian_imageMedianImageMedianImageMedianImage

Literatur

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.

Modul

Foundation