含義:高斯濾波就是對整幅圖像進行權重平均的過程,每一個像素點的值,都由其本身和鄰域内的其它像素值經過權重平均後得到。
作用:高斯濾波是一種線性平滑濾波,适用于消除高斯噪聲,廣泛應用于圖像處理的減噪過程。
高斯噪聲:首先,噪聲在圖像當中常表現為引起較強視覺效果的孤立像素點或像素塊。簡單來說,噪聲的出現會給圖像帶來幹擾,讓圖像變得不清楚。高斯噪聲就是它的機率密度函數服從高斯分布(即正态分布)的一類噪聲。如果一個噪聲,它的幅度分布服從高斯分布,而它的功率譜密度又是均勻分布的,則稱它為高斯白噪聲。高斯白噪聲的二階矩不相關,一階矩為常數,是指先後信号在時間上的相關性。
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsICM38FdsYkRGZkRG9lcvx2bjxiNx8VZ6l2cs0TPR10dNRVTzkkeNBDOsJGcohVYsR2MMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2X0hXZ0xCMx81dvRWYoNHLrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZuBnL4gjM3AzM1cTM3EDNwAjMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
注:σ的大小決定了高斯函數的寬度。
高斯核計算
理論上,高斯分布在所有定義域上都有非負值,這就需要一個無限大的卷積核。實際上,僅需要取均值周圍3倍标準差内[]的值,以外部份直接去掉即可。高斯濾波的重要兩步就是先找到高斯模闆然後再進行卷積,高斯模闆(mask)在有的地方也稱作掩膜或者是高斯核。具體案例如下:
假定中心點的坐标是(0,0),那麼取距離它最近的8個點坐标,為了計算,需要設定σ的值。假定σ=1.5,則模糊半徑為1( size = 3 * 3 )的高斯模闆就算如下:
這個時候我們還要確定這9個點加起來為1,這個是高斯模闆的特性,這9個點的權重總和等于0.4787147,是以上面9個值還要分别除以0.4787147,得到最終的高斯模闆。
高斯濾波計算
假設現有9個像素點,灰階值(0-255)的高斯濾波計算如下:
将這9個值加起來,就是中心點的高斯濾波的值。對所有點重複這個過程,就得到了高斯模糊後的圖像。
代碼注釋:
#高斯函數
void GaussianBlur(InputArray src, //輸入圖像
OutputArray dst, //輸出圖像
Size ksize, //核心的大小
double sigmaX, //高斯核函數在X方向的标準偏差
double sigmaY=0, //高斯核函數在Y方向的标準偏差
intborderType=BORDER_DEFAULT )
#include <opencv2/opencv.hpp>
using namespace cv;
int main(int argc,char** argv) {
//載入原圖
Mat image = imread("Gaussian.jpg");
//建立視窗
namedWindow("高斯濾波【原圖】");
namedWindow("高斯濾波【效果圖】");
//進行濾波操作
Mat out;
GaussianBlur(image,out,Size(3,3),0,0);
//顯示
imshow("高斯濾波【原圖】", image);
imshow("高斯濾波【效果圖】", out);
waitKey(0);
return(0);
}