均值濾波是典型的線性濾波演算法,它是指在影象上對目標畫素給乙個模板,該模板包括了其周圍的臨近畫素,再用模板中的全體畫素的平均值來代替原來畫素值。是較為基礎的濾波演算法。更廣義的均值濾波可以將模板設定為任意大小,只要不超過影象大小即可。
求解影象的均值濾波可以分為如下幾步:
在具體的操作過程中,還必須適當地加上條件控制,例如影象是否讀取成功,或者判斷卷積核的大小是否超過了整個影象。
1、卷積核的求取
由於均值濾波是對周圍的畫素及本身求出平均值並進行替代,其卷積核比較簡單,就是乙個全為1的mat矩陣,利用ones函式即可快速求取:
kernel = mat::ones(height, width, cv_32f) / (float)(height*width); //2、利用 filter2d 函式進行卷積操作均值濾波的核
point anchor(-1, -1); //該步直接利用 filter2d 函式進行卷積操作,其中 kernel 為卷積核,anchor 指示的是卷積核的中心點, depth 設定為-1表示輸出影象的位深度與輸入影象一致,最後的 delta 預設設定為0,它表示在儲存目標影象前可選的新增到畫素的值。中間的點
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);
這樣就完成了卷積操作。
3、條件控制
對影象讀取成功與否進行判斷,進而對輸入卷積核大小的合理性進行判斷。
//進行初始判斷
(原始影象)
(均值濾波後影象,卷積核大小取5*5)
最後附上完整**:
#include #includeusing
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...