2016-04-21 7 views
0

Nach der Funktionsdefinition sollte es funktionieren, aber ich bekomme das gleiche Bild wie die Eingabe ohne Glättungseffekt. Ich verstehe nicht, warum andere Glättungsarten (Gauß, Median usw.) fein arbeiten.Bilaterale Filterung mit cvSmooth() Funktion

+0

Bitte geben Sie eine [MCVE]. Wie vergleichen Sie die Bilder? BTW, OpenCV C api ist ** veraltet ** – Miki

Antwort

0

Versuchen Sie, Ihre Sigma-Werte zu erhöhen. Sigma1 bestimmt, wie Farben im Kernel interagieren. Sigma2 bestimmt die Gewichtung basierend auf der räumlichen Entfernung. Sigma-Werte von Null in einem bilateralen Filter bedeuten, dass Sie eine räumliche und eine Farbdomäne von Null verwenden, dh, dass keine Filterung durchgeführt wird.

+0

'cvSmooth (img, dst, CV_BILATERAL, 10,20,10,20);' Ich versuchte auch auf diese Weise, aber es gibt keinen Effekt am Ausgabebild. –

+0

Es gibt immer noch einige Missverständnisse. Die Fenstergröße muss für den bilateralen Filter quadratisch sein. Sie benutzen 10,20. cvSmooth verwendet nur das Argument der ersten Größe, so dass es tatsächlich eine 10x10 Kernel-Öffnung gibt. Dein räumliches Sigma ist 20, was größer ist als der Kern. Abhängig von der Bittiefe Ihres Eingangsbildes ist der Farbsigmawert möglicherweise zu niedrig, um das Bild sichtbar zu beeinflussen. Wenn die Eingabe 8-Bit ist, versuchen Sie etwas wie (img, dst, CV_BILATERAL, 10,10,120,10). Es ist auch erwähnenswert, dass die cvSmooth-Funktion veraltet ist. Sie sollten wahrscheinlich stattdessen bilateralFilter() verwenden. – BHawk