高斯滤波器原理及其实现
? ? ? ? 高斯濾波器是空間濾波器的一種,學習高斯濾波器,需要空間濾波的知識作為先驗知識(各種數字圖像處理的書中都有介紹,岡薩雷斯的經典教材說的還是比較清楚的,建議看英文版,個人感覺比翻譯過來的更容易理解)。
? ? ? ? 高斯濾波器是一種平滑線性濾波器,使用高斯濾波器對圖像進行濾波,其效果是降低圖像灰度的“尖銳”變化,也就是使圖像“模糊”了。高斯濾波對于抑制服從正態分布的噪聲效果非常好,其代價是使圖像變得“模糊”。當然,有時對圖像進行平滑濾波的目的就是讓圖像變得模糊。
? ? ? ? 高斯濾波的模板是用高斯公式計算出來的。下面是一維和二維高斯分布函數及其函數圖像:
? ? ? ? 一維高斯分布函數: ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 二維高斯分布函數:
? ? ? ? ? ? ? ? ??? ? ? ? ? ? ? ? ? ? ? ?
? ? ? ? 它們的圖像分別為: ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
?? ?
? ? ? ? 那么高斯濾波模板是怎么生成的呢?是通過二維高斯函數計算出來的。例如,我們假設一個高斯模板的長、寬均為5,方差為0.5,那么首先,我們要在模板上建立一個坐標系,其原點就是高斯模板的中心點,如下圖:
? ? ? ? 然后每個模板的坐標就可以確定了:
? ? ? ? ? ? ? ? ? ??
? ? ? ? 每個格子對應的坐標,就是二維高斯分布中的(x,y)坐標的值。現在,我們可以計算出高斯模板上每個坐標位置的系數了。例如:
? ? ? ? (-2,2)上的權值:W =?,把pi = 3.14,??σ=0.5,x=-2,y=2帶入上式,獲得(-2,2)處的權值。
? ? ? ?同理,可以計算 其他位置的權值。
? ? ? ? 最后獲得一個5*5,標準差σ為0.5的高斯濾波器(經過歸一化以后):
? ? ? ??
? ? ? ? matlab中可以使用fspecial函數實現高斯濾波模板,使用方法為:YourFilter = fspecial('gaussian', [ 5 5], 0.5);
? ? ? ? 在matlab中可以查看fspecial的源代碼,通過open fspecial打開。我之前自己寫了一個matlab版的實現高斯模板的代碼,通過與fspecial的源代碼對比,有些不一樣的地方,而且我的代碼確實不如自帶的快,所以在這里只貼源代碼。
? ? ? ? fspecial函數可以實現多種類型的濾波器,當第一個參數為"gaussian'時,實現的是高斯濾波器,源代碼通過switch判斷用戶想得到哪種類型的濾波器,這里只把與高斯濾波器有關的代碼貼出來,并放在一個函數中,我們把這個函數命名為gaussianFilter。函數的代碼如下:
? ? ? ??
[plain] view plaincopy print?? ??
? ? ? ? ? ? ? ? ? ? ? ? ? ? 原始圖像 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 加入高斯噪聲圖像
? ??
? ? ? ? ?使用5*5,方差為0.5的高斯濾波器濾波 ? ? ? ? ? ? ? ? ? ? ? ? ? ? 使用5*5,方差為1.5的高斯濾波器濾波
? ? ?使用11*11,方差為0.5的高斯濾波器濾波
總結
以上是生活随笔為你收集整理的高斯滤波器原理及其实现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: pandas学习笔记——阅读官方文档
- 下一篇: html5点击按钮出现弹窗 怎么实现_H