過濾是信號和圖像處理中基本的任務(wù)。其目的是根據(jù)應(yīng)用環(huán)境的不同,選擇性的提取圖像中某些認(rèn)為是重要的信息。過濾可以移除圖像中的噪音、提取感興趣的可視特征、允許圖像重采樣等等。頻域分析將圖像分成從低頻到高頻的不同部分。低頻對應(yīng)圖像強度變化小的區(qū)域,而高頻是圖像強度變化非常大的區(qū)域。在頻率分析領(lǐng)域的框架中,濾波器是一個用來增強圖像中某個波段或頻率并阻塞(或降低)其他頻率波段的操作。低通濾波器是消除圖像中高頻部分,但保留低頻部分。高通濾波器消除低頻部分.

在這一篇文章中,我們將使用OpenCV來實現(xiàn)一些濾波的操作:
關(guān)于模糊與濾波的理論知識,可以去下方的鏈接里去學(xué)習(xí)一下
高斯模糊的原理是什么,怎樣在界面中實現(xiàn)? - mpcv的回答 - 知乎?https://www.zhihu.com/question/54918332/answer/142137732
也可以找一下我之前的博客,里邊也都有記錄。
1:均值濾波
均值濾波是一種線性濾波器,處理思路也很簡單,就是將一個窗口區(qū)域中的像素計算平均值,然后將窗口中計算得到的均值設(shè)置為錨點上的像素值。
該算法有優(yōu)點在于效率高,思路簡單。同樣,缺點也很明顯,計算均值會將圖像中的邊緣信息以及特征信息“模糊”掉,會丟失很多特征。
均值濾波使用簡單的卷積方案來實現(xiàn),既然是計算窗口區(qū)域中的像素和,即使用如下卷積核即可。圖像的邊界部分采用padding操作處理。另外,得到的錨點像素值要進(jìn)行歸一化,即除以窗口尺寸大小。在OpenCV中,我們使用cv.blur()這個函數(shù)即可實現(xiàn)。
2:中值濾波
中值濾波是一種非線性濾波,在處理脈沖噪聲以及椒鹽噪聲時效果極佳,能夠有效的保護(hù)好圖像的邊緣信息。
中值濾波的處理思路很簡單,取卷積核當(dāng)中所覆蓋像素中的中值作為錨點的像素值即可。
如果按照遍歷所有像素,再對卷積核中的像素排序取中值,那么時間復(fù)雜度會很高,需要對中值濾波進(jìn)行改進(jìn)。
中值濾波的改進(jìn)實際上很是很好想的,無非就是一個滑動窗口取中值的問題,每次向右滑動的過程中等于在窗口中新添加添加一列窗口像素,同時減去一列窗口像素,考慮維護(hù)這個窗口中的像素信息變化即可。
在OpenCV中,我們使用cv.medianBlur()這個函數(shù)即可實現(xiàn)。
具體均值,中值的實現(xiàn)代碼:

均值,中值濾波實現(xiàn)結(jié)果如下:

3:高斯濾波
高斯濾波是一種線性濾波,是常用的一種濾波算法,利用二維高斯函數(shù)的分布方式來對圖像進(jìn)行平滑。
高斯濾波的優(yōu)點可以集中在高斯函數(shù)的特點上來看
首先,二維高斯函數(shù)是旋轉(zhuǎn)對稱的,在各個方向上平滑程度相同,不會改變原圖像的邊緣走向。
第二,高斯函數(shù)是單值函數(shù),高斯卷積核的錨點為極值,在所有方向上單調(diào)遞減,錨點像素不會受到距離錨點較遠(yuǎn)的像素影響過大,保證了特征點和邊緣的特性。
第三,在頻域上,濾波過程中不會被高頻信號污染。
有一個地方要注意:
高斯模糊實質(zhì)上就是一種均值模糊,只是高斯模糊是按照加權(quán)平均的,距離越近的點權(quán)重越大,距離越遠(yuǎn)的點權(quán)重越小。通俗的講,高斯濾波就是對整幅圖像進(jìn)行加權(quán)平均的過程,每一個像素點的值,都由其本身和鄰域內(nèi)的其他像素值經(jīng)過加權(quán)平均后得到。
在OpenCV中,我們使用 cv.GaussianBlur()這個函數(shù)來調(diào)用高斯濾波。
具體的實現(xiàn)方法:

實現(xiàn)結(jié)果:
