鄭 亮, 方恩印, 朱 明
(1.上海出版印刷高等??茖W校, 上海 200093;2.河南工程學院 材料與化學工程學院, 鄭州 450001)
椒鹽噪聲又稱脈沖噪聲,在圖像中的表現(xiàn)形式就是隨機分布的黑(椒噪聲)白(鹽噪聲)色像素點。椒鹽噪聲的產生一般是由圖像傳感器,傳輸信道或解碼系統(tǒng)的故障和缺陷造成的[1]。由于椒鹽噪聲點與圖像邊緣的正常像素點往往具有同樣的突變特征,因此為了保護邊緣細節(jié),最先使用非線性的中值濾波算法來去除椒鹽噪聲[2],后來又在此基礎上提出了極值中值算法[3],加權中值濾波算法[4-5]和自適應中值濾波算法[6-7]。這些方法在濾除噪聲點的同時也會修改到正常像素點,從而造成圖像的模糊。針對這些問題,近年來又提出了開關中值濾波的思想[8-11],這類方法首先需要判斷當前像素是噪聲點還是正常信號點,然后僅對噪聲點進行處理,這樣可以最大程度地防止邊緣模糊[12-15],這種思路目前已經被廣泛采用。
本文首先從信號局部差異性的思路入手設計了一種基于灰度范圍準則和局部差別準則的椒鹽噪聲檢測算法,又從信號方向差異性的思路入手設計了一種基于灰度范圍準則和方向差別準則的椒鹽噪聲檢測算法。這兩種算法均屬于二級噪聲檢測方法,第一級的檢測手段都借助了灰度范圍準則,這是一種簡單的極值判斷方法,兩種算法的不同點體現(xiàn)在第二級檢測方法。在方法評價部分,首先通過分析和試驗得出了兩種算法的最佳參數(shù)設置,然后借助PSNR值測試了兩種算法對不同噪聲密度的測試圖像的去噪效果,比較和分析了兩種算法的效果和特點,最后,通過測試兩種算法的計算效率,分析了它們的算法結構。
椒鹽噪聲是一種脈沖噪聲,被椒鹽噪聲污染的像素值往往位于像素極值點0或255附近。但如果將所有像素極值點都當作噪聲點進行濾除,那么圖像中一些未被噪聲污染的正常極值區(qū)域,例如圖像邊緣中的像素點就會被誤認為是噪聲點,使噪聲誤檢率顯著提高,從而破壞了圖像的正常邊緣區(qū)域。因此,僅僅通過像素極值來判斷其是否為椒鹽噪聲點是不可靠的,被判斷為極值點的像素只能作為可疑噪聲點,需要再對其進行第二級的檢測。本文設計的第一級檢測便是基于灰度范圍準則。假設圖像的灰度范圍是[Lmin,Lmax],如果像素的灰度值在[Lmin,Tg]或[Lmax-Tg,Lmax]范圍中,則此像素點可能受到椒鹽噪聲的污染,并將此像素點作為可疑噪聲點,其中Tg是閾值。該值設置的越大,極值像素點就越有可能被判斷為可疑噪聲點。
為了降低誤檢率,保護圖像邊緣,對可疑噪聲點的第二級檢測基于局部差別準則。由于受椒鹽噪聲污染的像素點往往是較為孤立的,它與鄰域內大多數(shù)像素的差值都很大。因此設置閾值Tv用以判斷可疑噪聲點與其鄰域內像素間的灰度差值是否足夠大,設置閾值Tn用以判斷與可疑噪聲點灰度差值足夠大的鄰域像素個數(shù)是否足夠多。若可疑噪聲點滿足式(1),則認為該像素點被椒鹽噪聲污染。將可疑噪聲點(x,y)處像素的鄰域表示為N(x,y),本文選擇5×5的鄰域窗口尺寸。該鄰域內像素點(s,t)處的像素值為f(s,t),#[.]代表滿足條件的像素點個數(shù),于是可以將上述兩個準則用式(1)統(tǒng)一表示。
(1)
圖1 5×5尺寸的中值濾波窗口Fig.1 A median filtering window for 5×5 size
在檢測出某像素點為椒鹽噪聲點后,為了更好地保留圖像細節(jié),本文采用中值濾波對噪聲點進行濾除。在設置濾波窗口時,由于尺寸大的窗口計算量大,而尺寸小的窗口可以更好地保護細節(jié)。因此出于這兩個因素折中的考慮,本文使用5×5尺寸的窗濾波口,如圖1所示。為了排除窗口內周圍噪聲點對濾波結果的干擾,在中值濾波前,首先要將窗口內已經判定為椒鹽噪聲的像素點去除,不讓其參與該窗口內的像素值排序。然后將窗口內19個正常的像素點進行排序,取中值賦給窗口中心的噪聲點像素,若排序像素點個數(shù)是偶數(shù),則取中間兩個像素點的均值賦給中心像素。
圖2 5×5濾波窗口和9個噪聲檢測區(qū)域Fig.2 A filtering window for 5×5 size and the nine detecting areas
在基于信號方向差異性的椒鹽噪聲二級檢測中,其第一級檢測也是基于灰度范圍準則,這與2.1節(jié)的方法相同,但其第二級檢測基于的是方向差別準則。
首先,在5×5的噪聲檢測窗口(圖2(a))中設置9個檢測區(qū)域,包括1個以可疑噪聲點為中心的3×3檢測區(qū)(共8個像素點)及8個以可疑噪聲點為頂點的檢測區(qū)(每個區(qū)共6個像素點),如圖2(b)所示。然后,計算這9個檢測區(qū)中除可疑噪聲點外其它像素點的灰度中值,如式(2)所示。其中,median[]表示對檢測區(qū)中的像素灰度值進行中值計算;fk表示第k個檢測區(qū)中除可疑噪聲點外的其它像素點的灰度值集合,k=1~9;Ak表示第k個檢測區(qū)的灰度中值。如果檢測區(qū)中除可疑噪聲點外參與中值計算的像素個數(shù)為偶數(shù),那么該檢測區(qū)的中值取排序后中間兩個像素點的灰度均值。
Ak=median[fk]
(2)
最后一步是噪聲點的確定,分別計算可疑噪聲點的灰度值“suspicious_gray”與Ak的差值絕對值,并將所有檢測區(qū)對應的差值絕對值“dk”分別與預先設置好的閾值T進行比較,計算差值絕對值大于閾值的個數(shù)“num”,若其大于等于指定數(shù)量“Tnum”,則確定該可疑噪聲點為噪聲點“noise_signal”,否則為正常信號點“normal_signal”。這個過程可以借助MATLAB偽代碼表示,如式(3)所示。
為驗證算法的噪聲檢測和去除效果,本文使用Matlab7.11對該算法進行仿真實驗。本文選擇如圖3所示的4幅測試圖像,并為每幅測試圖像分別加入0.01, 0.03, 0.05,0.07的椒鹽噪聲密度,例如,添加噪聲密度為0.01的Matlab命令是“imnoise(image,'salt & pepper',0.01)”。在基于信號局部差異性的噪聲檢測和去除過程中,根據(jù)椒鹽噪聲的極值特點,可將灰度范圍閾值Tg設定為25。
圖3 實驗所用測試圖像及其噪聲圖像的縮略圖Fig.3 Thumbnails of test images used in evaluating experiments
圖4 邊緣部位像素的椒鹽噪聲檢測案例(“I03”)Fig.4 Case for detecting salt & pepper noise at image-edges (“I03”)
通過分析可知:在Tn值一定的情況下,Tv值的設置不宜過大,這是因為在平緩的亮調區(qū)域存在亮度值也很高的鹽噪聲,在平緩的暗調區(qū)域也存在著亮度值很低的椒噪聲,它們與本區(qū)域內的正常信號點雖然有視覺差別,但相互之間的亮度值相差并不是特別大,此時如果將Tv值設置得過大,那么將無法檢測出這些噪聲點。若Tv設置較小,那么檢測窗口內與中心像素灰度值相差大于閾值Tv的像素數(shù)就會增多,就有可能將邊緣附近的正常信號點誤判為噪聲點,使得噪聲誤檢率增大。在圖4所示的測試圖像“I03”的椒鹽噪聲檢測案例中,對于邊緣部位某一灰度值為227的像素來說,當Tn設置為0.5,Tv為10時,該像素會被誤判為噪聲點,濾波后的像素值變?yōu)?10。但當Tn不變,Tv增大到40時,該像素沒有被誤檢。因此基于大量試驗結果,文本建議將閾值參數(shù)Tn和Tv分別設置在[0.5, 0.7]和[20, 30]的范圍內。
從圖5可以看出:(1)當閾值參數(shù)固定為Tg=25,Tv=20,Tn=0.5時,隨著噪聲密度的提升,無論對于哪幅測試圖像,去噪前后的圖像PSNR值逐漸降低,表明噪聲的去除效果逐漸降低。而隨著噪聲密度的提升,算法的處理時間逐漸增長(為節(jié)省篇幅,未列出具體的程序運算時間),這說明噪聲點數(shù)量的增多也增長了噪聲的檢測和去除時間;(2)從4幅測試圖像所對應的PSNR值分布來看,測試圖像“I01”的去噪效果最好,對應各噪聲密度的PSNR值都能達到40以上,去噪前后的圖像在視覺上幾乎不可分辨。測試圖像“I04”的去噪效果最差。通過視覺觀察和圖像頻譜分析可知,測試圖像“I03”和“I04”的細微邊緣明顯多于“I01”和“I02”。借助圖6的分析可以看出,基于信號局部差異性的椒鹽噪聲檢測極易將圖像中微小邊緣和細節(jié)誤判為噪聲點,如圖6中的兩個局部區(qū)域。以區(qū)域1中像素值為6
圖5 基于信號局部差異性的椒鹽噪聲去除效果(Tg=25, Tv=20, Tn=0.5)Fig.5 Noise-removing effects based on local signal difference (Tg=25, Tv=20, Tn=0.5)
圖6 邊緣和細節(jié)部位像素的椒鹽噪聲檢測案例(“I04”)Fig.6 Case for detecting salt & pepper noise at image-edge and detail (“I04”)
的微小細節(jié)像素為中心像素,在檢測窗口中,中心像素值與鄰近像素值相差20以上的像素占比超過了50%,因此這個正常的細節(jié)像素點被誤判為噪聲點;同理,區(qū)域2中像素值為22的微小邊緣像素也被誤判為噪聲點。這就是測試圖像“I03”和“I04”去噪效果最差的原因。
在基于信號方向差異性的椒鹽噪聲二級檢測中,其第一級檢測也是基于灰度范圍準則,這與2.1節(jié)的方法相同,這里也將灰度范圍閾值Tg設定為25。第二種算法中最關鍵的是閾值參數(shù)“T”和“Tnum”的設定。通過分析可知,閾值參數(shù)“T”的作用類似于2.1節(jié)中的參數(shù)“Tv”,起到控制中心像素與鄰域像素差異度的作用,本文取閾值T=20,而參數(shù)“Tnum”的作用類似于2.1節(jié)中的參數(shù)“Tn”,可以控制局部差異度大的像素在濾波窗口中的占比。通過大量試驗發(fā)現(xiàn):當噪聲密度一定時,隨著“Tnum”值的增大,圖像去噪前后的PSNR值也逐漸增大,當其值增大到6時,再繼續(xù)增大“Tnum”,PNSR值也變化不大,甚至還有可能降低,因此本文取閾值Tnum=6。圖7顯示了不同的“Tnum”值對測試圖像I01的去噪效果。
圖8顯示了基于信號方向差異性的椒鹽噪聲去除效果,算法中的閾值參數(shù)設置如下:Tg=25,T=20,Tnum=6。圖8中的PSNR值分布與圖4
圖7 不同的“Tnum”值對測試圖像I01的去噪效果Fig.7 Noise-removing effects of test image “I01” for different “Tnum” values(Tg=25, T=20, Tnum=2, 4, 6, 8)
相似,即隨著噪聲密度的提升,無論對于哪幅測試圖像,去噪前后的圖像PSNR值逐漸降低,這表明噪聲的去除效果逐漸變差。測試圖像“I01”的去噪效果最好,“I04”的去噪效果最差。通過仔細觀察可以發(fā)現(xiàn):圖8中的PNSR數(shù)據(jù)在總體上要略高于圖4,尤其是對于細微邊緣較多的測試圖像“I03”和“I04”來說,更是如此。這說明在椒鹽噪聲的檢測和去除方面,基于方向差異性的算法要略強于基于局部差異性的算法。注意:在測試圖像“I03”和“I04”的噪聲去除中,仍然會出現(xiàn)邊緣和細節(jié)信號點的誤判問題。
圖8 基于信號方向差異性的椒鹽噪聲去除效果(Tg=25, Tv=20, Tnum=6)Fig.8 Noise-removing effects based on directional difference (Tg=25, Tv=20, Tnum=6)
表1顯示了兩種算法對測試圖像“I01”和“I03”的處理時間,文中算法效率的測試環(huán)境為MATLAB平臺(DELL OptiPlex, Inter(R) Core(TM) i7-4770M CPU@3.40GHZ)。可以看出:方向差異性算法的運算效率與局部差異性算法相當。通過分析可知:兩種算法從原理上看都是將中心可疑像素與周圍鄰域的差異性作為噪聲檢測的準則,可以將方向差異性算法看作是局部差異性算法的特例。另外,兩種算法在結構上都分為噪聲檢測和噪聲去除兩個步驟。因此這兩種算法在結構上非常相似,也具有相似的運算效率。
表1 不同濾波算法對兩幅測試圖像的處理時間Tab.1 Computing times of different algorithms for the two test images (s)
續(xù) 表
開關中值濾波器非常適合用于椒鹽噪聲的檢測和去除。本文設計了一種基于信號局部差異性和一種基于信號方向差異性的椒鹽噪聲檢測算法。它們都屬于兩級噪聲檢測算法,兩者的第一級檢測都是基于灰度范圍準則。它們的主要區(qū)別體現(xiàn)在第二級檢測中,前者基于局部差異性準則,而后者基于方向差異性準則。在算法性能評價部分,首先通過分析和實驗確定兩種算法的最優(yōu)參數(shù)設置;然后,通過對不同噪聲密度的測試圖像去噪來評價兩種算法的去噪效果。評價結果表明:基于方向差異性的算法比基于局部差異性的算法具有更好的性能,且兩種算法的去噪效果都與噪聲密度成反比。需要注意的是,這兩種算法都容易將圖像中的細微邊緣或細節(jié)像素誤判為噪聲點,這是目前開關二級濾波算法存在的主要問題,即在噪聲的檢測過程中,只能避免對圖像中主要邊緣和輪廓像素的誤判,還無法對圖像中的細微邊緣和細節(jié)進行精確判定,這也是開關二級噪聲濾波算法今后的主要改進方向。另外,通過算法效率的測試,可以看出兩種算法具有相似的計算時間,從而驗證了兩者之間的算法結構相似性。