天天看點

【圖像預處理】高斯濾波 + 代碼注釋

含義:高斯濾波就是對整幅圖像進行權重平均的過程,每一個像素點的值,都由其本身和鄰域内的其它像素值經過權重平均後得到。

作用:高斯濾波是一種線性平滑濾波,适用于消除高斯噪聲,廣泛應用于圖像處理的減噪過程。

高斯噪聲:首先,噪聲在圖像當中常表現為引起較強視覺效果的孤立像素點或像素塊。簡單來說,噪聲的出現會給圖像帶來幹擾,讓圖像變得不清楚。高斯噪聲就是它的機率密度函數服從高斯分布(即正态分布)的一類噪聲。如果一個噪聲,它的幅度分布服從高斯分布,而它的功率譜密度又是均勻分布的,則稱它為高斯白噪聲。高斯白噪聲的二階矩不相關,一階矩為常數,是指先後信号在時間上的相關性。

【圖像預處理】高斯濾波 + 代碼注釋

注:σ的大小決定了高斯函數的寬度。

高斯核計算

理論上,高斯分布在所有定義域上都有非負值,這就需要一個無限大的卷積核。實際上,僅需要取均值周圍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);
}
           

繼續閱讀