严培荣 王超 厉丹
摘要:Hough变换不仅可以用来检测规则的直线,也可以对其他许多形状的物體进行识别,但由于阈值设定的问题对短直线的检测会受到长直线的影响而效果不好,且该变换仅检测直线,无法记录检测直线的起始点和终止点。为此,该文提出一种改进过的Hough变换算法更好的检测遥感图像中的直线。
关键词:Hough变换;检测直线
中图分类号:TP391.4 文献标识码:A 文章编号:1009-3044(2018)26-0157-02
Abstract: Hough transform can be used not only to detect straight lines, but also to identify many other objects. However, due to the problem of threshold setting, the detection of short straight line will be affected by the long straight line and the result is not good. And the transformation only detects the straight line, and can not record the starting point and ending point of the detection line. For this reason, this paper proposes an improved Hough transform algorithm to detect straight lines in remote sensing images better.
Key words: Hough transformation; Aightline detection
1 概述
Hough变换是图像处理中常用的基本方法之一。第一次被提出是在1962年,后来在1972年的时候Richard Duda和Peter Hart两人对一般Hough变换进行推广进行,将参数空间选为极坐标系即将极坐标融入Hough变换。后来又经过了一系列的研究改善,至此Hough变换不仅可以用来检测规则的直线,也可以对其他许多形状的物体进行识别,但是多为识别圆、椭圆等圆形物体。Hough变换一经提出在图像处理这一领域就引起了研究者们的大量关注。但是Hough变换也还有许多不足需要进行改进,例如由于阈值设定的问题对于一般较短直线的检测可能会受到长直线检测的影响而使得对短直线检测的效果不好。并且该变换仅检测直线,却无法记录检测直线的起始点和终止点等等。为了更好的检测出遥感图像中的直线道路,本文尝试着提出一种改进过的Hough变换算法来检测比较完整的道路信息。
2 Hough变换介绍及其优缺点分析
Hough变换的主要原理很简单,就是利用点线对偶,即其中一个空间中的点对应到另一个空间时则变为直线,那么一个空间中一条直线上的点在另一个空间中是许多条相交的直线,则可以通过求直线的交点个数来检测直线,问题就变得简单化了,把几何问题转化为代数问题。
Hough变化的具体定义为:设直角坐标系中一直线,我们用斜截式即y=kx+b来表示。并且用极坐标系来作为参数空间,即参数空间的坐标为[γ]和[θ],则这条直线在极坐标系中可以表示为一点[(γ,θ)],这即为点线对偶性。那么我们可以利用边缘检测之后的图像,把图像上的非零像素点都变换为参数空间中的一条直线,那么我们只需要求参数空间中的直线交点,这个交点即对应直角坐标系中的一条直线,因此即可检测出直角坐标系中的直线。
由以上可知,直角坐标系空间和极坐标系空间中点线存在对偶性,如图1所示。如果为了方便计算,把两个坐标系对换,将[γ,θ]看成直角坐标空间,由[γ=x0*cosθ+y0*sinθ]可知一点[(x0,y0)]就是一个正弦曲线,如图2所示。
由以上可得我们可以通过检测参数空间的交点来检测原来空间的直线。为了便于观察计算,一般我们进行Hough变换之前都会先对空间进行量化,形成离散Hough空间,即设置一个累加矩阵用来记录参数空间中交点的个数。
简而言之,Hough变换主要是寻找参数空间中对应的累积点。由以上可知Hough变换的原理很简单,但是正因为算法简单,用Hough变换来检测也存在一些缺点,例如:找到累加矩阵中局部的最大值比较难、受其他因素的干扰严重、存储空间较大、对短小直线检测困难、不能检测出直线的端点等,除此之外计算速度和复杂度不定,主要取决于参数空间的大小。
为了解决原来直线检测速度的问题,实现快速的直线检测算法,Murakami K等人想到分块原则,利用分块思想将待处理区域分为若干个子块,然后在各个子块内分别应用一般 Hough 变换来检测直线。为了减少计算时的存储空间,减少计算量,降低计算复杂度,Chutatape Q 和 Guo I尝试着将原始空间到参数空间的映射由“一对多”变为“多对一”,并且仅对至少通过两个点的直线的参数进行累积运算。此外,朱娟等人提出一种逆向的Hough变换方法,并且在其中融合直线的梯度,反过来去通过参数空间的点来判断原始空间中是否有对应的直线。从上面可以看出,研究者们在如何降低Hough变换计算量和提高检测速度方面进行了大量的研究。我们知道在检测过程中阈值的设置对于直线检测的影响很大,阈值设置过大则干扰了对短直线的检测,同样阈值太小检测的效果也不好。除此之外,一般Hough变换也没有给出如何记录检测直线的起始点和终止点等等。
3 本文的Hough变换检测道路方法
由于使用一般的Hough变换只能简单的检测出直线,并没有给出如何去记录直线的方向、起始点和终点等相关的道路信息,然而进行完整的道路检测肯定要检测出道路的起点和终点信息即检测出道路段,并把道路边缘线和其他建筑物的直线边缘线进行区分,例如道路边缘是一对平行线,而屋顶等建筑物边缘也可能是平行线对,那么如何从这些直线对中判断出道路边缘呢?而利用一般的Hough变换无法解决这些问题,所以要对Hough变换算法进行改善,从而使之能检测出完整的道路信息。我们知道一般稍微正规的道路的边缘相比于其他建筑物的边缘线有许多独特的特征,如:道路两侧具有相似的边缘,长宽比较其他建筑物很大等。本文提出的 Hough变换算法的具体步骤如下:
Step 1:首先建立参数空间,并对参数空间进行量化,形成离散的参数空间。为了便于统计交点的个数建立一个累加矩阵[Jγ,θ],并设矩阵中的每个元素初始值为 0;然后增加 1 个与二维累加矩阵相同大小的二维矩阵[lines=x,y],用来记录每一个离散点相应的范围。
Step 2:按顺序搜索图像,对于图像的每个像素点,计算相应的[θ]值所对应的 [γ]值,并找到所对应[Jγ,θ],使[Jγ,θ]的值升高1,并且同时记录下每一个点所对应点的范围,直到计算完所有的图像像素点。
Step 3:找到[Jγ,θ]中的最大值,并且记录下该最大值所对应的参数[γ,θ],并且在lines中找到对应元素来确定直线段的端点.
Step 4:将[Jγ,θ]置为 0,执行Step 3,一直到所有满足条件的最大值点被检测完。
4 实验结果分析
峰值点的分布图、Hough变换的结果图如下:
由以上几张实验结果图分析该改进算法对于直线道路的检测效果,为了更好的分析实验效果,除了本次实验一直使用的原图进行的道路检测之外,又找了两张道路图进行检测,结果如图6和8。由实验结果可以看出,该算法可以检测出道路并且能够相对准确的记录出道路的端点,但是也可以看出在直线检测方面也存在一些不足,对于直线的识别灵敏度不够高。
5 结论
上述实验结果,本文提出的算法能够相对有效的消除一些建筑物的干扰,检测出道路,并且标记了道路的端点,提取出了道路信息。但是也存在一些不足,从图4可以看出其中的一条道路只检测出了一条边缘,另一条边缘完全未检测到,经分析,应该是在边缘检测时受到建筑物的影响使得道路边缘间断点太多,在进行直线检测时未能检测出这是一条直线,这一点需要在边缘检测方面提高,并且可能因为该直线检测算法对于直线检测的灵敏度不够高导致的该结果,并且对于较弯曲的道路也未能检测出来。对于图5,道路边缘很直,所以道路检测的效果很好,只有一点点未检测到,因为是十字路口的原因,道路检测时检测出了8条直线,但实际上容易看出是两条道路,这一点也有待提高。对于图7,比较完整的检测出了两条道路信息,其中有一条检測出的道路两个边缘有点重合,可以看出也是因为一边的边缘间断点比较多,所以在检测直线时朝道路中间偏导致两个边界有点重合。综上可知,该算法能够检测出相对完整的道路信息,但是对于边缘检测间断点较多或者是较弯曲的道路检测效果不是很好,这些有待改善。
参考文献:
[1] 张益博. 高分辨遥感影像半自动道路提取方法研究[D]. 西安电子科技大学, 2011.
[2] 史文中, 朱长青, 王昱. 从遥感影像提取道路特征的方法综述与展望[J]. 测绘学报, 2001, 30(3):257-262.
[3] 杨康, 李满春, 刘永学,等. 遥感影像道路的多点同时快速行进提取方法[J]. 遥感技术与应用, 2011, 26(3):294-302.
[4] 江涛, 朱运海, 董凤宝. 小波变换在遥感影像道路特征提取中的应用[J]. 测绘工程, 2004, 13(2):34-36.
[5] 吴青. 高分辨率遥感图象道路网提取技术研究[D]. 哈尔滨工业大学, 2006.
[通联编辑:梁书]