最近在做影像處理方面的一些工作,和幾個濾波器打了不少交道,這裡做個總結。濾波器是訊號處理上的概念,但是訊號處理那套理論的應用範圍很廣,我主要用的是在影像處理上的應用。這篇文章主要講濾波器的功能和matlab中的使用方法,至於原理,我也不太懂...
映像常常被強度隨機訊號所汙染.一些常見的雜訊有椒鹽(Salt & Pepper)雜訊、脈衝雜訊、高斯雜訊等。椒鹽雜訊含有隨機出現的黑白強度值,而脈衝雜訊則只含有隨機的白強度值(正脈衝雜訊)或黑強度值(負脈衝雜訊)。與前兩者不同,高斯雜訊含有強度服從高斯或常態分佈的雜訊。
(1)高斯低通濾波器
高斯濾波器是響應脈衝為高斯形狀的濾波器,對於映像來說,高斯濾波器是利用高斯核的一個2維的卷積運算元,用於映像模糊化(平滑,去除細節和雜訊)。在matlab中可以利用函數w=fspecial('gaussian',[5 5],0.8)產生一個高斯核,在這個函數中,第二個參數是窗的大小,第三個參數高斯函數中的那個標準差。下面這個圖展示了這個高斯窗和其二維分布:
可以看出是個高斯函數的樣子。這個過濾器的過濾結果就是每個像素的值變成窗內鄰居像素的加權和,如果看灰階長條圖的話,可以明顯的看出長條圖會變平滑。用此濾波器進行濾波在matlab裡面也非常簡單:g=imfilter(f,w);
(2)均值濾波器
均值濾波器也很簡單,就是像素的值用它窗內鄰居的平均值來代替。w=fspecial('average',5)。主要應用於平滑雜訊,但是跟上面的高斯濾波器比,它的平滑手段顯然更粗暴些,鄰域的值不管遠近一律平等,高斯濾波器還至少根據遠近有些區分。
(3)中值濾波器
中值濾波器就是用窗內的中間值代替該像素的值,也多用於減少雜訊,特別對於椒鹽雜訊有很好的效果。中值濾波器在matlab裡的實現與上面兩個有些不同,它的用法是
g=medfilt2(f ,[r c])。
(4)維納濾波器
相對上面的四個濾波器維納濾波器比較複雜一點,它經常用在複原訊號上,因此也是映像去噪的方法之一,和高斯雜訊和均值雜訊一樣,能起到平滑的效果,效果還會更好一點,因為它能估計這個像素最應該的值的是什麼。這個濾波器原理比較複雜,不在多述,找到相關資料再補充。
maltab已經實現了這個濾波器:g=wiener2(f,[r c])。