馬逸東,周順勇
(四川輕化工大學(xué) 自動化與信息工程學(xué)院,四川 宜賓 644005)
椒鹽噪聲作為一種常見的圖像噪聲,表現(xiàn)為圖像上隨機(jī)出現(xiàn)的或黑或白的噪聲點(diǎn)。常稱其中的白點(diǎn)為鹽噪聲,黑點(diǎn)為胡椒噪聲。由于胡椒噪聲與鹽噪聲往往在一張圖像上同時出現(xiàn),通常稱其為椒鹽噪聲[1]。
由于椒鹽噪聲點(diǎn)的灰度值往往接近像素灰度值可取值的最小值0或最大值255,與周圍未被污染的圖像像素點(diǎn)灰度值有較大差異,人們往往選用中值濾波算法[2]來處理椒鹽噪聲。該算法能有效地處理椒鹽噪聲,但它不加區(qū)分地對所有像素點(diǎn)進(jìn)行處理也導(dǎo)致了圖像細(xì)節(jié)變得更模糊的問題。針對這一問題,在此算法的基礎(chǔ)上,學(xué)者們相繼提出極值中值算法[3]、加權(quán)中值濾波算法[4-5]、自適應(yīng)中值濾波算法[6-7]等算法。其中的自適應(yīng)中值濾波算法[8]為Hwang和 Haddad提出,原理為通過大小可變的窗口消除噪聲。Lin和Yu則在自適應(yīng)中值濾波算法基礎(chǔ)上提出了一種基于支持向量機(jī)的自適應(yīng)雙通中值濾波器[9]。這些算法在一些情況下能在處理噪聲的同時有效地保護(hù)圖像的邊緣細(xì)節(jié),但在另一些情況下效果并不特別理想。
近年來開關(guān)中值濾波[10-11]的思想被提出。該類思想的核心便是:在對圖像進(jìn)行處理之前,首先判斷哪些像素點(diǎn)是正常信號點(diǎn),哪些信號點(diǎn)是噪聲點(diǎn),然后僅對噪聲點(diǎn)進(jìn)行處理。該思路因?yàn)楸苊饬藢φP盘桙c(diǎn)的處理,可以最大程度地防止邊緣模糊。Jayaraj 和 Ebenezer 提出了一種新的開關(guān)中值濾波算法[12],它基于一維拉普拉斯算子得到的四個卷積的平均絕對值實(shí)現(xiàn)對噪聲嚴(yán)重影響的圖像進(jìn)行恢復(fù)。鐘靈等提出了一種超快速矢量中值濾波方法[13]。該方法在濾波窗口中,用距離均值點(diǎn)最近的向量代替矢量中值濾波方法的輸出,降低傳統(tǒng)矢量中值濾波方法的計(jì)算量。這些開關(guān)中值濾波算法主要利用噪聲點(diǎn)與周圍像素點(diǎn)的灰度值差異信息進(jìn)行噪聲檢測,但這種方法仍然會混淆噪聲點(diǎn)與一部分圖像邊緣,導(dǎo)致最終的圖像處理效果不夠理想。針對該問題,本文提出一種新的濾波算法。該算法首先對信號點(diǎn)進(jìn)行連通性判斷,然后對用中值濾波算法處理識別為噪聲的點(diǎn)。
受椒鹽噪聲污染的像素點(diǎn)有灰度值在像素灰度最大取值255或最小取值0附近的特性。但簡單地將圖像中所有灰度值在255或0附近的像素點(diǎn)都作為噪聲點(diǎn)處理則會破壞圖像的正常邊緣,影響處理最終得到的效果。為了減少計(jì)算量,本文先將不符合椒鹽噪聲特性的像素點(diǎn)從疑似噪聲點(diǎn)中排除,判斷公式如下:
(1)
其中:g1ij為經(jīng)過一級檢測的 0,1 矩陣,fij為表示原始圖像的像素灰度值, 為預(yù)先設(shè)定的閾值(此處取值為10)。
考慮到正常像素點(diǎn)與其周圍的像素點(diǎn)灰度值相近,而椒鹽噪聲點(diǎn)與其鄰接的正常像素點(diǎn)之間存在較大差異,將像素點(diǎn)灰度值與其鄰域灰度值中位數(shù)相減并取其絕對值,當(dāng)該像素點(diǎn)為噪聲點(diǎn)時,可以得到一個較大的值。所以本文將用該方法所求得的差值的絕對值作為第二級檢測的判斷依據(jù),當(dāng)該數(shù)值大于50時,將像素點(diǎn)視為疑似噪聲點(diǎn)。判斷公式如下:
,
(2)
其中:g2ij為經(jīng)過二級檢測的 0,1 矩陣,fij為表示原始圖像的像素灰度值,mij為像素點(diǎn)鄰域灰度值中位數(shù)。
傳統(tǒng)的中值濾波算法原理是用像素點(diǎn)鄰域灰度值的中值替代當(dāng)前像素點(diǎn),而本文則利用鄰域灰度值中值輔助判斷一個點(diǎn)是否是噪聲點(diǎn)。該方法的缺點(diǎn)是只能區(qū)分出部分種類的邊緣像素點(diǎn)與噪聲點(diǎn),在面對一些較尖銳或細(xì)長的邊緣區(qū)域中的像素點(diǎn)的情況,因?yàn)檫@些像素點(diǎn)多面鄰接其他區(qū)域的像素點(diǎn),鄰域灰度值中位數(shù)會與其灰度值有較大差值,該判斷準(zhǔn)則會失效。
針對這一問題,本文在第二級檢測的基礎(chǔ)上考察像素點(diǎn)與周圍區(qū)域的連通性。圖像中尖銳邊緣與椒鹽噪聲的一個最主要區(qū)別便是尖銳邊緣中的像素點(diǎn)與圖像中的一個大塊區(qū)域相連通,而椒鹽噪聲則表現(xiàn)為圖像上的一個孤立的像素點(diǎn)或小黑(白)斑(當(dāng)噪聲密度較高時,噪聲點(diǎn)恰好聚集在一起形成)。
然后本文將利用種子填充法考察疑似噪聲點(diǎn)是否是圖像連通區(qū)域的一部分。核心思路是將疑似噪聲點(diǎn)作為種子,然后將與其相鄰且像素值相近的像素點(diǎn)合并到一個像素點(diǎn)集合中,當(dāng)集合中元素?cái)?shù)量大于設(shè)定閾值時,判斷該像素點(diǎn)為非噪聲點(diǎn)。如果沒有像素滿足條件加入種子點(diǎn)所在區(qū)域或只有有限的幾個點(diǎn)加入的情況,本文視所考察的像素點(diǎn)為噪聲點(diǎn)。
最終用像素點(diǎn)鄰域灰度值的中值替代識別為噪聲的像素點(diǎn)。
按如下步驟遍歷圖像中所有像素:
Step 1:歷遍圖像所有像素點(diǎn),判斷像素點(diǎn)灰度值是否在 [0,δ]或[255-δ,255]范圍中(δ=10)。如果在,將該像素點(diǎn)添加到列表list 1中。
Step 2:歷遍列表list 1中所有像素點(diǎn),計(jì)算每個像素點(diǎn)的灰度值與其八鄰域灰度值中位數(shù)的差值的絕對值。當(dāng)絕對值大于50時,將該像素點(diǎn)添加到列表list 2中。
Step 3:用種子填充法考察疑似噪聲點(diǎn),即按以下處理方法依次處理list 2(疑似噪聲點(diǎn))中的像素點(diǎn)。
在每次運(yùn)行算法前,設(shè)一變量i初始值為1,算法運(yùn)行時種子點(diǎn)所在區(qū)域每增加一個像素點(diǎn),i的值加1,同時將增加的像素點(diǎn)傳入list 3(相似點(diǎn)),當(dāng)i值大于j(j=5)時停止種子填充算法,記錄所有像素點(diǎn)算法終止時的i值,同時將list 3中的點(diǎn)從list 2中刪除(避免重復(fù)判斷,節(jié)省程序運(yùn)算時間)。當(dāng)i值小于等于j時,將list 3中所有像素點(diǎn)傳入列表list 4(噪聲點(diǎn))。
Step 4:歷遍列表list 4中所有像素點(diǎn),用其鄰域灰度值中位數(shù)替代當(dāng)前像素點(diǎn)灰度值。當(dāng)噪聲密度低于0.5時,使用8鄰域;高于0.5時,擴(kuò)大為24鄰域。
按該方法可以有效地去除孤立噪聲點(diǎn)和像素?cái)?shù)量小于5的黑(白)斑。Step 3中的變量i作用是控制生長區(qū)域的大小。畢竟所考察的像素點(diǎn)是正常像素點(diǎn)的情況下,本文不必找出其連通的整個區(qū)域。
為了驗(yàn)證本文算法的有效性,本文選擇圖像處理鄰域的經(jīng)典圖像lena(大小為512×512),給圖像分別加入0.1,0.2,0.3的椒鹽噪聲運(yùn)行程序,然后觀察結(jié)果。
處理結(jié)果如圖1所示,其中的(a)、(b)分別是對加入0.2、0.3的椒鹽噪聲(圖中r表示加入圖像的椒鹽噪聲密度)的圖像處理結(jié)果。可以觀察到圖 1 (a)中有少量噪聲并未得到有效處理。
經(jīng)過實(shí)驗(yàn),可以判斷這些噪聲點(diǎn)未得到有效處理的原因有兩種:(1)在檢測環(huán)節(jié)受其他噪聲的影響未能被有效識別;(2)去噪過程用于替代當(dāng)前像素點(diǎn)的灰度中值也是一個噪聲點(diǎn),導(dǎo)致無法實(shí)現(xiàn)去噪效果。針對這兩種情況,本文只要在處理得到的圖像的基礎(chǔ)上再運(yùn)行幾遍算法即可去除這些噪聲。

