OpenCV 高斯濾波實現

2021-08-15 14:43:16 字數 1518 閱讀 7325

高斯濾波是一種線性平滑濾波,適用於消除高斯雜訊,廣泛應用於影象處理的減噪過程。通俗的講,高斯濾波就是對整幅影象進行加權平均的過程,每乙個畫素點的值,都由其本身和鄰域內的其他畫素值經過加權平均後得到。

在影象處理中高斯濾波一般有兩種實現方式:一種是用離散化視窗滑窗卷積,另一種是通過傅利葉變換。最常見的就是第一種滑窗實現,只有當離散化的視窗非常大,用滑窗計算量非常大的情況下會考慮基於傅利葉變換的方法。

在進行高斯濾波處理時就可以選擇不同的方差值來對影象進行相應的操作,值越大影象越模糊。

高斯濾波器對於服從正太分布的雜訊非常有效。

一維高斯函式如下:

二維高斯函式如下:

**實現:

//高斯濾波

void mygaussianblur(const cv::mat image, cv::mat &result, int besarkernel, double delta)

result.at(i - kerr, j - kerr)[0] = cv::saturate_cast(pix1);

result.at(i - kerr, j - kerr)[1] = cv::saturate_cast(pix2);

result.at(i - kerr, j - kerr)[2] = cv::saturate_cast(pix3);

} }}

執行結果:

opencv提供了gaussianblur()函式對圖形進行高斯濾波,其原型如下:

void gaussianblur(inputarray src, outputarray dst, size ksize, double sigmax, double sigmay = 0)
inputarray src: 輸入影象

outputarray dst: 輸出影象,與輸入影象有相同的型別和尺寸

size ksize: 高斯核心大小,這個尺寸與前面兩個濾波kernel尺寸不同,ksize.width和ksize.height可以不相同但是這兩個值必須為正奇數,如果這兩個值為0,他們的值將由sigma計算。 

double sigmax: 高斯核函式在x方向上的標準偏差 

double sigmay: 高斯核函式在y方向上的標準偏差,如果sigmay是0,則函式會自動將sigmay的值設定為與sigmax相同的值,如果sigmax和sigmay都是0,這兩個值將由ksize.width和ksize.height計算而來。具體可以參考

getgaussiankernel()

函式檢視具體細節。建議將size、sigmax和sigmay都指定出來。

**實現:

int main()

執行結果:

OpenCV 高斯濾波

一 前言 關於高斯濾波在我的前一篇文章 數字影象基本處理演算法 中有所談及那篇只是介紹了高斯濾波的應用,現在這一篇將著重簡介高斯濾波的原理和應用,一探個究竟!二 啥是高斯濾波?好吃麼?高斯濾波,說白了就是乙個函式來對輸入的訊號 其實這裡的訊號就是影象的畫素值 進行計算然後得出結果作為該訊號的值,只不...

opencv高斯濾波原理

1 一維高斯分布 2 二維高斯分布 3 高斯濾波一般使用的 二維零均值 的高斯分布函式,通過高斯分布函式求出模板係數,例如乙個3 3的模板 以模板的中心位置為座標原點進行取樣,其中模板各個座標位置如下圖,x軸水平向右,y軸垂直向下,x,y 表示 4 將各個位置的座標代入二維零均值高斯分布函式,計算出...

opencv 輪廓高斯濾波平滑

乙個小測試的題目 在影象上點選,找到與點選處相鄰的顏色相近的點集合,對該點集合提取輪廓,對該點集合輪廓平滑處理,顯示處理結果。include include using namespace std using namespace cv method findregion 漫水填充 fullname ...