有关哈夫变换的问题
毕设快做完了,最后一个问题,希望大家帮忙看看
下面是我有关哈夫变换的代码,目的是识别一条直线的角度,怎么对水平和垂直直线返回正确答案,45度就会错误呢?百思不得其解。
void CTest5Doc::OnProcessHough()
{
Bitmap.GetBitmapBits(Totalsize,bmpinfo);
int m,n,theta,rou;
m=(int)2*(sqrt(bminfo.bmWidth*bminfo.bmWidth+bminfo.bmHeight*bminfo.bmHeight)+1);
n=180;
int *Polar=NULL;
Polar=(int*)malloc(m*n*sizeof(int));
memset(Polar,0,sizeof(int)*m*n);
int i,j;
for(i=0;i<bminfo.bmHeight;i++)
for(j=0;j<bminfo.bmWidth;j++){
if(bmpinfo[i*bminfo.bmWidth*4+j*4+2]==0)
for(theta=0;theta<180;theta++){
rou=(int)(j*cos((theta*3.1415926)/360)+(bminfo.bmHeight-i-1)*sin((theta*3.1415926)/360));
Polar[(rou+m/2)*180+theta]=Polar[(rou+m/2)*180+theta]+1;
}
else
;
}
int max=Polar[0],imax=0,jmax=0;
for(i=0;i<m;i++)
for(j=0;j<n;j++){
if(Polar[i*n+j]>=max){
imax=i;
jmax=j;
max=Polar[i*180+j];
}
}
CString roumax,thetamax;
imax=imax-m/2;
roumax.Format("%d",imax);
thetamax.Format("%d",jmax);
AfxMessageBox(roumax);
AfxMessageBox(thetamax);
free(Polar);
// TODO: Add your command handler code here
}