文章僅爲個人理解,如有不妥之處歡迎指正。
寫幾個常見的圖像去噪濾波器。
1、均值濾波器
均值濾波器是最簡單的圖像平滑濾波器,其3*3的模板爲模板中心的濾波值是模板內像素點的平均值,過程如下圖,填充幾行由模板大小來決定。如果想濾波輸出與原圖像大小一致,填充是必須的,下文中就不再贅述了。
2、中值濾波器
中值濾波器是對模板內的像素值進行排序,然後選取中值作爲模板中心的濾波值,均值噪聲能有效去除椒鹽噪聲。
3、高斯濾波器
高斯濾波器是一種線性濾波器,能夠有效的抑制噪聲,平滑圖像。其作用原理和均值濾波器類似,都是取濾波器窗口內的像素的均值作爲輸出。其窗口模板的係數和均值濾波器不同,均值濾波器的模板係數都是相同的爲1;而高斯濾波器的模板係數,則隨着距離模板中心的增大而係數減小。所以,高斯濾波器相比於均值濾波器對圖像個模糊程度較小。
高斯模板的係數計算公式爲:其中,分別時模板內像素點到模板中心的相對距離。
以3*3高斯濾波器爲例,取,其上式計算得模板係數爲:
需要注意的是,最後歸一化的過程,使用模板左上角的係數的倒數作爲歸一化的係數(左上角的係數值被歸一化爲1),模板中的每個係數都乘以該值(左上角係數的倒數),然後將得到的值取整,就得到了整數型的高斯濾波器模板,就是我們常見的整數型3*3高斯濾波模板:高斯濾波器模板係數與標準差有着很大的關係,當取很小的值時,只有模板中心的值接近於1,其餘的接近於0;當取很大值時,模板係數全接近於1,相當於均值濾波。
上圖可以看到,隨着的增大,圖像去噪效果是明顯了,但同時圖像也更模糊了,這就需要我們在實際應用的時候平衡去噪效果和模糊程度。此外,模板尺寸越大,圖像也會更模糊,去噪效果也會更好。
4、NLM算法
NLM全稱爲non-local means,顧名思義,它是非局部平均算法,上面幾個算法都是利用濾波點周圍幾個像素點進行濾波,NLM對每個濾波點都利用了整張圖像的信息。比如,要對像素點做NLM處理,先遍歷整張圖像,求出與其他像素點的相似度,相似度越大,權重越大,最後再對整張圖像的像素點進行加權平均,就得到的濾波值。該方法充分利用了圖像中的冗餘信息,在去噪的同時能最大程度地保持圖像的細節特徵。
定義:假設是帶噪聲的圖像,,表示對像素點的濾波值,就有: 其中,表示像素點的灰度值,注意,要遍歷整張圖像,是的權重,由兩像素點之間的相似度來得到。
如果僅僅比較像素值來作爲相似度的依據,不能正確反映的關係,所以算法提出者利用的歐式距離來衡量相似度,分別表示領域像素點,鄰域大小可以自己選擇;
進一步就可以得到 其中,就是歐式距離,爲濾波器參數,引入C是爲了歸一化。
由上式可以看出,當的鄰域和的鄰域相似度高的時候,的加權係數也會比較大,下圖中,明顯可以看出點、點的鄰域與點鄰域比較相似,所以比較大,而的鄰域與差別較大,所以就很小。
上面說過,對於每個,濾波值都需要用到整個的圖像,這樣就導致算法複雜度特別高,運算非常緩慢,所以通常在應用的時候,會選定一個搜索區域,在搜索區域內計算相似度,然後加權平均,而不是遍歷整個圖像了。
上面圖像我選取鄰域大小33,搜索區域77,小於論文原文使用的77鄰域和2121搜索區域,即便如此,處理這幅512*512的圖像也需要兩分鐘。
對於參數的選取,論文原文給出了選取規則,,表示噪聲標準差。但實際應用的時候,我發現的選取並不需要那麼嚴格,只要別選的太大或者太小就行。很大的時候,NLM就接近於均值濾波器了。
5、 改進的NLM算法
針對NLM算法耗時太長的問題,論文Parameter-Free Fast Pixelwise Non-Local Means Denoising 提出了改進算法,在另一位博主文章積分圖像的應用(二):非局部均值去噪(NL-means)中對論文做了一定的解釋,但是還是挺難懂的,我僅在此補充一些個人理解。在此之前你需要了解積分圖像。
上圖中,左邊是經典NLM算法流程,右邊是改進後的大致流程。
我的理解:經典NLM對一個像素點點濾波完全結束後,纔會進行對下一個像素點的濾波;而改進的NLM不是這樣,它每次求出每個像素點鄰域內的一個權重,而且相對位置(圖中的)是一樣的,然後遍歷整個鄰域位置,求出剩下權重,這樣就得到了全部權重,在得到全部權重的同時,完成對整個圖像的濾波,在此之前不會有任何像素點完成濾波,這一過程的實現需要用到積分圖像。可以把經典NLM看成“串行”計算,那麼改進NLM就是“並行”計算。
舉個例子,看上圖右上角的小圖,經典NLM需要把鄰域內25個權重都求出來,並且進行加權平均,才能對下一個像素進行濾波;改進的NLM每次求得所有像素點相對位置爲那一像素值的權重。
上圖是濾波結果圖像,改進之後的NLM與經典NLM效果是一模一樣的,但是耗時卻大大下降了,因爲核心思想是沒變的,只是不同的實現過程。
用語言還是挺難完全說清楚的,以上只是幫助理解,想真正搞清楚還需要看源碼,我把整篇文章的代碼都放在這裏了,可免費下載。