这个里面有个小知识点,要想计算上面的系数,需要知道高斯函数的标准差σ (sigma),还需要知道选3*3还是5*5的模板,也就是模板要多大,实际应用的时候,这两者是有关系的,根据数理统计的知识,高斯分布的特点就是数值分布在(μ—3σ,μ+3σ)中的概率为0.9974,也就是模板的大小其实就是6σ这么大就OK了,但是6σ可能不是奇数,因为我们一定要保证有核心。canny算子边缘检测所以模板窗口的大小一般采用1+2*ceil(3*nSigma) ceil是向上取整函数,例如ceil(0.6)=1。
计算得到模板,那就是直接卷积就OK,卷积的意思就是图像中的点附近的模板大小区域乘以高斯模板区域,得到的结果就是该点卷积后的结果。卷积的核心意义就是获取原始图像中像模板特征的性质。插一句话,目前深度学习中很火的一个卷积神经网络CNN,就是利用卷积的原理,通过学习出这些卷积模板来识别检测。
代码如下:
////////第二步:高斯滤波
///////
double nSigma=0.2;
int nWindowSize=1+2*ceil(3*nSigma);//通过sigma得到窗口大小
int nCenter=nWindowSize/2;
int nWidth=OpenCvGrayImage->width;
int nHeight=OpenCvGrayImage->height;
IplImage * pCanny;
pCanny=cvCreateImage(cvGetSize(ColorImage),ColorImage->depth,1);
//生成二维滤波核
double *pKernel_2=new double[nWindowSize*nWindowSize];
double d_sum=0.0;
for(int i=0;i<nWindowSize;i++)
{
for (int j=0;j<nWindowSize;j++)
{
double n_Disx=i-nCenter;//水平方向距离中心像素距离
double n_Disy=j-nCenter;
pKernel_2[j*nWindowSize+i]=exp(-0.5*(n_Disx*n_Disx+n_Disy*n_Disy)/(nSigma*nSigma))/(2.0*3.1415926)*nSigma*nSigma;
d_sum=d_sum+pKernel_2[j*nWindowSize+i];
}
}
for(int i=0;i<nWindowSize;i++)//归一化处理
{
for (int j=0;j<nWindowSize;j++)
{
pKernel_2[j*nWindowSize+i]=pKernel_2[j*nWindowSize+i]/d_sum;
}
}
//输出模板
for (int i=0;i<nWindowSize*nWindowSize;i++)
{
if (i%(nWindowSize)==0)
{
printf("\n");
}
printf("%.10f ",pKernel_2[i]);
}
//滤波处理
for (int s=0;s<nWidth;s++)
{
for (int t=0;t<nHeight;t++)
{
double dFilter=0;
double dSum=0;
//当前坐标(s,t)
//获取8邻域
for (int x=-nCenter;x<=nCenter;x++)
{
for (int y=-nCenter;y<=nCenter;y++)
{
if ((x+s>=0)&&(x+s<nWidth)&&(y+t>=0)&&(y+t<nHeight))//判断是否越界
{
double currentvalue=(double)OpenCvGrayImage->imageData[(y+t)*OpenCvGrayImage->widthStep+x+s];
dFilter+=currentvalue*pKernel_2[x+nCenter+(y+nCenter)*nCenter];
dSum+=pKernel_2[x+nCenter+(y+nCenter)*nCenter];
}
}
}
pCanny->imageData[t*pCanny->widthStep+s]=(uchar)(dFilter/dSum);
}
}
cvNamedWindow("GaussImage",0);
cvShowImage("GaussImage",pCanny); //显示高斯图
cvWaitKey(0);
cvDestroyWindow("GaussImage");
View Code
本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/jisuanjixue/article-37359-3.html
啊啊啊啊啊啊啊