1. 程式人生 > 其它 >高斯卷積核濾波

高斯卷積核濾波

通過文章: 高斯卷積核濾波的實現

我發現:高斯卷積核矩陣的值由矩陣的座標和Sigma標準差決定,也就是說越靠近核矩陣中心的位置,在濾波過程中所佔比重越大。

#include "iostream"  
#include "math.h"  
  
using namespace std;   
using namespace cv;    
  
//******************高斯卷積核生成函式*************************  
//第一個引數gaus是一個指向含有3個double型別陣列的指標;  
//第二個引數size是高斯卷積核的尺寸大小;  
//第三個引數sigma是卷積核的標準差  
//************************************************************* void GetGaussianKernel(double **gaus, const int size,const double sigma); int main(int argc,char *argv[]) { int size=5; //定義卷積核大小 double **gaus=new double *[size]; for(int i=0;i<size;i++) { gaus[i]
=new double[size]; //動態生成矩陣 } cout<<"尺寸 = 3*3,Sigma = 1,高斯卷積核引數為:"<<endl; GetGaussianKernel(gaus,3,1); //生成3*3 大小高斯卷積核,Sigma=1; cout<<"尺寸 = 5*5,Sigma = 10,高斯卷積核引數為:"<<endl; GetGaussianKernel(gaus,5,10); //生成5*5 大小高斯卷積核,Sigma=1; system("pause"
); return 0; } //******************高斯卷積核生成函式************************* void GetGaussianKernel(double **gaus, const int size,const double sigma) { const double PI=4.0*atan(1.0); //圓周率π賦值 int center=size/2; double sum=0; for(int i=0;i<size;i++) { for(int j=0;j<size;j++) { gaus[i][j]=(1/(2*PI*sigma*sigma))*exp(-((i-center)*(i-center)+(j-center)*(j-center))/(2*sigma*sigma)); sum+=gaus[i][j]; } } for(int i=0;i<size;i++) { for(int j=0;j<size;j++) { gaus[i][j]/=sum; cout<<gaus[i][j]<<" "; } cout<<endl<<endl; } return ; }

參考文章:高斯卷積核濾波的實現https://blog.csdn.net/liuxiangxxl/article/details/79024290