高斯濾波器是影象處理中經常用到的濾波器,其濾波核函式為:
為簡單起見,這裡省略了歸一化因子。
由的可分離特性:
得:其中為輸入影象,為輸出影象,為濾波模板半徑。根據準則,通常使。
由上式可見,我們可以將二維高斯濾波分解為兩次一維高斯濾波。
對於二維高斯濾波,設影象大小,高斯模板大小,處理每個畫素點需要次操作,則演算法複雜度。若使用一維高斯核先對影象逐行濾波,再對中間結果逐列濾波,則處理每個畫素需要次操作,演算法複雜度,隨著濾波模板尺寸的增大,演算法優勢越明顯。
程式:#include "stdafx.h"
#include
#include
//邊界處理
int edge(int i,int x,int max)
//二維高斯處理灰度影象
extern "c" _declspec(dllexport) void gaussfiltergray(unsigned char *a, int nwidth, int nheight, int stride,double dsigma)
} //歸一化
for(int i=0; i}
//逐畫素處理
for(int inx=0,i=0; i}
a[inx]= max(min(255,dfilter),0);
} }
deletepdkernel;
deletebuffer;
}//一維高斯處理灰度影象
extern "c" _declspec(dllexport) void gaussfiltergray1d(unsigned char *a, int nwidth, int nheight, int stride,double dsigma)
//歸一化
for(int i=0; i//橫向濾波
for(int inx=0,i=0; ibuffer[inx]= max(min(255,dfilter),0);//中間結果放在buffer中
} }
//縱向濾波
for(int i=0;ia[j*stride+i]= max(min(255,dfilter),0);}}
deletepdkernel;
deletebuffer;
}//二維高斯處理彩色影象
extern "c" _declspec(dllexport) void gaussfiltercolor(unsigned char *a, int nwidth, int nheight, int stride,double dsigma)
} //歸一化
for(int i=0; i}
for(int i=0; i}
index=i*stride+j*step;
a[index]=max(min(dfilterb,255),0);
a[index+1]=max(min(dfilterg,255),0);
a[index+2]=max(min(dfilterr,255),0);
} }
deletepdkernel;
deletebuffer;
}//一維高斯處理彩色影象
extern "c" _declspec(dllexport) void gaussfiltercolor1d(unsigned char *a, int nwidth, int nheight, int stride,double dsigma)
//歸一化
for(int i=0; i//橫向濾波
for(int i=0; iindex=i*stride+j*step;
buffer[index]=max(min(dfilterb,255),0);//中間結果放在buffer中
buffer[index+1]=max(min(dfilterg,255),0);
buffer[index+2]=max(min(dfilterr,255),0);
}
} //縱向濾波
for(int i=0;iindex=j*stride+i*step;
a[index]=max(min(dfilterb,255),0);
a[index+1]=max(min(dfilterg,255),0);
a[index+2]=max(min(dfilterr,255),0);}}
deletepdkernel;
deletebuffer;
}演示結果:
上面對一幅512*512的彩色影象,基本的高斯演算法耗時1469ms,而快速高斯耗時439ms。選取的,此時的濾波模板大小為。
快速高斯濾波
高斯濾波器是影象處理中經常用到的濾波器,其濾波核函式為 為簡單起見,這裡省略了歸一化因子。由得 其中由上式可見,我們可以將二維高斯濾波分解為兩次一維高斯濾波。對於二維高斯濾波,設影象大小 程式 include stdafx.h include include 邊界處理 int edge int i,...
OpenCV 高斯濾波
一 前言 關於高斯濾波在我的前一篇文章 數字影象基本處理演算法 中有所談及那篇只是介紹了高斯濾波的應用,現在這一篇將著重簡介高斯濾波的原理和應用,一探個究竟!二 啥是高斯濾波?好吃麼?高斯濾波,說白了就是乙個函式來對輸入的訊號 其實這裡的訊號就是影象的畫素值 進行計算然後得出結果作為該訊號的值,只不...
高斯濾波001
高斯濾波 高斯濾波去噪方法就是對整幅影象畫素進行加權然後取平均的過程,影象中的每乙個畫素點的灰度值,都由其本身和鄰域內的其他畫素點的灰度值經過加權平均後得到。高斯濾波演算法的具體操作步驟是 用乙個固定大小的模板 或稱卷積 掩模 平滑數字影象中的每乙個畫素點,用模板大小確定的鄰域內畫素灰度值的加權平均...