📄 hough.c
字号:
void Hough(int InRow,int InCol,unsigned char **InImg,int *Thita,int *Radia)
{
int nThita,nRadia,i,j,Max,TranRow,TranCol,**TranImg;
float *sc,*ss,*sk;
sc = (float *)fspace_1d(2*MAXANGLE+1,sizeof(float));
ss = (float *)fspace_1d(2*MAXANGLE+1,sizeof(float));
sk = (float *)fspace_1d(TranCol,sizeof(float));
TranRow = (int)sqrt((float)InRow*InRow+InCol*InCol)*2;
TranCol = 2*MAXANGLE + 1;
TranImg = (int **)fspace_2d(TranRow,TranCol,sizeof(int));
for (i=0;i<TranRow;i++)
for (j=0;j<TranCol;j++)
TranImg[i][j] = 0;
for(i=0;i<=MAXANGLE;i++)
{
sc[i] = cos(i * PI / 180);
ss[i] = sin(i * PI / 180);
}
for(i=MAXANGLE+1;i<TranCol;i++)
{
sc[i] = -cos(i * 3.1415926 / 180);
ss[i] = sin(i * 3.1415926 / 180);
}
for(i=1;i<InRow-1;i++)
{
for(nThita=0;nThita<TranCol;nThita++)
sk[nThita] = i * ss[nThita];
for(j=0;j<InCol;j++)
if(InImg[i][j]!=ZERO)
for(nThita=0;nThita<TranCol;nThita++)
{
nRadia = (int) (sk[nThita] + j * sc[nThita] +0.5);
//printf("Radia=%d,Thita=%d\n",Radia,Thita);
TranImg[nRadia][nThita]++;
}
}
Max = 0;
for(i = 0;i<TranRow;i++)
for(j =0; j<TranCol;j++)
if(TranImg[i][j] > Max)
{Max = TranImg[i][j];
nRadia = i;
nThita = j;
}
printf("nRadia=%d,nThita=%d\n",nRadia,nThita);
*Radia=nRadia;
*Thita=nThita;
ffree_2d((void **)TranImg,TranRow);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -