matlab hough变换检测平行直线,浅谈Hough变换的平行直线检测改进方案

在遥感图像中,对江河上桥梁目标的识别具有重要意义。由于桥梁的最突出特征在于桥体的平行直线,所以对平行直线的实时检测十分重要。经典的Hough变换是一种常用的检测直线的方法,Hough变换的研究及应用动态:Hough变换于1962年由Paul Hough提出,并在美国作为专利被发表。它所实现的是一种从图像空间到参数空间的映射关系。由于具有一些明显优点和可贵性质,它引起了许多国内外学者和工程技术人员的普遍关注。例如,由于其根据局部度量来计算全面描述参数,因而对于区域边界被噪声干扰或被其他目标遮盖而引起边界发生某些间断的情况,它具有很好的容错性和鲁棒性。多年来,专家们对Hough变换的理论性质和应用方法进行了深入而广泛的研究, 并取得了许多有价值的成果。它具有可对目标进行有效检测与识别、可并行实现、对噪声不敏感等优点,但是由于其自身的设计缺陷,无法完成对平行直线的实时性检测。本文在经典Hough变换的基础上,提出了一种平行直线改进算法,如图1所示。经试验证明,该算法能准确地检测识别出平行直线,且实时性较好。

1 算法原理

1.1 图像二值化处理

将灰度图像转换为黑白的二值化图像是图像数字化处理的重要环节之一。目前常用的算法是采用阈值法对图像进行二值化处理,即通过设定某个T阈值,并以该阈值为门限,把灰度图像转换成二灰度级的黑白图像。在处理过程中,不同的样品图像根据灰度分布峰值的不同,按图像特征的相应要求,可以选择不同的二值化转换阈值T。对于256级的灰度图像,将图像上位于n处的灰度值记为Tn(0≤Tn≤255),则设定二值化阈值为Tn。则:

由式(1)即得到以二值化数据Tn标定的二值化图像fn,从而完成了图像的二值化处理。

1.2 边缘检测

Hough变换的实质是将图像空间内具有一定关系的像元进行聚类,寻找能把这些像元用某一解析形式联系起来的参数空间累积对应点。在参数空间不超过二维的情况下, 这种变换有着理想的效果。但是,一旦参数空间增大,计算量便会急剧上升,同时耗费巨大的存储空间,耗时也随之猛增。就此,多年来国内外众多学者针对具体情况对常规Hough变换进行了多方面的探索,并提出了许多有价值的改进方法。经典Hough变换使用Canny算子进行边缘检测。虽然Canny算子能较好地检测出图像中的各个边缘信息,但是在处理之后的图像中,显示了许多无用的边缘信息,从而导致处理时间过长,失去了实时性意义。Canny 边缘检测算子是John F. Canny于 1986 年开发出来的一个多级边缘检测算法本文算法在对图像二值化处理的基础上,采用Sobel算子检测图像。

其边缘检测的实现过程是:使用图2(a)的掩模对图像fn进行滤波,再使用图2(b)掩模对fn滤波,然后计算每个滤波后的图像中的像素值的平方,并将两幅图像的结果相加,最后计算相加结果的平方根。

Hough变换先将(ρ,θ量化,并相应设置一个二维累加器矩阵。累加器中的每个元素描述了(ρ,θ)平面上的一个离散点。将图像中的每一个特征点代入θ的各个量化值,计算出对应的ρ,计算所得值(经量化)落在某个小格内,即对参数空间累加器进行加1,使得图像空间中直线的提取问题转化为累加器计数求极大值问题。

1.4 改进的平行线检测方法

无论是经典的Hough变换,还是改进的Hough变换,都要经过变换空间来检测。对于直线而言,只要这一组直线是平行线,都有一个显着的特征:即两条直线的斜率是相等的,基于这一特征,设计了以下的算法:

(1)为了得到效果更好的边缘图像,首先要对图像进行预处理,得到二值化图像。

(2)再根据二值化图像,设定合适的阈值T,对其进行边缘检测。

(3)运用Hough变换,将笛卡尔坐标空间转换成极坐标空间(ρ,θ),找出若干峰值点,检测出图像中的直线。

(4)由于在采集时图像会受到光照、大气紊流等自然因素的影响,当一幅遥感图像中的所有直线被检测出来后,一条直线会被分割成若干个小段。为了复原这种直线,可以设定阈值T2,计算同一直线上相邻两条直线段的距离,如果这个值小于阈值T2,将两道路段进行连接,否则不作处理。

(5)检测出各个直线段的起止点。

(6)在复原所有的直线段后,根据桥梁的特点,设定大阈值T3,用来检测出较长的直线段(即桥体的其中一边);并利用直线段端点坐标值,计算所有有用直线段的斜率K。即:

(7)当其中一条直线段的斜率与已经检测出来的直线段(桥体其中一边)的斜率之间的误差≤0.1%时,即检测出了桥体的另一边,从而完成了实时检测和识别桥梁。

2 实验

本文选用某河流上的某桥梁作为实验对象。两种算法在相同条件下运行,硬件环境:CPU为Pentium○R4,主频为3.2 GHz,内存为1 GB;软件环境为Matlab 7.1版本,操作系统为中文Windows XP,扫描图像像素为449×617。图5(a)为运用经典Hough变换,在极坐标空间下的峰值点检测效果图,图5(b)为使用本文改进算法下的峰值点检测效果图。图6(a)为经典Hough变换算法下的检测结果,图6(b)为本文改进算法检测的结果,图6的阈值T2为35像素,大阈值T3为300像素。

从多次的实验结果可知,经典Hough变换所检测的结果正确率不高,且使用时间较长,不能完成实时检测和识别,也不能确定所检测出的直线是否为平行线。利用本文算法所检测出的直线,经过斜率计算,两直线的斜率差小于0.1%,可以视为斜率相等,故能判定这两条直线为平行线,而且正确率与所用时间都优于经典Hough变换,如表1所示。

本文基于斜率判断的Hough变换算法不但在时间上要比经典的Hough变换快,而且正确率要比经典Hough变换高,对于一般实时性目标的检测和识别均能取得较高的精度控制。但本文的算法在计算和存储空间上有很大的可压缩性,所以还有很多方面需要改进,尤其是对3个阈值的选取上,对算法的效率及最后的结果都有重要的影响。

你可能感兴趣的:(matlab,hough变换检测平行直线)