intg1=0,g2=0,g3=0,g4=0;//用于进行插,得到亚像素点坐标
doubledTmp1=0.0,dTmp2=0.0;//保存两个亚像素点插得到的灰度数据
doubledWeight=0.0;//插的权重
其次,对边界进行初始化:
for(i=0;i<nWidth;i)
{
N[i]=0;
N[(nHeight-1)*nWidthi]=0;
}
for(j=0;j<nHeight;j)
{
N[j*nWidth]=0;
N[j*nWidth(nWidth-1)]=0;
}
进行局部最大寻找,根据上文图1所述的方案进行插,然后判优,实现代码如下:
for(i=1;i<(nWidth-1);i)
{
for(j=1;j<(nHeight-1);j)
{
intnPointIdx=ij*nWidth;//当前点在图像数组中的索引
if(M[nPointIdx]==0)
N[nPointIdx]=0;//如果当前梯度幅为0,则不是局部最大对该点赋为0
else
{
////////首先判断属于那种情况,然后根据情况插///////
////////////////////第一种情况///////////////////////
/////////g1g2/////////////
/////////C/////////////
/////////g3g4/////////////
/////////////////////////////////////////////////////
if(((Theta[nPointIdx]>=90)&&(Theta[nPointIdx]<135))||
((Theta[nPointIdx]>=270)&&(Theta[nPointIdx]<315)))
{
//////根据斜率和四个中间进行插求解
g1=M[nPointIdx-nWidth-1];
g2=M[nPointIdx-nWidth];
g3=M[nPointIdxnWidth];
g4=M[nPointIdxnWidth1];
dWeight=fabs(P[nPointIdx])/fabs(Q[nPointIdx]);//反正切
dTmp1=g1*dWeightg2*(1-dWeight);
dTmp2=g4*dWeightg3*(1-dWeight);
}
////////////////////第二种情况///////////////////////
/////////g1/////////////
/////////g2Cg3/////////////
/////////g4/////////////
/////////////////////////////////////////////////////
elseif(((Theta[nPointIdx]>=135)&&(Theta[nPointIdx]<180))||
((Theta[nPointIdx]>=315)&&(Theta[nPointIdx]<360)))
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-33926-7.html
就被打沉好几艘