標籤:影像處理 映像去噪 非線性處理 非線性濾波器
1.非線性處理與線性處理的區別
上一篇博文的內容,是關於均值濾波器的。比如說像算術均值濾波器,幾何均值濾波器。這以類型的濾波器的常常被用於剔除某些不需要的頻率成分,或者選擇需要的頻率成分,從而達到去噪的目的。這樣的濾波器,被稱為線性濾波器。
然而,還有一些特殊濾波器,他們被稱為非線性濾波器。其代表為中央值濾波器。所謂中央值濾波器,就是將一定範圍內的資料(對於映像而言,是像素的灰階值)進行排序,選擇中央值作為濾波器的輸出。
中央值濾波器的目的並不是頻率成分的選擇,而是求root訊號。關於root訊號的定義,[文獻1]中是這樣給出的。
------------------------
定義:對於任意訊號,使用中央值濾波器進行有限次處理,直到所得到的限號不變為止。中央值濾波器處理前後,如果這個訊號列沒有任何變化,那麼將這個訊號列稱為這個濾波器的root訊號。
------------------------
對於中央值濾波器來講,可以完美去除被椒鹽雜訊汙染的root訊號。對於root訊號,有如下的性質。對於以下定理的證明與詳細說明,請參考[文獻2][文獻3]。
=============
定理1:如果訊號列{x(i)}是單調遞增或單調遞減的,那麼對於任何尺寸的中央值濾波器,這個訊號列都是root訊號。
定理2:如果訊號列{x(i)}是在從i開始的m個訊號之間的局部單調訊號的話,那麼對於尺寸為N=2M+1(M<=m-2)的中央值濾波器,這樣的訊號為這個濾波器的root訊號。
=============
2.幾個典型的非線性濾波器 2.1 中央值濾波器 (Median Filter)
正如第一節所敘述的,中央值濾波器可以有效去除椒鹽雜訊,並且不會使得映像模糊。我們將一副映像染上椒鹽雜訊,然後使用不同尺寸的中央值濾波器去進行處理。所得的結果的畫質使用SSIM去評價。
首先,將映像染上鹽粒密度為0.15,胡椒密度為0.15的椒鹽雜訊,使用3x3,5x5,7x7和9x9四種不同尺寸的中值濾波器去處理映像。所得到的結果,如下表所示。
由所示,可以看出,所用濾波器尺寸不同,得到的結果是不同的,尺寸較大的濾波器得到了不太好的結果。隨著迴圈次數的增加,映像的SSIM逐漸層化,最後趨近於穩定。下面是迴圈次數為30時候,4種尺寸濾波器得到的結果。
為了驗證雜訊與實驗結果的影響,將映像染上鹽粒密度為0.35,胡椒密度為0.35的椒鹽雜訊,在進行濾波實驗,可以得到如下曲線。
實驗結果給出,尺寸較小的的中值濾波器,其收斂到root訊號較為緩慢,其次,對於高雜訊的映像,其修複結果是不太好的。
總結上述實驗,可以得到三個有用的結論。
1.中央值濾波器在處理過程中,不斷在尋找root訊號。反覆數回之後,其結果收斂,基本不改變。
2.對於不同的映像,不同的雜訊,最適合本幅映像的中央值濾波器的尺寸是不同的。並不是尺寸越小越好。
3.尺寸小的濾波器,收斂速度慢。反之,尺寸大的濾波器,收斂較快。
2.2 自適應中央值濾波器 我們要很好的使用中央值濾波器,只有一個要點!就是找一個最適合的濾波器尺寸,使得原圖就是這個濾波器的root訊號,那麼,就可以得到一個完美的結果(當然,最適合的濾波器是不存在的)。那麼,這裡就可以有個想法了,在執行濾波器操作的時候,儘可能多的嘗試各種尺寸,選擇一個最適合的,讓原圖很接近這個尺寸的濾波器的root訊號。這樣的話,就可以得到一個不錯的結果了。
當然,之對於椒鹽雜訊的話,還可以加入這樣一個功能,由於雜訊的灰階值是已知的(鹽粒雜訊為1,胡椒雜訊0),那麼只有當中央值不是0或者1的時候,濾波器生效,否則,擴大濾波器尺寸。
歸納上述思想,可以得到如下的虛擬碼。
START: S_xy = read(f(x,y),[size_S_xy]); z_min = min(S_xy); z_max = max(S_xy); z_med = median(S_xy);LOOP A : A_1 = z_med - z_min; A_2 = z_med - z_max; if ((A_1 >0) and (A_2 < 0)) goto LOOP B; else size_S_xy++; goto START; if (size_S_xy <= size_max) g(x,y) = z_med; goto NEXT;LOOP B : B_1 = f(x,y) - z_min; B_2 = f(x,y) - z_max; if ((B_1 >0) and (B_2 < 0)) g(x,y) = f(x,y) ; goto NEXT; else g(x,y) = z_med; goto NEXT;NEXT : x,y移動到下一個像素點 if (x > x_max)and(y>y_max) return; else goto START;
來看看這個濾波器的效果,將映像加一個很強的雜訊椒鹽雜訊。鹽粒密度為0.3,胡椒密度為0.3。同時將同樣的映像,使用5x5的中央值濾波器。兩個濾波器的不同,還是很容易看出來的。
2.3 最大值濾波器與最小值濾波器 最大值濾波器與最小值濾波器這兩個濾波器,跟中央值濾波器有些類似。同樣是一個目的,用於尋找root訊號,只不過,最大值濾波器可以用於去除鹽粒雜訊,相反,最小值濾波器可以用於取出胡椒雜訊。同樣的,最大值與最小值濾波器不適用於去除,同時含有鹽粒雜訊與胡椒雜訊的圖片。
由於這個很簡單,結果就不貼了。
2.4 中點濾波器(midpoint filter)
中點濾波器,糅合了均值濾波器和非線性排序處理。這樣的濾波器對於去除高斯雜訊與均勻雜訊有很好的效果。
我們使用這個濾波器,與平均濾波器做個比較吧。其結果顯示在。
圖片上,縱軸表示畫質SSIM,橫軸表示雜訊的方差。綠線表示中點濾波器,紅線表示算術濾波器。可以看出,均勻雜訊上,中點濾波器的效能還是優於算術平均濾波器的。(當然,這可能跟選用的評價映像有關,但是基本是這個趨勢)。
2.4 修正的阿爾法均值濾波器 從很小的時候開始,對唱歌節目就有這樣的一個映像,評委打分的時候,總是要去掉一個最高分,去掉一個最低分,然後求均值。這個是個什麼樣的原理呢?其實這是一個很典型的濾波器,可以更好的反應一個選手的水平。 在影像處理領域,也有一個類似的處理方法,其運算式如下。 簡單的理解一下這個濾波器,首先,我們將濾波範圍 的個資料進行排序,從大到下的順序去除個資料,從小到大的順序去除個資料。將剩下的資料計算均值。
這樣的濾波器,很擅長去除椒鹽雜訊與其他類型雜訊一起汙染過的圖片。依然是實驗,首先將圖片染上鹽粒密度為0.1,胡椒密度為0.1的椒鹽雜訊。然後,再將這幅映像染上高斯雜訊。在將圖片進行去噪。得到的結果如下所示。
可以出,對於複數的雜訊,這樣的濾波器的效果是最好的。
3.自適應中值濾波器的Matlab代碼 由於本次代碼都比較簡單,主要是概念上的理解,所以,代碼我也就貼個自適應濾波器的代碼就完事吧!
下一篇博文,會說到去卷積處理。
參考文獻
[文獻1]非線形ディジタル訊號処理 ,棟安実治 ?田口亮 著,システム制禦情報學會,朝倉書店,1999年03月20日
[文獻2]Tyan, S. G. "Median filtering: Deterministic properties." Two-Dimensional Digital Signal Prcessing II. Springer Berlin Heidelberg, 1981. 197-217.
[文獻3]Gallagher Jr N C, Wise G L. A theoretical analysis of the properties of median filters[J]. Acoustics, Speech and Signal Processing, IEEE Transactions on, 1981, 29(6): 1136-1141.
原文發於部落格:http://blog.csdn.net/thnh169/
=============更新日誌===================
2014 - 7 - 17 修正了一些格式錯誤