ISP算法 | 第3章:中值濾波

前面的高斯濾波和均值濾波都是線性濾波器,在數(shù)字圖像處理中,凡是算子(kernel)可以顯式的寫出來的濾波器,都是線性濾波器,比如高斯算子,sobel算子,拉普拉斯算子等。這種濾波器對圖像的處理效果從算子上就能一眼看出來,可以這么說,每個線性算子其實就是一個線性系統(tǒng),這個系統(tǒng)對圖像中的每一個pixel都做了相同的運算。
中值濾波是特別基礎(chǔ)的一個非線性濾波器,它是對濾波窗口內(nèi)的像素排序,然后取中間的那個像素作為輸出,中值濾波一般在ISP中用于去除椒鹽噪聲或者是孤立的壞點。
1.?算法原理
中值濾波就沒有kernel了,簡單的畫個圖,對于一個3×3的窗口,其中值濾波的結(jié)果就是窗口內(nèi)9個數(shù)據(jù)排序,取中間的那個作為輸出,下圖中就是取45作為當(dāng)前窗口的輸出。

2.?圖像處理效果與對比
為了測試中值濾波的效果,用matlab對Lena圖添加了高斯噪聲和椒鹽噪聲,然后用中值濾波進行降噪測試,對比效果。
雖然matlab中有自帶的中值濾波器函數(shù),但是推薦使用ordfilt2函數(shù)來實現(xiàn)中值濾波,這是因為在做算法開發(fā)的時候,matlab中已經(jīng)寫好的函數(shù)不方便修改中間過程,這個時候用更基礎(chǔ)的函數(shù)或者自己寫的代碼會更方便。比如ordfilt2函數(shù),它的功能就是對二維數(shù)組中n個非零值按照從大到小排序,然后可以指定第幾個位置的元素作為輸出結(jié)果。以5×5窗口為例,13就是中間位置,相關(guān)代碼已附在后面。
先加入椒鹽噪聲,椒鹽噪聲是一種顆粒噪聲,像胡椒面一樣隨機分布,因此得名“椒鹽噪聲”。測試的效果如下圖2所示,左邊為輸入圖像,中間為加入椒鹽噪聲的圖像,右邊為5×5中值濾波的結(jié)果。判斷一個濾波器是否優(yōu)秀,只要看它是否在去除噪聲的同時還能保持住邊界,從這個角度出發(fā),中值濾波對椒鹽噪聲的降噪效果還不錯,雖然圖像被模糊了,但是椒鹽噪聲去除的很干凈。

接下來看一下高斯噪聲的降噪效果,顯示的圖像如下圖3所示,左邊為輸入圖像,中間為加入椒鹽噪聲的圖像,右邊為5×5中值濾波的結(jié)果。可見,中值濾波對高斯噪聲的濾波效果就沒那么椒鹽噪聲那么好了,也起到了降噪的效果,但是噪聲沒濾干凈。

從上圖可以看出,中值濾波用在椒鹽噪聲上的效果比較好,用在高斯噪聲上的效果就很一般了。在實際算法開發(fā)的過程中,會根據(jù)噪聲形態(tài)選擇適合的濾波器,中值濾波一般用于去除顆粒噪聲,在去壞點模塊中會選擇使用它,而高斯噪聲一般選用高斯濾波或者雙邊濾波來降噪。
附錄: