趙夫群
(西安財經大學信息學院 西安 710100)
圖像是一種重要的信息來源,通過圖像分析和處理可以獲取更多的圖像信息內容。由于圖像在傳輸和形成過程中會不可避免地受到各種噪聲的干擾,大大降低了圖像的質量并影響人們的正常閱讀[1~2]。圖像去噪可以消除噪聲引起的不確定性,使人們可以更好地觀查圖像細節。去噪后圖像在進行計算機視覺識別、分割等任務時,效果要遠遠優于使用含噪圖像得到的結果,因此研究有效的圖像去噪算法具有重要的理論和現實意義[3~4]。
目前,有很多國內外學者對圖像去噪做出了研究工作,如Pitts W等[5]提出的MP模型,模仿了神經元的工作原理,通過構造神經網絡數學模型實現圖像去噪;白瑞君等[6]提出了一種改進的Dncnn 圖像去噪模型,解決了原Dncnn梯度方向二次重新確定的問題,同時降低了算法的時間復雜度和空間復雜度;王同罕[7]首次提出將小波變換快速算法應用于信號和圖像的處理與重構,并將其應用于圖像去噪,取得了良好的效果;王世禮等[8]提出一種新的小波閾值去噪算法,并使用模糊控制算法對新閾值中的函數進行實時動態調節,在一定程度上提高了算法的去噪能力;Friedman J H[9]提出了一維和二維圖形的中值去噪算法,有效提高了準確性。
雖然中值濾波在之后得到了廣泛的推廣和應用,但也存在一定的弊端。如,中值濾波算法受濾波窗口尺寸的影響比較大,存在去除圖像噪聲和保持圖像細節之間的矛盾[10~12]。如果中值濾波器的窗口比較小,可以對圖像中的一些細節部分處理的較好,但是對噪點的去除結果不是很好,還是會存在一些噪點。鑒于此,提出一種改進的中值濾波算法,該算法可以根據噪聲點自動調節濾波窗口大小,克服中值濾波不能調整窗口大小的缺點,避免圖像邊緣模糊,實現圖像的有效去噪。
中值濾波是圖像平滑的一種方法,其算法原理是對含噪圖像上的某一個像素點,并以這個像素點為中心劃分好一個矩形鄰域內,對這個矩形鄰域內的像素灰度值進行排序,將排序之后的中位值賦值給這個像素點[13~14]。該算法能夠將一個像素點與周圍像素塊相比將像素更改成接近周圍的像素這樣是可以消除孤立的噪聲點,能達到一定的去噪效果。中值濾波算法原理簡單,相對線性濾波而言,它在一定程度上可以保護細節信息,所以在數字信號領域得到廣泛的應用[15~16]。
例如,一個一維序列為{0,6,5,12,0,9,7} ,那么在進行濾波排序之后這個序列將變為{0,0,5,6,7,9,12} ,其中位值為6,則就將原來的“12”更改為“6”。
中值濾波原理用數學式可以表達為
式中,i∈Z,,m表示序列中的個數,fi表示窗口中心點的值,Yi表示經過排序之后的中位值。
由于可以把數字圖像描述成一個二維的形式,那么對圖像的處理就是對一些二維數據進行操作。這個二維的數字序列相當于二維矩陣,矩陣里面的元素值是每個像素點像素的灰度值。中值濾波算法是用一個含有奇數個點的濾波窗口,對窗口里的數據進行排序,將排序之后的中位值賦值給當前像素點的灰度值,目的就是為了讓與周圍像素差別比較大的像素另取一個與周圍像素比較接近的值,以此來消除圖像中的噪聲點,達到去噪的效果[17]。
中值濾波的具體實現步驟如下[18]:
1)選擇一個(2n+1)×(2n+1)為奇數個點的窗口通常為3×3,利用這個窗口沿著二維圖像進行行方向或者列方向上的移動;
2)在移動時,每次都要對窗口里像素的灰度值進行由小到大的排序;
3)經過排序之后將排序得到的中位數代替當前中心像素的灰度值,以去除圖像中的噪聲。
在圖像去噪領域中,采用普通的中值濾波算法是遠遠不夠的,需要設計一種改進算法來最大程度地解決去噪和保護圖像細節之間的矛盾[19~20]。由于中值濾波算法容易受到濾波窗口大小的影響,因此提出一種可以自動改變濾波窗口大小的改進中值濾波算法。該改進中值濾波算法的窗口尺寸大小會根據算法設定好的范圍進行動態的調整,能夠判斷當前像素點是否是噪聲。
改進中值濾波算法的基本思想為在處理當前像素點時,首先確定該像素點是不是現在窗口下鄰域像素值的最小值或者最大值,因為圖像的噪聲點一般來說都是鄰域像素內的極大值或者極小值。如果是,則使用常規的中值濾波辦法處理這個像素;如果不是,則不進行處理。與中值濾波算法相比,該改進算法增加了判斷像素值是否為最值的步驟,因此對含噪圖像的處理結果可以更加有效地保留圖像的細節特征。
改進型中值濾波算法的具體實現步驟如下:
步驟1:令A1=Smed>Smin,A2=Smed<Smax。若A1、A2都成立,則跳轉到B;否則,增大窗口的尺寸。如果增大后窗口的尺寸≤Smax,則重復步驟A。否則,輸出Smed。
步驟2:令B1=Sxy≤Smin,B2=Sxy≥Smax。如果B1成立或者B2成立,則令Sxy=Smed,否則輸出Sxy。
其中,Smin表示窗口最小灰度值;Smax表示窗口最大灰度值;Smed表示窗口像素的中值;Sxy表示坐標(x,y)處的像素值;Smax濾波窗口的最大尺寸。
步驟1的目的是為了判定窗口下的中位值Smed是不是噪聲點。如果A1、A2都成立,那么Smed就不是噪聲。之后會跳轉至步驟B 判斷現在濾波窗口下的中間像素值Sxy是不是一個噪聲。如果B1成立或者B2成立,則該點Sxy就可以判定為噪聲,這時濾波器會讓Sxy=Smed將窗口里的中值賦值給Sxy;如果不滿足,可以確定Sxy不是一個噪聲點,這時會將原來的值不做改變輸出出來,保證原始的圖像不被破壞。
如果在步驟1 中,得到的Smed不符合條件,就可以判斷得到的中值Smed是一個噪聲。在出現這種情況時就需要增加濾波窗口的大小,讓它在一個更大的區間里找到一個不是噪聲點的中位值,那么跳轉至步驟2;或者當窗口的大小已經到了最大值,那么返回找到的中值。
實驗采用Matlab 作為去噪算法的實驗環境。原始圖像、椒鹽噪聲圖像和高斯噪聲圖像如圖1 所示,對其分別采用維納濾波算法[21]、中值濾波算法[10]以及提出的改進中值濾波算法進行去噪,去噪結果分別如圖2 和圖3 所示,去噪算法的PSNR 值如表1所示。PSNR是目前使用最為廣泛的一種圖像客觀評價指標,其數值越大就表示失真越小,與原圖像更為接近[22]。

