图像之二维高斯核
2015-01-15 16:32
99 查看
下面的代码是计算二维高斯核,代码是用纯C写的,可移植性应该不错。计算得到的二维高斯核可以用来对图像进行高斯滤波。由于高斯滤波器是可分的,所以可以用一维高斯核得到二维高斯核(其实中间涉及到一些证明,这里直接借用结论),如代码所示。
//==================================================================== // 描述 : 计算二维高斯核 //==================================================================== #include <stdio.h> #include <memory.h> #include <stdlib.h> #include <math.h> const double eps=1e-6;; // 高斯函数 double guassian(double x,double sigma) { return exp(-(x*x)/(2*sigma*sigma+eps)); } // 计算高斯核 void guassiankernel(double* kernel,int size, double sigma) { double sum=0; double* data=kernel; int i; for(i=0;i<size;++i) { double index=(size>>1)-i; if(size&1) // size为奇数 { *(data+i)=guassian(index,sigma); } else // size为偶数 { index-=0.5; *(data+i)=guassian(index,sigma); } sum+=*(data+i); } // 归一化 for(i=0;i<size;++i) { *(data+i)/=sum; } } void matproduct(double a[],double b[],double c[],int m,int n,int p) { int i,j,k; for(i=0;i<m;++i) { for(j=0;j<p;++j) { double sum=0; for(k=0;k<n;++k) { sum+=a[i*n+k]*b[k*p+j]; } c[i*p+j]=sum; } } } void matshow(double a[],int m,int n) { int i,j; for(i=0;i<m;++i) { for(j=0;j<n;++j) { printf("%lf\t",a[i*n+j]); } printf("\n");; } } // 计算二维高斯核 void guassiankernel2d(double* kernel,int sizeX,int sizeY,double sigmaX,double sigmaY) { double *matX=(double *)malloc(sizeX*sizeof(double)); double *matY=(double *)malloc(sizeY*sizeof(double)); guassiankernel(matX,sizeX,sigmaX); guassiankernel(matY,sizeY,sigmaY); matproduct(matX,matY,kernel,sizeX,1,sizeY); free(matX); free(matY); } int main() { int sizeX=4; int sizeY=3; double *kernel=(double *)malloc(sizeX*sizeY*sizeof(double)); guassiankernel2d(kernel,sizeX,sizeY,1,1); matshow(kernel,sizeX,sizeY); free(kernel); return 0; }
相关文章推荐
- 图像滤波之二维高斯核
- 图像滤波之二维高斯核
- 图像之二维高斯核
- 图像之二维高斯核
- 程序员用「美貌」突破二维图像的人脸识别
- 图像处理之高斯模糊
- SSE图像算法优化系列二:高斯模糊算法的全面优化过程分享(二)。
- 数字图像处理_高斯噪声_纯C
- MITK中如何给图像加高斯噪声
- 图像处理之基础---二维卷积运算原理剖析
- 图像处理之高斯一阶及二阶导数计算
- 用Matplotlib绘制二维图像
- 图像处理之二维高斯滤波详解
- 图像模糊--高斯滤波 高斯模糊
- 图像处理之基于一维高斯快速模糊
- 图像处理------添加高斯与泊松噪声 分类: 视频图像处理 2015-07-24 14:58 61人阅读 评论(0) 收藏
- 数字图像处理之二维图像的傅里叶变换(1)
- 高斯图像滤波原理及其编程离散化实现方法
- 两张二维人物图像互相换脸代码
- 高斯图像滤波原理及其编程离散化实现方法