濾波的作用可以進(jìn)行平滑,以去除一些噪點(diǎn),但是,這也同時(shí)會(huì)弱化邊緣,當(dāng)對(duì)邊緣有較高要求時(shí),一般的濾波方法,如高斯濾波,中值濾波等則效果不佳。故為達(dá)到此目的,產(chǎn)生了biliner filter與image guided filter,在對(duì)圖像進(jìn)行平滑時(shí),盡可能地保持邊緣信息。
至于具體的實(shí)現(xiàn)opencv中也都有了相應(yīng)的函數(shù)接口,原理可參見一篇博文blog.csdn.net/pi9nc/article/details/26592377
在這兒主要來說說guided filter的濾波方式,因?yàn)樽罱捻?xiàng)目正好需要嘗試使用這種方法。
顧名思義,引導(dǎo)濾波,需要涉及到引導(dǎo)圖片,在這兒引導(dǎo)圖片可以是原始需要濾波的圖片也可以是與原始圖片同大小的其他圖片(根據(jù)實(shí)際需要設(shè)置相應(yīng)的引導(dǎo)圖片)。然后便是對(duì)圖片進(jìn)行線性化的操作,那為什么會(huì)想到要用線性化的方式來計(jì)算呢?因?yàn)樗胍_(dá)到的濾波后的效果是需要盡可能地保持邊緣,也就是保持相應(yīng)的梯度信息(空間關(guān)系),而對(duì)線性變換求梯度可知變換前后有相似的梯度值,只是有比例關(guān)系。具體的原理表達(dá)式1如下:
其中I表示的是引導(dǎo)圖片,ak,bk則是以像素k為窗口中心時(shí)的線性變換系數(shù)。最后,因?yàn)橥粋€(gè)像素點(diǎn)可能會(huì)出現(xiàn)在多個(gè)窗口中,所以其最后的像素點(diǎn)輸出值為其所在的所有窗口計(jì)算值取平均。即如表達(dá)式2所示:
好了,知道最后的結(jié)果值是如何輸出的了,那么現(xiàn)在問題來了,如何計(jì)算得出相應(yīng)的線性變換的系數(shù)呢?利用線性回歸的方式來計(jì)算得出最小二乘中的系數(shù):
此處ak前的系數(shù)(寫作e)防止所求得的ak值過大,同時(shí)也可以用以控制濾波的強(qiáng)烈程度。在窗口大小不變的情況下,隨著e的增大,濾波效果也就越明顯。
最后可得:ak,bk的值為:
根據(jù)上面ak,bk的表達(dá)式,可以分析得出:
I指的是引導(dǎo)圖,P為輸入的待濾波圖。另外需要補(bǔ)充的一點(diǎn)是,當(dāng)在同樣的e的情況下,若窗口越大,則模糊越明顯。
于此,便可利用該線性的方式來對(duì)圖片進(jìn)行濾波,且保持了相應(yīng)的邊緣信息。