}
}
1)生成二维高斯滤波系数
//////////////////////生成一维高斯滤波系数//////////////////////////////////
double*pdKernal_2=newdouble[nWidowSize*nWidowSize];//定义一维高斯核数组
doubledSum_2=0.0;//求和,进行归一化
///////////////////////二维高斯函数公式////////////////////////////////////
////x*xy*y///////////////
////-1*--------------///////////////
////12*Sigma*Sigma///////////////
////----------------e///////////////
////2*pi*Sigma*Sigma///////////////
///////////////////////////////////////////////////////////////////////////
for(i=0;i<nWidowSize;i)
{
for(intj=0;j<nWidowSize;j)
{
intnDis_x=i-nCenter;
intnDis_y=j-nCenter;
pdKernal_2[ij*nWidowSize]=exp(-(1/2)*(nDis_x*nDis_xnDis_y*nDis_y)
/(nSigma*nSigma))/(2*3.1415926*nSigma*nSigma);
dSum_2=pdKernal_2[ij*nWidowSize];
}
}
for(i=0;i<nWidowSize;i)
{
for(intj=0;j<nWidowSize;j)//进行归一化
{
pdKernal_2[ij*nWidowSize]/=dSum_2;
}
}
2)采用高斯核进行高斯滤波,滤波后的数据保存在矩阵pCanny中
intx;
inty;
for(i=0;i<nHeight;i)
{
for(j=0;j<nWidth;j)
{
doubledFilter=0.0;
doubledSum=0.0;
for(x=(-nCenter);x<=nCenter;x)//行
{
for(y=(-nCenter);y<=nCenter;y)//列
{
if((jx)>=0&&(jx)<nWidth&&(iy)>=0&&(iy)<nHeight)//判断边缘
{
dFilter=(double)nImageData[(iy)*nWidth(jx)]
*pdKernal_2[(ynCenter)*nWidowSize(xnCenter)];
dSum=pdKernal_2[(ynCenter)*nWidowSize(xnCenter)];
}
}
}
pCanny[i*nWidthj]=(unsignedchar)dFilter/dSum;
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-33926-5.html
如果你说日本后面的主子才是关键
做事方式