圖1 算法處理加噪圖像效果圖
觀察圖 1(b)可以發(fā)現(xiàn),除了圖1(a)中出現(xiàn)的那種孤立噪聲點(diǎn)的情況,還出現(xiàn)了一些更明顯的黑(白)斑。這是因?yàn)楸疚南拗屏薙tep 3中的i值小于5,使得數(shù)目大于5的噪聲點(diǎn)聚集起來的情況得不到有效處理。但考慮這種像素?cái)?shù)量大于5的黑(白)斑相對周圍區(qū)域孤立的特點(diǎn)并未發(fā)生改變。本文可以通過修改j值(i可取到的最大值)的方式來消除這些噪聲性。
為了避免一直要手動調(diào)整j值(i可取到的最大值),本文可以通過循環(huán)使j值自增,依次消除從小到大的噪聲區(qū)域。在Step 4之后,增加Step 5:j=j+5。
對圖像循環(huán)執(zhí)行Step 1~Step 5,直到滿足條件:執(zhí)行Step 4時發(fā)現(xiàn)list 3為空列表(即執(zhí)行Step 3時發(fā)現(xiàn)圖像中沒有噪聲點(diǎn)),此時停止循環(huán),輸出處理好的圖像。
按上述方法改寫算法。用改過的算法重新處理加過噪聲的圖像。觀察被處理圖像,可以發(fā)現(xiàn)經(jīng)過改進(jìn)的算法有效地解決了本文之前遇到的問題。這里只展現(xiàn)之前效果最差的圖1(b)用改寫算法重新處理的效果,處理結(jié)果見圖1(c)。

