}
}
3.3 图像增强——计算图像梯度及其方向
//////////////////同样可以用不同的检测器/////////////////////////
/////P[i,j]=(S[i,j1]-S[i,j]S[i1,j1]-S[i1,j])/2/////
/////Q[i,j]=(S[i,j]-S[i1,j]S[i,j1]-S[i1,j1])/2/////
/////////////////////////////////////////////////////////////////
double*P=newdouble[nWidth*nHeight];//x向偏导数
double*Q=newdouble[nWidth*nHeight];//y向偏导数
int*M=newint[nWidth*nHeight];//梯度幅
double*Theta=newdouble[nWidth*nHeight];//梯度方向
//计算x,y方向的偏导数
for(i=0;i<(nHeight-1);i)
{
for(j=0;j<(nWidth-1);j)
{
P[i*nWidthj]=(double)(pCanny[i*nWidthmin(j1,nWidth-1)]-pCanny[i*nWidthj]pCanny[min(i1,nHeight-1)*nWidthmin(j1,nWidth-1)]-pCanny[min(i1,nHeight-1)*nWidthj])/2;
Q[i*nWidthj]=(double)(pCanny[i*nWidthj]-pCanny[min(i1,nHeight-1)*nWidthj]pCanny[i*nWidthmin(j1,nWidth-1)]-pCanny[min(i1,nHeight-1)*nWidthmin(j1,nWidth-1)])/2;
}
}
//计算梯度幅和梯度的方向
for(i=0;i<nHeight;i)
{
for(j=0;j<nWidth;j)
{
M[i*nWidthj]=(int)(sqrt(P[i*nWidthj]*P[i*nWidthj]Q[i*nWidthj]*Q[i*nWidthj])0.5);
Theta[i*nWidthj]=atan2(Q[i*nWidthj],P[i*nWidthj])*57.3;
if(Theta[i*nWidthj]<0)
Theta[i*nWidthj]=360;//将这个角度转换到0~360范围
}
}
根据上文所述的工作原理,这部分首先需要求解每个像素点在其邻域内的梯度方向的两个灰度,然后判断是否为潜在的边缘,如果不是则将该点灰度设置为0.
首先定义相关的参数如下:
unsignedchar*N=newunsignedchar[nWidth*nHeight];//非极大抑制结果
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-33926-6.html
而日本装备的军舰则是采取纵列排开
再次减持美国国债