郝波,盧小平
(河南理工大學礦山空間信息技術國家測繪地理信息局重點實驗室,焦作454003)
椒鹽噪聲又稱為脈沖噪聲,它是由圖像傳感器、傳輸信道、解碼處理等產(chǎn)生的黑白相間的亮暗點噪聲,可以隨機改變圖像的灰度值[1]。噪聲種類主要有椒鹽噪聲(Salt & Pepper)、高斯噪聲(Gaussian)、泊松噪聲(Poisson)和斑點噪聲(Speckle)。含有噪聲的圖像對于后期數(shù)字圖像處理如邊緣提取、圖像分割和模式識別帶來了一定影響,因此有必要對圖像進行去噪處理。
去除噪聲的過程稱為圖像濾波或圖像平滑,目的是為了消除圖像中存在的各種噪聲[2]。常見的濾波算法有均值濾波、中值濾波和高斯濾波,其中中值濾波是去除椒鹽噪聲的主要方法。
由于去噪時模板的選擇大多集中在3×3、5×5 和7×7,實際處理時進行賦值的僅僅是中間部分的像素,因此在進行去噪時導致邊緣部分無法進行去噪,如3×3模板會存在整幅圖像最外一行(列)像素得不到處理的情況,5×5 模板最外兩行邊像素得不到處理的情況,7×7 最外三行像素得不到處理的情況,以此類推。很多去噪算法都是針對如何快速、高效和準確地去除椒鹽噪聲[3-6],忽略了圖像邊緣存在的噪聲。本文針對上述問題,在實現(xiàn)中值濾波的同時,提出了三種利用均值進行邊緣去噪的算法,并以含椒鹽噪聲的Lena 圖像為例進行去噪處理,最后將處理結果和使用MATLAB 軟件生成的去噪圖像進行了對比。
中值濾波是一種常用的去除椒鹽噪聲的非線性平滑技術,通過將像素點的灰度值設置為該點某鄰域窗口(模板)內的所有像素點灰度值的中值來進行平滑處理,是一種基于排序統(tǒng)計理論的能有效抑制噪聲的非線性信號處理技術[7-8]。
中值濾波的基本原理是使用某種模板(3×3、5×5或7×7)從邊緣開始逐行或逐列進行移動,每次移動將其窗口內的圖像像素進行排列取其統(tǒng)計中的中值替換窗口中間像素的值,以3×3 模板(黃色部分)逐行處理為例,箭頭方向為窗口移動方向[9-11]。
圖1 中值濾波過程
如圖1 所示,在獲得3×3 窗口中的九個像素之后進行排序(從大到小或從小到大),取其中值作為中間綠色位置的像素,然后不斷的向右移動,一直到達最右側邊緣位置時進行換行繼續(xù)進行下一行像素的處理,直到窗口移動到右下角的位置時處理結束。
從演示圖可以看出當使用模板進行中值濾波的時候最外面的像素得不到處理,即第一行、最后一行、第一列和最后一列。這對于圖像的濾波來說達不到全部處理的效果(邊緣可能還存在噪聲),因此有必要針對邊緣去噪進行研究。本文在實現(xiàn)中值濾波的前提下,針對邊緣還存在噪聲的情況提出了三種邊緣去噪的算法,通過該算法可以很好地去除邊緣存在的噪聲。
在中值濾波算法基礎之上,本文提出三種邊緣去噪算法,一是在邊緣處按照1×2、1×3 或者1×4 模板取均值,二是在邊緣處選擇2×2 模板取均值,三是在邊緣處相隔一行(列)按照1×2、1×3 或者1×4 模板取均值。
在實現(xiàn)三種濾波算法之前首先利用MATLAB 自帶函數(shù)imnoise()生成噪聲污染系數(shù)N 為0.1 的椒鹽噪聲圖像,然后利用MATLAB 自帶函數(shù)medfilt2()進行3×3、5×5 和7×7 模板去噪處理并進行局部(左上角)放大,其效果如圖2 所示。
由圖2 可以看出當利用MATLAB 進行的中值濾波去噪時,不管使用哪個模板進行中值濾波都存在邊緣噪聲,即利用一般的去噪方法并不能進行邊緣噪聲的去除。
方法一的原理是針對沒有去噪的最外一行/列(綠色部分)灰度值使用模板1×2、1×3(紅色部分)或1×4取均值進行去噪,以第一行(3×3 模板)為例,其原理如圖3 所示。
圖3 方法一1×3模板原理
首先是第一行沒有進行去噪的像素,利用模板從左向右移動并取其三個像素的均值替換中間像素的灰度值,其次是獲取圖像最后一行的位置進行均值去噪,然后是第一列進行均值去噪,最后是最后一列進行均值去噪。
利用C++編程實現(xiàn)了對噪聲污染系數(shù)N 為0.1 的椒鹽噪聲圖像進行1×2、1×3 和1×4 模板的去噪處理并進行局部(左上角)放大,最后和沒有進行邊緣去噪的圖像進行了對比,其效果如圖4 所示。
圖4 方法一去噪效果
從圖4 可以看出,未進行邊緣去噪的圖像邊緣部分有明顯的噪聲存在,利用1×2 模板進行去噪的圖像邊緣有明顯的黑色陰影,利用1×3 模板進行去噪的圖像邊緣有了明顯的改善(噪聲顏色變淺),利用1×4 模板進行去噪的圖像邊緣處理效果最差,噪聲不僅沒有減少,反而增加。
總體來說用1×3 模板進行去噪的圖像邊緣處理效果最好,達到了一定程度的平滑處理,和原始未進行邊緣去噪的圖像相比其去噪程度最好,其他兩種方式都達不到理想的平滑效果。但是總的去噪效果還是不理想,這是因為進行去噪的灰度值是最外面沒有進行過任何處理的灰度值,大量椒鹽噪聲的存在使得即使取均值也得不到很好的去噪效果。
方法二的原理是針對圖像最外兩行(綠色部分)的灰度值使用2×2 模板(紅色部分)取均值進行去噪。以第一行灰度值進行去噪為例,其原理如圖5 所示。
首先進行中值濾波得到只有最外面一行沒有進行去噪的圖像,利用這個圖像在第一行和第二行做一個2×2 的模板,區(qū)模板均值賦值給第一行的像素,然后沿著箭頭方向依次進行處理,這樣第一行像素就得到了去噪處理。利用同樣的方法對倒數(shù)最后一行、第一列和最后一列進行去噪。
圖5 方法二2×2模板原理
利用C++編程對噪聲污染系數(shù)N 為0.1 的椒鹽噪聲圖像進行2×2 模板去噪處理并進行局部(左上角)放大,其效果如圖6 所示。
圖6 方法二去噪效果
從圖6 可以看出,和未進行邊緣去噪的圖像相比,利用2×2 模板進行去噪的圖像邊緣已經(jīng)不含有椒鹽噪聲,達到了理想的平滑效果。
方法三的原理是針對沒有去噪的最外一行/列(綠色部分)灰度值使用相鄰一行(列)的灰度值(綠色部分)取均值進行去噪。其原理和方法一差不多,只是選取的像素位置不一樣,所以得到的效果也不一樣。以第二行(1×3 模板)為例,其原理如圖7 所示。
首先是第二行沒有得到去噪的像素,利用模板從左向右進行移動并取其三個像素的均值替換中間像素的灰度值,其次是獲取圖像倒數(shù)第二行的位置進行均值去噪,然后是第二列進行均值去噪,最后是倒數(shù)第二列進行均值去噪。
圖7 方法三1×3模板原理
利用C++編程對噪聲污染系數(shù)N 為0.1 的椒鹽噪聲圖像進行1×2、1×3 和1×4 模板去噪處理并進行局部(左上角)放大,其效果如圖8 所示。
圖8 方法三去噪效果
從圖8 可以看出,和未進行邊緣去噪的圖像相比,不管是利用1×2、1×3 模板,還是利用1×4 模板對圖像邊緣進行去噪都能夠達到理想的效果。
和方法一相比,邊緣去噪的效果更好也更明顯,這是因為進行濾波的灰度值中已經(jīng)是經(jīng)過中值濾波的灰度值,是不含有椒鹽噪聲的灰度值,因此在進行邊緣去噪時不管使用1×2 或1×3 模板,還是1×4 模板能夠達到去噪平滑。
為了比較幾種方法的在運行效率上的不同,本文從各種算法在去噪時的運行時間上進行對比。電腦配置 為 Intel Core i3- 2348M,CPU @ 2.3GHz,RAM 4.00GB,64 位操作系統(tǒng)。表1-2 列出了不同分辨率的圖像進行中值濾波去噪的運行時間。
表1 396×396 像素處理時間(單位:ms)
表2 978×550 像素處理時間(單位:ms)
從表1 可以看出,對于較小的圖像不管采用哪種算法進行中值濾波去噪時的時間使用幾乎一樣,但是當圖像分辨率提高,處理的像素個數(shù)變多時的運行時間開始有差異(表2),同時隨著窗口的增大不管采用哪種算法其運行時間都會隨之增大。對于方法一和方法三,由于采用的是相鄰幾個像素取均值的處理方式,隨著相鄰像素個數(shù)的增加,其處理時間也隨之增加。對于方法二,其采用的是2×2 的矩形窗口為模板,從這次運行時間來看要比另外兩種方法短,可見在三種方法中方法二更適合作為邊緣去噪的主方法。
作為一種經(jīng)典的去噪方法,中值濾波一直以來都是去除椒鹽噪聲的主要方法,很多算法的提出與改進也都是基于中值濾波。本文在實現(xiàn)中值濾波的前提下,針對邊緣存在的椒鹽噪聲提出了去除椒鹽噪聲的三種算法,方法一和方法三又包含三種去噪方式??偟膩碚f,方法二和方法三去噪效果最好,能達到理想的去噪效果。方法一由于在去噪過程中依賴了大量的噪聲,因此去噪效果不是很理想,在實際去噪過程中依然存在大量噪聲。方法二和方法三在實際去噪時都能明顯的去除噪聲,不失為一種去噪的好方法,特別是方法二,從實際處理速度上來說,方法二更加適合作為邊緣去噪的方法。由于在進行邊緣去噪時依然采用了1×2、1×3、1×4 或2×2 的模板進行去噪,因此在實際處理中還存在個別像素得不到處理的情況。以方法一中的1×2 模板為例,每次進行賦值為模板第一個像素的位置,當模板移動到最右側時,右上角的像素得不到賦值,依然保持原來像素的灰度值。圖像上得不到賦值的像素位置總共兩個(右上角和右下角),因此本文還有可改進的地方。