圖2 不同算法處理加噪圖像效果圖
本文算法為在OpenCV圖像處理函數(shù)庫基礎(chǔ)上,使用python 3.7編寫而成。現(xiàn)為了驗(yàn)證算法效果,選擇512×512大小的lena作為測試圖像,在操作系統(tǒng)為Windows10,CPU為Intel(R) Core(TM) I7-8750H CPU@2.20 GHz,內(nèi)存為8 GB的計(jì)算機(jī)上進(jìn)行仿真實(shí)驗(yàn)。
為了直觀評價(jià)算法效果,現(xiàn)分別用標(biāo)準(zhǔn)中值濾波(Standard median filter, SFM)算法、極值中值濾波(Extreme median filter, EM)算法[14]、自適應(yīng)中值濾波(Improved adaptive median filter, IAM)算法[15]、基于直方圖的加權(quán)均值濾波算法(Histogram weighted filter, HWF)[16]和本文的連通檢測中值濾波算法(Connectivity detection median filter,CDM)分別處理加入0.1,0.3,0.5,0.7,0.9椒鹽噪聲的圖像,可以發(fā)現(xiàn)本文算法處理結(jié)果的視覺效果優(yōu)于其他算法。
圖2中分別展示了對比算法中表現(xiàn)最好的改進(jìn)自適應(yīng)中值濾波算法、基于直方圖的加權(quán)均值濾波(HWF)算法與本文算法處理加入了0.1,0.5,0.9密度的椒鹽噪聲圖像的效果。
圖2中(a)、(b)、(c) 為改進(jìn)自適應(yīng)中值濾波(IAM)算法,(d)、(e)、(f)為基于直方圖的加權(quán)均值濾波(HWF)算法,(h)、(i)、(j)為本文提出的算法分別處理加入了0.1,0.5,0.9密度的椒鹽噪聲(r表示加入圖像的椒鹽噪聲密度)的圖片的效果圖。
可以發(fā)現(xiàn)本文算法在不同噪聲密度條件下表現(xiàn)均好于其他算法。特別是在0.9的噪聲密度的情況下,其他算法不是未能有效地去除噪聲就是得到的圖像嚴(yán)重模糊。相比而言,本文算法在去除噪聲的同時很好地保存了圖像的細(xì)節(jié)。
峰值信噪比(Peak signal-to-noise ratio,PSNR)是一種衡量圖像質(zhì)量的客觀評價(jià)標(biāo)準(zhǔn)[17-20]。一般求得的PSNR 越大,表示濾波效果越好。其計(jì)算公式如下:
,
(3)

