hough检测直线的算法和思路是怎样的?
有没有人有过比较好的方法? 问题点数:50、回复次数:4Top
1 楼jackiesun(jackiesun)回复于 2003-08-04 12:15:09 得分 5
去看看《vc++数字图像处理》,里面讲的很清楚。Top
2 楼HUNTON(追求完美)回复于 2003-08-04 12:59:16 得分 40
由于我们平常直线用的k,b表示法有一些直线不能表示,照成很大的麻烦。它里面的直线表示和平常的不一样,用的也是两个参数,一个是原点到直线的距离,还有一个是x轴正半轴逆时针到原点到直线的垂线段的角。如图:
| \
| \
| \
| /\
| d / \
| / \
|/ A \
--------------------
这样直线上的点就可以表示为: d = x * cosA + y * sinA
hough检测直线的算法是这样的,先建一个二维整型数组Arr[m][n],所有元素初始化为0;然后根据已知的边界点一个一个搜索,比如搜索到点(x0,y0),则把叫A从0到2PI变化(步长自己定),变化到A0,根据公式d = x0 * cosA0 + y0 * sinA0,计算出d,然后在数组Arr[A0][d]的位置值加1。当所有的边界点都搜索完时,数组Arr[m][n]中值最大的元素的数组下标就是我们检测图中的最长的直线了。这条直线的A,d就是数组两个相应的下标。
这样的全图搜索算法计算量大得惊人,当然在实际的运用中会有简化的算法,比如减小搜索范围等。特别在已知直线大概的A,d时,就可以只在估计值附近一个很小的范围内搜索,这时步长也可以减小,精度提高。Top
3 楼happy__888([顾问团]寻开心 www.e-jjj.com)回复于 2003-08-04 12:59:49 得分 5
www-scf.usc.edu/~flv/ipbook/chap07.htm 里面有代码
www.colibri.com.cn/linedetection.pdf 关于直线检测的比较详细的信息Top
4 楼shanti(鸭鸭)回复于 2003-08-04 13:44:36 得分 0
我自己写的代码误差很大,可以说根本检测不到理想的直线。还有,为什么要将最大值附近清零,要是我需要检测的不同直线的角度和位置都很接近的话,这样做不就丢失信息了吗?Top




