您的位置:首页 > 其它

Hough变换在直线提取中的改进

2015-10-24 20:34 246 查看


Hough变换在直线提取中的改进

分类:技术交流 | 标签: Hough变换 直线提取

2008-03-02 21:08阅读(2718)评论(4)

今天谈一谈Hough变换进行直线提取,以及自己对这个算法做的一些改进。

目标特征提取在计算机视觉研究中的地位、作用和重要性相信不需要我在此多说。直线提取在很多实际项目中都是基础性工作,有着重要的作用。

尽管有相当多的研究者投入了相当大的精力在直线检测方面做了很多工作,也研究出了不少算法,如基于链码的直线提取方法,基于神经节感受野(DOG函数)的直线提取算法,但是目前直线提取最成熟、应用最广泛的算法仍然是Hough变换。Hough变换有非常多的优点,比如提取稳定,精度高。但其缺点仍然非常显著,就是实时性太差。本文要谈的对Hough变换的改进主要就是对其实时性的改进。

Hough变换检测直线的原理是首先得到边缘点,对每一边缘点得到过边缘点的所有直线,直线参数为极坐标下的(row,theta),而每一个(row,theta)都对应极坐标中一个点,对每一条直线对应的点记为投票一次,最终记录投票数,投票数大于某一域值的即可看作一条直线。

在此,我们可以看出,算法中计算量大,主要是因为:第一,对边缘点做一个360度的直线组,即经过该边缘点上的所有直线,对其对应的(row,theta)投票。第二,对每一边缘点都要重复此过程。在边缘点众多的情况下,这样的计算量是非常可怕的。

因此,对算法的改进主要针对此两个方面。实际上,在我们平时工程项目的应用中,很多时候都不需要找出图像上所有的直线,而只需找出某一条或者某几条有着明显特征的直线。换句话说,就是实际上有很多边缘点是无用的。在此,我们以找图像中最长的一条直线为例,找其他特征的直线只需灵活运用方法,变换一些约束特征,也是可以解决的。需要做的工作及作用:

1、用两次sobel算子相减得到单相素宽度的边缘。sobel算子提取边缘是不错的算法,速度相对较快。但一次sobel算子提取得到的边缘一般边缘点较多。用两次sobel算子相减可以得到单像素的边缘。这样可以大大减少边缘点的个数

2、计算每一边缘点的梯度方向,统计每个方向上的点的个数,找到边缘点个数最多的方向,做为粗略的直线方向。此处,为了容错,也可以考虑对梯度方向值进行拟合后,找几个波峰做为备选直线方向。视具体情况。

3、得到大致方向后,将与此方向偏差较多的边缘点剔除。做完这一步后,你会发现,边缘点已经减少很多了。而你需要的信息不会丢失。

4、在直线方向的正负n度内(这个n主要看你的容错标准),做Hough变换。找到直线。

至此,算法完成。此算法个人在工程项目中已经有所应用,得到了不错的效果。当然,这里给出的只是一个大致思路和方向,在具体的运用中还需要根据具体情况加一些约束。比如如果检测的是方形物体,那么你要找的边缘方向,应该是两个大致成90度的方向,并且他们之间在边缘点附近存在交点。总之根据你所需要提取的直线特征,设置一些条件进行提取。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: