Hough变换提取圆的代码~~~ 求高手看看错误
好象是内存分配的问题,求解决方法,或者更好算法,谢谢
#include "StdAfx.h"
#include "BaseList.h"
#include <math.h>
#define Houghthresh 33
/*------------------------------------hough_circle---hough变换提取圆-------------
image_in:输入图像数据指针
image_out:输出图像数据指针
xsize:图像宽度
ysize:图像高度
------------------------------------------------------------------------*/
void hough_circle(BYTE *image_in, BYTE *image_out, int xsize, int ysize)
{
int a,b,r;
int rmax=xsize+ysize+1;
int ***Hough;
Hough=new int**[xsize];
for(a=0;a <xsize;a++)
Hough[a]=new int*[ysize];
for(a=0;a <xsize;a++)
for(b=0;b <ysize;b++)
Hough[a][b]=(int*)new int[rmax];
for(a=0;a <xsize;a++)
for(b=0;b <ysize;b++)
for(r=0;r <rmax;r++)
Hough[a][b][r]=0;
int i,j;
for(j=0;j <ysize;j++) //将大于0的点标记为255,即为白点
for(i=0;i <xsize;i++)
{
int fn;
fn=(int)(*(image_in+j*xsize+i));
if(fn>0)
{
fn=255;
*(image_in+j*xsize+i)=(BYTE)fn;
}
}
for(j=0;j <ysize;j++) //将输出图象点初值全置为0,即为全黑图象
for(i=0;i <xsize;i++)
*(image_out+j*xsize+i)=0;
for(j=0;j <ysize;j++) //对原图中的白点做Hough变换
for(i=0;i <xsize;i++)
{
if((int)(*(image_in+j*xsize+i))==255)
{
for(a=0;a <xsize;a++)
for(b=0;b <ysize;b++)
{
r=(int)(sqrt((i-a)*(i-a)+(j-b)*(j-b)));
Hough[a][b][r]++;
}
}
}
for(a=0;a <xsize;a++)
for(b=0;b <ysize;b++)
for(r=0;r <rmax;r++) //寻找数组Hough[][][]各个峰值,采用5*5*5领域算法
{
if(Hough[a][b][r]>Houghthresh)
{
int tag=1;
int da,db,dr;
for(da=a-2;da <=a+2;da++)
{
for(db=a-2;db <=b+2;db++)
{
for(dr=r-2;dr <=r+2;dr++)
{
if(dr <rmax&&Hough[da][db][dr]>Hough[a][b][r])
{
tag=0;break;
}
if(tag==0)break;
if(tag==1) //对满足条件的点进行赋值输出
{
for(j=0;j <ysize;j++)
for(i=0;i <xsize;i++)
{
int hn,temp;
hn=(int)(*(image_in+j*xsize+i));
if(hn==255)
{
temp=(int)(sqrt((i-a)*(i-a)+(j-b)*(j-b)));
if(temp==r)
{
*(image_out+j*xsize+i)=(BYTE)hn;
}
}
}
}
}
if(tag==0)break;
}
}
}
}
}