hough检测直线
时间:2008-05-13 23:40:05
来源:论坛整理 作者: 编辑:chinaitzhe
网友回复:
- C/C code
Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/ hough检测直线 typedef struct MAXVALUE{ int iDist; int iAngle; int iMax; }MAXVALUE; /* * 检测直线 */ void TraceBeeline(int ImageWidth,int ImageHeight,LPBYTE lpSrc,LPBYTE lpDest,int len) { // #define pi 3.1415927 int iMaxAngle = 90; int iAngleNumber = 0; //最大值 MAXVALUE MaxValue1; memset(&MaxValue1,0,sizeof(MAXVALUE)); //循环变量 int i; int j; int off = 0; int iMaxDistance = 0,iDistance = 0; iMaxDistance = (int)sqrt(ImageWidth * ImageWidth ImageHeight * ImageHeight); int *lpTrans = new int[iMaxDistance * iMaxAngle]; memset(lpTrans,0,iMaxDistance * iMaxAngle * sizeof(int)); //去掉孤立点 for(j=1,off=0;j<ImageHeight-1;j ) for(i=1;i<ImageWidth-1;i ,off) { if(1==lpSrc[off]) { if(lpSrc[off-1]==0&&lpSrc[off 1]==0&&lpSrc[off-ImageWidth]==0&&lpSrc[off ImageWidth]==0 / lpSrc[off-ImageWidth-1]==0&&lpSrc[off-ImageWidth 1]==0&&lpSrc[off ImageWidth-1]==0&&lpSrc[off ImageWidth 1]==0) lpSrc[off]=0; } } ////////////////////////////// for(j=0;j<ImageHeight;j ) for(i=0;i<ImageWidth;i ) { off = j * ImageWidth i; if(1==lpSrc[off]) { for(iAngleNumber=0;iAngleNumber<iMaxAngle;iAngleNumber ) { iDistance = (int)fabs(i * cos(iAngleNumber * 2 * PI/180.0) j * sin(iAngleNumber * 2 * PI/180.0)); if(iDistance>=0&&iDistance<iMaxDistance) lpTrans[iDistance * iMaxAngle iAngleNumber] ; } } } //找到最大值 for(i = 0;i < iMaxDistance;i ) for(iAngleNumber=0;iAngleNumber<iMaxAngle;iAngleNumber ) { if(lpTrans[i * iMaxAngle iAngleNumber]>MaxValue1.iMax) { MaxValue1.iMax = (int)lpTrans[i * iMaxAngle iAngleNumber]; MaxValue1.iAngle = iAngleNumber; MaxValue1.iDist = i; } } // for(j=0;j<ImageHeight;j ) for(i=0;i<ImageWidth;i ) { off = j * ImageWidth i; iDistance = (int)fabs(i * cos(iAngleNumber * 2 * PI/180.0) j * sin(iAngleNumber * 2 * PI/180.0)); if(iDistance == MaxValue1.iMax) lpDest[off]=1; } if(lpTrans) { delete lpTrans; lpTrans = NULL; } }
网友回复: 请问有hough变换检测圆和椭圆的程序吗?
网友回复:对答案满足的话就结贴吧!
网友回复:但是直线起点和终点的坐标怎么表示呢,主要就是这个问题,我检测出来的直线坐标总是不对。
网友回复:HOUGH只是检测经过某些点的直线的方程,至于什么是起点和什么是终点,只要你检测出来以后,判定那条直线上最远的点即可。
至于椭圆和圆,其方程对于参数而言都是线性的,因此似乎可以当作直线求解。注重:所谓检测直线,是对“参数”而言,而不是“坐标”而言。只要方程满足f1(x,y)a f2(x,y)b ... fn(x,y)c=0,都可以看作对参数的直线方程,而对fi(x,y)是否直线无关
楼主要想不弄明白原理就搞出答案来,那不轻易哦,因为除非有现成的,谁会去帮你写这么复杂的程序呢?
网友回复:其实大体的程序是有的,只是检测直线的时候发现坐标起始点不太对,不知道是什么地方出问题了,不过还是要感谢各位了,
网友回复:其实自己有编程序的,就是发现最后计算出来的起点和终点坐标不对,就是想问问是怎么个思路,呵呵,自己再试试吧,谢谢大家了
关键字:hough,检测,直线,
上一篇:祝福灾区
下一篇:下面没有链接了











文章评论
共有 0 位网友发表了评论 此处只显示部分留言 点击查看完整评论页面