guided_filterguided_filterGuidedFilterGuidedFilterguided_filter (Operator)

Name

guided_filterguided_filterGuidedFilterGuidedFilterguided_filter — 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)

def guided_filter(image: HObject, image_guide: HObject, radius: int, amplitude: float) -> HObject

Beschreibung

guided_filterguided_filterGuidedFilterGuidedFilterguided_filter filtert das Eingabebild ImageImageImageimageimage mit Hilfe des Führungsbildes ImageGuideImageGuideImageGuideimageGuideimage_guide und liefert das Ergebnis in ImageGuidedImageGuidedImageGuidedimageGuidedimage_guided zurück. ImageImageImageimageimage und ImageGuideImageGuideImageGuideimageGuideimage_guide 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 ImageGuideImageGuideImageGuideimageGuideimage_guide identisch, verhält sich guided_filterguided_filterGuidedFilterGuidedFilterguided_filter 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_filterGuidedFilterGuidedFilterguided_filter eine schnelle Alternative zu anisotropic_diffusionanisotropic_diffusionAnisotropicDiffusionAnisotropicDiffusionanisotropic_diffusion oder bilateral_filterbilateral_filterBilateralFilterBilateralFilterbilateral_filter.

( 1) ( 2) ( 3)

Sind ImageImageImageimageimage und ImageGuideImageGuideImageGuideimageGuideimage_guide verschieden, wird ImageImageImageimageimage mit einer Filtermaske mit Radius RadiusRadiusRadiusradiusradius geglättet, außer in Bereichen, wo ImageGuideImageGuideImageGuideimageGuideimage_guide Kanten mit deutlich höherem Kontrast als AmplitudeAmplitudeAmplitudeamplitudeamplitude aufweist.

( 1) ( 2) ( 3)

Ist ImageGuideImageGuideImageGuideimageGuideimage_guide konstant, verhält sich guided_filterguided_filterGuidedFilterGuidedFilterguided_filter äquivalent zu 2 aufeinanderfolgenden Aufrufen von mean_imagemean_imageMeanImageMeanImagemean_image mit Maskengröße 2*RadiusRadiusRadiusradiusradius+1.

( 1) ( 2) ( 3)

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 ImageGuideImageGuideImageGuideimageGuideimage_guide 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_filterGuidedFilterGuidedFilterguided_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.

* Verwenden des Rolling-Guided-Filter
* (verwende ein konstantes Führungsbild für die erste Iteration).
gen_image_proto(Image, ImageStructure, 0)gen_image_proto(Image, ImageStructure, 0)GenImageProto(Image, ImageStructure, 0)GenImageProto(Image, ImageStructure, 0)gen_image_proto(Image, ImageStructure, 0)
for I := 1 to 4 by 1
guided_filter(Image, ImageStructure, ImageStructure, 1.5, 60)guided_filter(Image, ImageStructure, ImageStructure, 1.5, 60)GuidedFilter(Image, ImageStructure, ImageStructure, 1.5, 60)GuidedFilter(Image, ImageStructure, ImageStructure, 1.5, 60)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)sub_image(Image, ImageStructure, ImageTexture, 1, 128)SubImage(Image, ImageStructure, ImageTexture, 1, 128)SubImage(Image, ImageStructure, ImageTexture, 1, 128)sub_image(Image, ImageStructure, ImageTexture, 1, 128)

Da sich guided_filterguided_filterGuidedFilterGuidedFilterguided_filter mit konstantem ImageGuideImageGuideImageGuideimageGuideimage_guide ähnlich zu mean_imagemean_imageMeanImageMeanImagemean_image verhält, kann die erste Iteration durch einen Aufruf von mean_imagemean_imageMeanImageMeanImagemean_image (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 ImageGuideImageGuideImageGuideimageGuideimage_guide 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) objectHImageHObjectHObjectHobject (byte / uint2 / real)

Eingabebild.

ImageGuideImageGuideImageGuideimageGuideimage_guide (input_object)  (multichannel-)image(-array) objectHImageHObjectHObjectHobject (byte / uint2 / real)

Führungsbild.

ImageGuidedImageGuidedImageGuidedimageGuidedimage_guided (output_object)  (multichannel-)image(-array) objectHImageHObjectHObjectHobject * (byte / uint2 / real)

Ausgabebild.

RadiusRadiusRadiusradiusradius (input_control)  integer HTupleintHTupleHtuple (integer) (int / long) (Hlong) (Hlong)

Radius der Filterung.

Default: 3

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

Restriktion: Radius > 0

AmplitudeAmplitudeAmplitudeamplitudeamplitude (input_control)  real HTuplefloatHTupleHtuple (real) (double) (double) (double)

Steuert den Einfluss der Kanten bei der Filterung.

Default: 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_imageReadImageReadImageread_image

Nachfolger

thresholdthresholdThresholdThresholdthreshold, dyn_thresholddyn_thresholdDynThresholdDynThresholddyn_threshold, regiongrowingregiongrowingRegiongrowingRegiongrowingregiongrowing

Alternativen

bilateral_filterbilateral_filterBilateralFilterBilateralFilterbilateral_filter, anisotropic_diffusionanisotropic_diffusionAnisotropicDiffusionAnisotropicDiffusionanisotropic_diffusion, median_imagemedian_imageMedianImageMedianImagemedian_image

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