本文分別計(jì)算經(jīng)不同算法處理后圖像的PSNR值,并與經(jīng)本文算法處理后得到的圖像的PSNR值進(jìn)行比較。

圖3 不同噪聲密度下各算法的PSNR值
觀察圖3,可以發(fā)現(xiàn)整個噪聲率范圍內(nèi)本文的連通檢測濾波算法效果都要優(yōu)于其他算法。在0.1~0.7噪聲密度情況下,本文算法的PSNR值分別為42,36,33,32 dB,始終比用于其他4個算法中表現(xiàn)最好的HWF算法高3 dB;而在0.9的噪聲密度下,PSNR值為30 dB,較HWF算法高5.5 dB。

表1 各算法運(yùn)行時間
從表1可知,在0.1~0.9的噪聲密度下,本文算法處理噪聲所需時間都要長于其他的4種算法,且所需時間隨著噪聲密度的增加而增加。這是因?yàn)樵诟呙芏仍肼暤那闆r下,本文算法需要增加循環(huán)次數(shù)以消除噪聲點(diǎn)聚集在一起形成的更大的黑(白)斑塊。但即使是在0.9的噪聲密度下,算法的運(yùn)行時間也只是85.54 ms,仍在可接受的范圍內(nèi)。
本文分析了椒鹽噪聲的特性,針對椒鹽噪聲相對孤立的特點(diǎn),提出了一種基于像素連通性判斷的椒鹽噪聲檢測算法。針對在低密度噪聲情況下遇到的椒鹽噪聲點(diǎn)無法除盡問題和高噪聲密度下椒鹽噪聲點(diǎn)聚集為椒鹽噪聲塊問題,分別通過循環(huán)處理和修改種子填充算法的截止條件對算法進(jìn)行優(yōu)化、改進(jìn),最終獲得了良好的濾波效果。該算法避免了不加區(qū)分地處理所有像素點(diǎn),在去除噪聲的同時有效地保護(hù)了圖像的邊緣細(xì)節(jié)。實(shí)驗(yàn)結(jié)果表明,本文提出的算法可以有效處理密度在0~0.9范圍的椒鹽噪聲,且在0.9的噪聲密度下算法可保證30 dB的峰值信噪比。滿足有效去除不同密度范圍內(nèi)的椒鹽噪聲的同時保護(hù)圖像細(xì)節(jié)的要求。