複製鏈接
請複製以下鏈接發送給好友

中值濾波器

鎖定
中值濾波是一種非線性數字濾波器技術,經常用於去除圖像或者其它信號中的噪聲。這個設計思想就是檢查輸入信號中的採樣並判斷它是否代表了信號,使用奇數個採樣組成的觀察窗實現這項功能。觀察窗口中的數值進行排序,位於觀察窗中間的中值作為輸出。然後,丟棄最早的值,取得新的採樣,重複上面的計算過程。
中文名
中值濾波器
外文名
Median filter
領    域
信號處理

中值濾波器技術介紹

在圖像處理中,在進行如邊緣檢測這樣的進一步處理之前,通常需要首先進行一定程度的降噪。中值濾波是圖像處理中的一個常用步驟,它對於斑點噪聲(speckle noise)和椒鹽噪聲(salt-and-pepper noise)來説尤其有用。保存邊緣的特性使它在不希望出現邊緣模糊的場合也很有用。 [1] 

中值濾波器例子

為了演示中值濾波器的工作過程,我們給下面的數組加上觀察窗3,重複邊界的數值:
x=[28063]。
所以,中值濾波輸出信號y將是:
y[1]=Median[2280]=2,
y[2]=Median[2806]=Median[2680]=6,
y[3]=Median[8063]=Median[3680]=6,
y[4]=Median[633]=Median[336]=3,
於是y=[2663],其中y是x的中值濾波輸出。

中值濾波器算法描述

中值濾波器的主要思想是通過入口來遍歷信號入口,用鄰居入口的中值替換每個入口。鄰居的模式被稱為“窗口”,它通過入口滑動,覆蓋整個信號。對於一維信號,最明顯的窗口只是前後幾項,而2D(或更高維)信號(如圖像)則可能有更復雜的窗口模式(如“盒子”或“十字”模式)。請注意,如果窗口中有奇數個條目,則中位數很容易定義:在窗口中的所有條目都按數字排序之後,這只是中間值。對於偶數的條目,有不止一個可能的中位數。

中值濾波器邊界問題

請注意,在上面的例子中,因為第一個值之前沒有條目,所以第一個值和最後一個值一樣重複,以獲得足夠的條目來填充窗口。這是在信號邊界處理丟失的窗口條目的一種方法,但是還有其他的方案具有不同的屬性,在特定情況下可能是優選的:
  • 避免處理邊界,之後有或沒有裁剪信號或圖像邊界,
  • 從信號中的其他地方獲取條目。以圖像為例,可以選擇來自遠水平或垂直邊界的條目,
  • 縮小邊界附近的窗口,使每個窗口都滿了。 [2] 

中值濾波器二維中值過濾偽代碼

簡單的二維中值濾波算法代碼可能如下所示:
allocateoutput PixelValue[imagewidth][imageheight]
allocatewindow[windowwidth*windowheight]
edgex:=(windowwidth/2)roundeddown
edgey:=(windowheight/2)roundeddown
forxfromedgextoimagewidth-edgex
foryfromedgeytoimageheight-edgey
i=0
forfxfrom0towindowwidth
forfyfrom0towindowheight
window[i]:=input PixelValue[x+fx-edgex][y+fy-edgey]
i:=i+1
sortentriesinwindow[]
output PixelValue[x][y]:=window[windowwidth*windowheight/2]
請注意,這個算法:
  • 僅處理一個顏色通道,
  • 採取“不處理邊界”的方法(參見上面有關邊界問題的討論)。

中值濾波器算法實現問題

通常,大部分的計算工作和時間花費在計算每個窗口的中值上。由於濾波器必須處理信號中的每個條目,對於像圖像這樣的大信號,這個中值計算的效率是確定算法運行速度的關鍵因素。上面描述的天真的實現將窗口中的每個條目進行排序以找到中間值;然而,由於只需要列表中的中間值,所以選擇算法可以更有效。此外,某些類型的信號(通常是圖像的情況)使用整數表示:在這些情況下,直方圖因為從窗口到窗口更新直方圖是簡單的,並且找到直方圖的中值並不特別繁瑣,所以中值可以更有效得多。

中值濾波器邊緣保存屬性

中值濾波是一種平滑技術,與線性高斯濾波一樣。所有的平滑技術都能有效去除信號光滑區域或平滑區域的噪聲,但對邊緣產生不利影響。通常,在減少信號中的噪聲的同時,保持邊緣是重要的。例如,邊緣對於圖像的視覺外觀是至關重要的。對於(高斯)噪聲的小至中等水平,中值濾波器在消除噪聲方面明顯好於高斯模糊,同時為給定的固定窗口大小保留邊緣。然而,對於高噪聲,其性能並不比高斯模糊好,而對於散斑噪聲和椒鹽噪聲(衝動噪音),這是特別有效的。因此,中值濾波在數字圖像處理中被廣泛使用。 [3] 

中值濾波器在GIMP中進行中值濾波

在GIMP2.8.2中操作如下:
中值濾波器
中值濾波器(2張)
濾鏡->增強->去除斑點。
不要勾選適應和遞歸,設置黑色水平為-1,白色水平為256。根據需要調節半徑。半徑越大,細節越少。
參考資料
  • 1.    G. R. Arce, "Nonlinear Signal Processing: A Statistical Approach", Wiley:New Jersey, USA, 2005.
  • 2.    E. Arias-Castro and D. L. Donoho, "Does median filtering truly preserve edges better than linear filtering?", Annals of Statistics, vol. 37, no. 3, pp. 1172–2009.
  • 3.    T. Huang, G. Yang, and G. Tang, "A fast two-dimensional median filtering algorithm", IEEE Trans. Acoust., Speech, Signal Processing, vol. 27, no. 1, pp. 13–18, 1979.