表1 各算法分別對椒鹽噪聲和高斯噪聲的PSNR值

圖1 待去噪圖像

圖2 椒鹽噪聲圖像的去噪結果

圖3 高斯噪聲圖像的去噪結果
從圖2、圖3 和表1 的去噪結果可見,提出的改進中值濾波算法對椒鹽噪聲圖像和高斯噪聲圖像的去噪效果均明顯優于普通中值濾波和維納濾波算法的去噪結果。維納濾波算法的去噪結果效果很差,圖像非常模糊,邊緣特征不清晰;普通中值濾波算法的去噪結果中存在較多未被消除的噪聲點,特別是對圖像邊緣部分的去噪效果不佳;而改進中值濾波算法采用了一定的判斷條件來對圖像中的噪聲點進行分析,其濾波窗口根據設定條件改變窗口尺寸,同時還可以判斷濾波窗口中心的像素是不是噪聲,可以在去噪同時保持圖像的邊緣細節特征,是一種較好的圖像去噪方法。因此說,該改進中值濾波算法是一種去噪有效的圖像去噪算法。
改進中值濾波算法能夠自動調節濾波窗口,并判斷當前窗口內的像素點是不是噪聲點。該算法可以在對圖像去噪的同時,有效保持圖像的細節特征,對椒鹽噪聲和高斯噪聲均有良好的去噪能力。這是由于改進中值濾波算法在判斷像素點是否為噪聲點時,只有當前像素點是噪聲點才會把附近鄰域像素點的中位值復制給它,如果不是噪聲點就不會對這個像素點進行處理。而普通中值濾波會對圖像中的所有像素點進行濾波處理,使得圖像的像素點可能會受到破壞。此外,改進中值濾波算法夠動態地改變濾波窗口尺寸,從而同時兼顧保護細節的同時還能去除圖像噪聲,使圖像的處理更加細膩清晰,給人以良好的視覺體驗。但是,該改進中值濾波算法對高斯噪聲的去除效果還有待進一步提高,這些是后續需要改進的地方。