1. 程式人生 > >高斯(Gaussian)濾波、中值(Median)濾波與雙邊(Bilateral)濾波的特點

高斯(Gaussian)濾波、中值(Median)濾波與雙邊(Bilateral)濾波的特點

影象預處理過程中,常常會遇到類似這樣問題:有沒有一個“好”的演算法?例如,有沒有一個好的邊緣檢測演算法,或者有沒有一個好的濾波演算法?但通常來說,沒有一個演算法能夠滿足通用性要求,每個演算法都有各自的特點。因此,對於這類問題,最先要問的是:我要解決什麼問題,為什麼我需要一個這樣的演算法?對於人造物體的檢測,可能需要邊緣檢測演算法,因為人造物體中,有規律的邊緣或直線比較常見,但需要調整一些引數;對於非人造物體,可能識別特徵或顏色更合適,這裡並不需要邊緣檢測。這篇文章介紹一下高斯濾波、中值濾波與雙邊濾波的基本特點,實際應用中可能會遇到的一些問題。

高斯濾波

高斯濾波是線性(Linear)濾波的一種,原理是針對影象中的每一個點(Pixel)與高斯核心(Kernel)進行卷積計算,並將計算結果相加,輸出到目標影象中。
高斯濾波的通用性與效能都比較好,並且由於是線性濾波,對於卷積計算過程,可以通過對Kernel的降維,使演算法的時間複雜度由n

2降為n2。另外,在OpenCV中,針對特定尺寸的Kernel,如33, 55, 77都有特殊的實現,使得效能相比其它的Kernel,有額外的提升。

中值濾波

中值濾波屬於非線性(Non-linear)濾波的一種。中值濾波使用一個圍繞當前畫素的矩形,查詢區域內畫素的中值(Median or Middle-Value),並用該中值替換矩形區域內的其它畫素點。中值濾波對於散射噪聲(Shot Noise)的處理比較理想,因為散射噪聲通常與周圍畫素值的差異非常大。但中值濾波的效能一般,因為演算法執行過程中,要使用中值對其它畫素進行替換。而且對於高斯噪聲的處理不理想,不過可以通過追加針對區域畫素最大值與最小值的忽略,來計算中值。

雙邊濾波

如果採用一個基於權重的Kernel和一個更好的排除演算法(如,中值濾波會導致影象的邊緣不清晰,因為中值的選擇很可能基於影象的背景畫素進行),會發生什麼?這個思路就是雙邊濾波的基本想法。雙邊濾波中,輸出畫素基於相鄰畫素的計算的權重值進行,而權重函式的係數基於一個Domain Kernel和Range Kernel計算而來。Domain Kernel通常是高斯Kernel,而Range Kernel用於計算相鄰畫素與中心畫素的相似度。雙邊濾波的效能不是特別好,但對於以上倆種濾波演算法來說,其重要的特點是能夠保持影象的邊緣清晰(高斯濾波會導致畫素移位),這在檢測應用中有重要的意義。