計算攝影學 均值濾波的簡單實現

2022-08-05 07:21:17 字數 1848 閱讀 9142

均值濾波是典型的線性濾波演算法,它是指在影象上對目標畫素給乙個模板,該模板包括了其周圍的臨近畫素,再用模板中的全體畫素的平均值來代替原來畫素值。是較為基礎的濾波演算法。更廣義的均值濾波可以將模板設定為任意大小,只要不超過影象大小即可。

求解影象的均值濾波可以分為如下幾步:

在具體的操作過程中,還必須適當地加上條件控制,例如影象是否讀取成功,或者判斷卷積核的大小是否超過了整個影象。

1、卷積核的求取

由於均值濾波是對周圍的畫素及本身求出平均值並進行替代,其卷積核比較簡單,就是乙個全為1的mat矩陣,利用ones函式即可快速求取:

kernel = mat::ones(height, width, cv_32f) / (float)(height*width); //

均值濾波的核

2、利用 filter2d 函式進行卷積操作

point anchor(-1, -1); //

中間的點

int depth = -1; //

深度和輸入一樣

int delta = 0; //

在處理之後 再加上delta,預設0

kernel = mat::ones(height, width, cv_32f) / (float)(height*width);//

均值濾波的核

filter2d(src, dst, depth, kernel, anchor, delta);

該步直接利用 filter2d 函式進行卷積操作,其中 kernel 為卷積核,anchor 指示的是卷積核的中心點, depth 設定為-1表示輸出影象的位深度與輸入影象一致,最後的 delta 預設設定為0,它表示在儲存目標影象前可選的新增到畫素的值。

這樣就完成了卷積操作。

3、條件控制

對影象讀取成功與否進行判斷,進而對輸入卷積核大小的合理性進行判斷。

//

進行初始判斷

(原始影象)

(均值濾波後影象,卷積核大小取5*5)

最後附上完整**:

#include #include 

using

namespace

cv;using

namespace

std;

intmain()

else

}point anchor(-1, -1); //

中間的點

int depth = -1;//

深度和輸入一樣

int delta = 0; //

在處理之後 再加上delta,預設0

kernel = mat::ones(height, width, cv_32f) / (float)(height*width);//

均值濾波的核

filter2d(src, dst, depth, kernel, anchor, delta);

imshow(

"均值濾波

", dst);

imwrite(output_name, dst);

waitkey(0);

}

基於MATLAB的均值濾波演算法實現

在影象採集和生成中會不可避免的引入雜訊,影象雜訊是指存在於影象資料中的不必要的或多餘的干擾資訊,這對我們對影象資訊的提取造成干擾,所以要進行去雜訊處理,常見的去除雜訊的方法有均值濾波 中值濾波 高斯濾波等,這一篇要實現的是均值濾波。均值濾波的方法是將影象資料生成3x3的矩陣或是5x5等其他模板,然後...

一維中值 均值 高斯濾波的MATLBA實現

中值濾波的 x 0 2047 a load data.txt 執行時data.txt檔案要放到當前目錄 current directory 中 n 5 n為模板長度,值可以改變 y medfilt1 a,n figure subplot 1,2,1 plot x,a xlabel 中值濾波前的序列 ...

計算幾何學簡單的模板

一些定義 include include include include include using namespace std define maxn 1200 define eps 1e 8 struct point po maxn struct line typedef point vecto...