文档库 最新最全的文档下载
当前位置:文档库 › 基于改进的多分辨率Hough变换的直线检测方法

基于改进的多分辨率Hough变换的直线检测方法

基于改进的多分辨率Hough变换的直线检测方法
基于改进的多分辨率Hough变换的直线检测方法

第23卷 第9期计 算 机 仿 真2006年9月 文章编号:1006-9348(2006)09-0076-04

基于改进的多分辨率Hough变换的直线检测方法

岳冬雪,黄新生

(国防科学技术大学机电工程与自动化学院,湖南长沙410073)

摘要:该文提出了一种基于改进的多分辨率Hough变换的直线检测方法。对多分辨率图像由粗到细地循环处理,首先利用

全局累加器序列对最小的图像做Hough变换得直线参数,利用该直线参数估计下一循环图像中的直线参数;建立了一种简

单对应关系,将得到的直线参数的估计范围转换成图像空间范围;然后在图像空间范围内利用局部累加器对较大图像做

Hough变换检测直线。最后还给出了线段端点检测、长度计算及连续性考察的方法。实验表明,该方法可以加快直线检测

速度、节省存储空间,端点检测方法具有一定的鲁棒性。

关键词:模式识别;多分辨率;直线检测

中图分类号:TP391.4 文献标识码:A

M ethod of L i n e D etecti on Ba sed on I m proved

M ulti resoluti on Hough Tran sfor m

Y UE Dong-xue,HUANG Xin-sheng

(College of M echatr onics Engineering and Aut omati on,Nati onal Univ.of Defense Technol ogy,Changsha Hunan410073,China) ABSTRACT:A ne w method of line detecti on based on i m p r oved arith metic of Multires oluti on Hough transfor m s is

p r oposed.M ultires oluti on i m ages reduce the nu mber of the feature p ixels which decides the computer power.The

Hough transfor m is first app lied t o the s mallest i m age using a large accu mulat or array and obtains para meters of lines.

Computing the para meter ranges of the lines based on the lines para meter of p revi ous iterati on,then app lying the

Hough transf or m t o the larger i m age using s maller accu mulat or arrays in the para meter ranges f or mer menti oned.The

methods of line seg ments’end points detecti on and length computati on and connectivity denotati on are p resented.The

results of the experi m ent indicate that The line detecti on method can make the detecti on faster and reduce the st orage

capacity obvi ously.The end point detecti on method is r obust.

KE YWO RD S:Pattern recogniti on;M ulti-res oluti on;L ine detecti on

1 引言

直线是图像的重要特征之一,直线特征提取方法的研究对图像的理解、模式识别有重要的意义,特别是对直线特征明显的人造物目标(如房屋、道路、桥梁等)的识别。直线提取的方法有很多,传统Hough变换(Conventi onal Hough Transfor m,CHT)是检测直线的一种有效方法。该算法的优点是抗噪能力强,能在信噪比较低的情况下检测出直线,其缺点是计算量和存储量都很大。针对这一问题的研究有许多[1-4],多分辨率思想的应用使问题得到了很大的改观。自适应Hough变换(Adap tive Hough Transf or m,AHT)[1]、快速Hough变换(Fast Hough Transfor m,FHT)[2]、多分辨率Hough 变换(Multires oluti on Hough Transfor m,MHT)[3]都是多分辨率思想的应用例子。其中文献[3]中的MHT由于采用了多分辨率图像使处理的方法更简单,但由于第一级循环采用小的累加器序列,使得Δθ偏大从而造成累加器峰值的发散,产生漏检问题;并且该方法也没有检测线段的端点,不利于模式识别中检测目标的精确定位。

传统Hough变换不能检测直线的长度。文献[6]通过读累加器的最大值获得线段的长度,但是该方法并未考虑线段的连续性,可能线段中间的少量间断点没有计算在内。文献[7]严格考虑了线段的连续性,但这种方法需要逐点考察其连续性,并且可能将中间有少量断点的一条线段检测成几条线段。针对上述问题本文提出了一种基于改进的多分辨率Hough变换的直线检测方法,并给出了线段端点检测、长度计算及连续性考察的方法。

2 改进的M HT算法

基于多分辨率直线检测的基本思想,本文提出的改进的

收稿日期:2005-07-22

多分辨率Hough变换算法具有以下特点:

1)Hough变换循环从最小的图像开始,累加器序列个数由大到小。

首先对最小的图像利用最大的累加器进行Hough变换得到直线参数,由直线参数根据多分辨率的思想确定下一循环中直线的参数范围;然后在该参数范围内提高分辨率,利用小累加器做Hough变换检测直线。依次循环直到达到要求的精度。

2)对累加器序列采用极值处理代替传统的最大值处理,可以检测多条线段。

3)建立了参数空间与图像空间的一种简单对应关系,线性缩小参数检测范围。

4)在一定的连续范围内确定线段的端点、计算线段的长度,并考察其连续性。

2.1 多分辨率图像序列

Hough变换的计算量正比于图像中要处理的特征点的个数,减小计算量的一个方法便是减少特征点的个数,这正是多分辨率图像可以减少计算量的实质所在。首先根据原始图像f0

x,y

(这里规定图像坐标系的原点为图像的左上角顶点, x轴水平向右,y轴向下。其x轴、y轴的象素点个数分别为x0size、y0size,这里不妨设f0size=x0size=y0size)得到一系列不同分辨

率图像:f1

x,y ,f2

x,y

...f l

x,y

...,其中f l x,y=f0size/σl,σ为序列图像的

衰减因子。得到多分辨率图像的方法有许多[8-9],例如取σ= 2,可用相邻四个像素的灰度值取平均得下一序列图像的一个像素点的灰度值,即:

f l i,j=[0.5 0.5]

f l-12

i,

2j

f l-12

i,2j+1

f l-12

i+1,2j

f l-12

i+1,2j+1

0.5

0.5

(1)

其中,0≤i≤x l

xize

,0≤j≤y l xize.

2.2 多分辨率直线检测

利用多分辨率思想"由粗到细"检测直线,只对累加器超过阀值的参数区域进行下一步检测,如果在某一循环中直线参数的真实值没能进入检测范围,则在后续循环处理中将不可能再回到检测区域中,这就会造成漏检问题。相应地,如果上一次循环得到的直线参数比较准确,则在后续循环中可以缩小检测的参数范围。因此,本文算法首先采用全累加器(将整个图像参数平均量化时所需要的累加器序列)对低分辨率的最小图像进行Hough变换,而在后续循环采用部分累加器(全累加器中的一部分)对较高分辨率图像的特定范围作进一步处理。各个循环中对累加器处理时用极大值检测代替传统的最大值检测,可以检测多条直线。

对小图像做Hough变换后

,得到直线参数的估计值。由于小图像的分辨率较低,直线参数的估计值与真实之间有误差,但真实值应在估计值所确定的参数空间的一定误差范围内,后续循环只需要对相应的参数区域处理即可。这就需要建立参数空间与图像空间的对应关系。文献[5]中介绍的方法,可以将参数空间范围精确转化到图像空间,但这种方法计算比较繁琐。如图2所示的参数区域,用文献[5]中的方法

图1 图像空间

图2 参数空间

需要计算由(θ

,

ρ

)、(θ1,ρ0)、(θ0,

ρ

1

)和(θ1,ρ1)四个

参数对应得图像坐

标系的直线,再由

四条直线加上一定

的误差补偿得到相

应的区域(图1中的

网格①区)。本文参

数空间到图像坐标

空间不需要严格的对应,只要能满足真实值在相应的图像坐标区域内,并尽可能减小图像坐标区域以减少计算量的要求即可。因此,本文采用一种简单的对应关系:如图1所示,假设由上一循环的Hough变换确定的直线参数为(ρ,θ),由2.1节得到的多分辨率图像方法可知,下一循环所对应直线参数的估计值为(σρ,θ)。角度θ不变,适当增大参数ρ的范围[ρm in,ρmax](取ρm in=σρ-Δρ,ρmax=σρ+Δρ),则真实值在

以(θ,ρ

m in

和(θ,ρ

max

确定的两条平行线之间的区域②中。由参数(ρ,θ)确定的图像坐标系的直线为:

y=(ρ-x cosθ)/sinθ π/4≤θ≤3π/4

x=(ρ-y sinθ)/cosθ 其它

(2) 2.3 线段端点及连续性检测

当π/4≤θ≤3π/4时,线段像素点的x坐标值大致单调连续(可能有少数间断点),则线段的x坐标值在线段的端点确定的范围内近似服从均匀分布,由此可得线段的中点的x 坐标值为:

x o= x=

1

n

∑n

i=1

x i(3)

其中,n为线段的像素个数,可由相应累加器的值得到;x

i

为线段上的像素的x坐标值。

在一定的连续范围内(例如80%,即可能有20%的间断

点),线段端点的x坐标值(x

p

)应满足:x

p

为线段上所有点的x坐标值中最小和最大满足|x p-x o|≤n/2H(其中,n为线段

的像素个数;H为连续性阈值)的点的x坐标值,再根据直线方程(2)可求出相应点的y坐标值,即可得到线段的端点

(x

p ,y

p

)。这种确定线段端点的方法可以减小远离线段中心

的噪声点的影响。线段的长度可以由线段的两端点(x

p1

, y p1)、(x p2,y p2)计算得到:

l=(x p2-x p1)2+(y p2-y p1)2(4)

线段两端点的x坐标的差值|x

p2-x

p1

|为线段连续时线

段应包括的像素个数,而相应累加器的值n为线段中检测到的像素的个数,两者的比值表征了检测线段的连续性。同理,当θ∈[0,π/4)∪(π/4,π)时,线段的端点、线段的长度及连续性可以由线段上相应点的y坐标值确定。

3 算法实现

以512×512图像为例,循环次数L=4,本文算法实现如下:

1)取图像衰减系数σ=2,利用2.1节介绍的方法,对原

始图像f0

x,y (512×512)做变换,得多分辨率图像序列f1

x,y

(256

×256),f2

x,y (128×128),f3

x,y

(64×64)。

2)对最小图像f3x,y,利用全累加器A(例如128×128)在整个参数区域θ∈[0,π)、ρ∈[-642,642]做Hough变

换,得到m

1条直线参数(ρ

i

,θi),1≤i≤m1。

3)由循环j(其中j=1,...,L-1)确定的m

j

条直线参

数(ρ

i

,θi),其中1≤i≤m j。分别确定循环(j+1)所对应的各

条直线的参数估计区间(2ρ

i ±Δρ,θ

i

),(Δρ为设定的误差的

范围)。

4)确定循环中部分累加器的维数,不妨设部分累加器

为方阵。设次循环(j+1)的参数分辨率分别为Δρ

j+1、Δθ

j+1

,则

循环中采用的累加器序列的维数为Δρ

Δρ

j+1×

Δρ

Δρ

j+1

,其中1≤j

≤L-1。

5)利用2.2节介绍的方法将3)中直线的参数估计区间

转换成图像空间范围,查找相应图像空间范围内的特征点,用4)中的部分累加器对图像f L-(j+1)

x,y

做Hough变换。循环3)、4)、5),直到j=L-1。

6)当j=L-1时,对原始图像处理后得到最终的m L条

直线的参数(ρ

i

,θi),1≤i≤m L:分别利用(3)式计算直线的表达式,利用2.3节中的方法检测线段的端点、计算线段的长度、考察其连续性。

另外,如果最小累加器检测直线的参数足够准确,则可以对最小图像做Hough变换后,跳过其他多分辨率图像,将所得的直线参数对应到原始图像中。如此可以使算法更简单,加快检测速度、减少存储量。

4 实验结果

实验1利用本文提出的方法,利用MAT LAB6.1检测512×512图像中的线段,图3是一幅测试图像,是在原始图像中加入密度为0.05的椒盐噪声后合成的图像,这是一幅噪声水平相当高的噪声图像。原始图像中的四条直线的端点分别为:(91,193)~(305,18)、(70,356)~(478,271)、(132, 488)~(368,52)、(254,487)~(444,122)。多分辨率图像的衰减因子σ=8,循环次数L=2。实验结果如下所示:

图3 噪声图像

本文改进的

MHT算法耗时3.

3600秒,检测到的

线段的端点分别为

(92,193)~(305,

18)、(73,355)~

(478,271)、(131,

492)~(367,53)、

(254,487)~(444,

122),可以看出端

点检测的误差小于

5个象素点;而利用

传统Hough变换时

所用时间为16.8130秒,由于应用了与本文相同的端点检测算法,检测到的线段端点相同。以图3为例,在图像参数空间相同分辨率(Δρ=2,Δθ=0.176°)下,两种算法所需的存储量如表1所示。

表1 存储量比较

方法

变量

累加器特征点

三角函数

值列表

备注CHT1024×102487021024×2

MHT128×128512128×264×64(多分辨率图像)

可以看出,传统Hough变换需要的累加器序列很大,为了检测图像中线段端点需要记录所有的特征点,相应的三角函数值列表也比较大;而本文算法由于采用循环处理的方法,对最小图像做Hough变换需要的累加器序列较小,每次循环也只需要记录一条直线上的特征点。因此本文算法可以大大减少存储量。

实验2分别利用本文方法和传统Hough变换方法对合成图像中的30条不同角度的直线进行检测。图4、图5分别为对加入密度为0.01和0.02的椒盐噪声的合成图像的检测结果:图(a)为检测线段端点与真实值的误差、图(b)为两种方法的时间比较。

上述实验结果表明,本文提出的基于改进的MHT的直线检测方法是可行的,即使在严重噪声污染下仍能检测到目标直线;与传统Hough变换相比可以提高直线的检测速度、大大节省存储空间。本文提出的端点检测算法具有一定的鲁棒性,即使在密度为0.02的噪声污染下,检测到的端点的误差仍小于8个象素点,这有利于图像中目标的精确定位。

图4(a )

 端点误差(单位:象素)

图4(b ) 算法时间(单位:秒)

图5(a ) 端点误差(单位:象素)

图5(b ) 算法时间(单位:秒)

5 小结

与传统的Hough 变换相比本文提出的改进的MHT 算法中多分辨率图像序列及多分辨率直线检测思想的应用可以减少计算量、加快检测速度,并且大大节省存储空间;与文献

[3]中的MHT 相比,第一次循环对最小图像采用较大的累加

器序列做Hough 变换,避免了由于Δ

θ偏大,累加器峰值的发散造成的漏检问题,并且得到了更准确的直线参数,后续循环中缩小了研究的参数范围,使检测速度加快。本文算法还给出了线段端点检测、长度计算方法及连续性考察的方法,便于线段的精确定位。参考文献:

[1] J lling worth,J Kittler .The adap tive Hough transf or m [J ];I EEE

Trans .P AM I ;1987-9,9(5):690-698.

[2] H L i,M A Lavin,R J Le Master .Fast Hough transf or m [J ].Com 2

puter V isi on Graphics I m age Pr ocessing,1986,36:139-161.[3] M A tiquzza man .Multires oluti on Hough transfor m --an efficient

method of detecting patterns in i m ages[J ].I EEE Trans .P AM I ;

1992-11,14(11):1090-1095.

[4] B Gat os,S J Perant onis,N Papamarkos .Accelerated Hough trans 2

f or m usin

g rectangular i m age decompositi on [J ].Electr onic Let 2ter,1996.4-11,32(4):730-732.

[5] 袁捷,等.用Hough 变换的方法提取图像拐点[J ].武汉大学

学报(自然科学版),1998-2,44(1):85-88.

[6] M W Akhtar,M A tiquzzaman .Deter m inati on of line length using

Hough transf or m [J ].Electr onic Letter .1992-1-2,28(1):94-96.

[7] H F L i,Derek P Ao,R Jayakumar .I m p r ove ments and syst olic i m 2

p le mentati on of the Hough transf or mati on for straight line detecti on [J ].Pattern Recogniti on,1987,22(6):697-706.

[8] P J Burt,E H Adels on .The Lap lacian pyra m id as a compact i m age

code [J ].I EEE Trans .Commun .,1983-4,Com -31(4):532-540.

[9] G E Sotak,K L Boyer .The Lap lacian of Gaussian kernel:A for 2

mal analysis and design p r ocedure for fast,accurate convoluti on and full fra me out put [J ].Computer V isi on Graphics I m

age Pr o 2cessing;1989,48:147-189.

[10] K R Castle man 著,朱志刚,等译.数字图像处理[M ].北京:

电子工业出版社,1998-9.

[作者简介]

岳冬雪(1978.10-),女(汉族),山东粱山人,博士

生,主要研究方向:模式识别、图象制导技术等;

黄新生(1955.5-),男(汉族),湖南岳阳人,博士,

博士生导师,教授,主要研究方向:飞行器控制、精确制导技术等。

边缘检测与Hough变换实验报告----Matlab

边缘检测与Hough变换 实验目的:写一段代码实现一幅图像,其中分为以下两个步骤 1.使用Matlab中的canny算子进行边缘检测,可以让使用者交互式的输入不同 的Sigma的值实现边缘检测。 2.运用Hough变换来找到最突出的边缘,在图像中找到并画出最长的直线。 实验原理: canny算子边缘检测的基本原理是:采用二维高斯函数的任一方向上的一阶方向 导数为噪声滤波器,通过与图像f(x,y)卷积进行滤波,然后对滤波后的图像 寻找图像梯度的局部极大值,以确定图像边缘。 Canny边缘检测算子是一种最优边缘检测算子。其实现步骤如下: 1)用高斯滤波器平滑图像 2)计算滤波后图像梯度的幅值和方向 3)对梯度幅值应用非极大值抑制,其过程为找出图像梯度中的局部极大值点,把其他非局部极大值置零,以得到细化的边缘; 4)再用双阈值算法检测和连接边缘; 使用canny算子的edge函数调用格式为 BW=edge(I,'canny'); BW=edge(I,'canny',thresh,sigma); BW=edge(I,'canny',thresh); [BW,threshold]=edge(I,'canny',…); 2.Hough变换时最常用的直线提取方法,它的基本思想是:将直线上每一个 数据点变换为参数平面中的一条直线或曲线,利用共线的数据点对应的参数 曲线相交于参数空间中一点的关系,使得直线提取问题转化为计数问题。 Hough变换提取直线的主要优点是受直线中的间隙和噪声影响较小。 Hough检测直线的Matlab实现:在Matlab图像处理工具箱中提供了3个与 Hough变换有关的函数,分别为hough函数,houghpeaks函数和houghlines 函数。 hough函数的调用格式为[H,theta,rho]=hough(BW);其中BW为二值图像, H为Hough变换矩阵,theta为变换轴间隔θ,rho为元素个数。 Houghpeaks函数是用来提取Hough变换后参数平面上的峰值点。其调用格 式为peaks=houghpeaks(H,numpeaks),其中,H为Hough函数的输出,参数平 面的技术结果矩阵,参数numpeaks为指定要提取的峰值数目,默认值为1; 输出参数peaks为Q*2维峰值位置矩阵,其中Q为提取的峰值数目,peaks 的第q行分别存储第q个峰值的行和列坐标。 Hough函数用于在图像中提取参数平面上的峰值点对应的直线。其调用格式为lines=houghlines(BW,theta,rho,peaks) Lines=houghlines(…,param1,val1,param2,val2) 其中,BW与Hough函数的BW相同,为二值图象。theta和rho为hough 函数返回的输出,指示θ轴和ρ轴各个单元对应的值。Peaks为houghpeaks 函数返回的输出,指示峰值的行和列坐标,houghlines函数将根据这些峰值 提取直线。Param和val是参数对,用于指定是否合并或保留直线段的相关 参数,其取值有两种。当param=’MinLength’时,bal指定合并后的直线被保 留的门限长度,长度小于val的直线被舍去。当param=’FillGap’时,val指定 直线段被合并的门限间隔。如果两条斜率和截距均相同的直线段间隔小于

数字图像中的Hough变换应用--直线检测

摘要 为能够有效解决实时直线图形提取问题,提出了一种基于Hough变换(HT)的直线提取算法。它所实现的是一种从图像空间到参数空间的映射关系。由于具有一些明显优点和可贵性质,它引起了许多国内外学者和工程技术人员的普遍关注。由于其根据局部度量来计算全面描述参数,因而对于区域边界被噪声干扰或被其他目标遮盖而引起边界发生某些间断的情况,具有很好的容错性和鲁棒性。多年来,专家们对Hough变换的理论性质和应用方法进行了深入而广泛的研究,目前应用于生物医学、自动化和机器人视觉、空间技术和军事防御、办公自动化等各个方面。 本次课称设计首先分析了数字图像中直线边缘的三种结构特征,提出采用基元结构表示目标边缘点,并在约束条件下计算基元结构的基元倾角。在此基础上,结合传统的HT的思想对基元结构进行极角约束HT,以获得最终的直线参数。最后,再用MATLAB软件对该算法进行编程仿真。实验结果表明,对合成图像和自然图像,该算法能够有效的识别图像中的直线段。 关键词:直线提取;Hough变换;MATLAB

目录 1. 课程设计的目的 (1) 2. MATLAB简介及应用 (1) 2.1 MATLAB简介 (1) 2.2 MATLAB应用 (1) 2.3 MATLAB特点 (2) 3. Hough变换原理 (2) 3.1 Hough变换的基本原理 (2) 3.2 Hough变换的不足之处 (4) 3.3 Hough变换的应用 (4) 4. Hough变换检测直线设计 (5) 4.1 Hough变换检测直线基本原理 (5) 4.2 Hough变换的几种基本算法 (6) 4.3 Hough变换算法的比较与选择 (7) 4.4 Hough变换检测直线的算法流程图 (9) 4.5 Hough变换检测直线算法的实现 (9) 5. 仿真结果及分析 (11) 5.1 仿真结果 (11) 5.2 结果分析 (14) 结论 (15) 参考文献 (16)

Hough变换实例 很清晰的

数字图像处理第八次作业 实验内容 1、拍摄一张包含硬币、橡皮等物品的照片,通过Hough 变换检测出圆形的硬币个数并区分不同半径的硬币。最终计算出照片中的总钱数。 解:Hough 变换的实质是对图像进行坐标的变换,将图像空间的线条变为参数空间的聚集点,从而将原始图像中检测给定形状的曲线问题,变成寻找参数空间中的峰点的问题。 它不仅可以检测直线,而且可以很方便地检测圆、椭圆和抛物线等形状。由于这里需要检测圆形的硬币,所以下面给出检测圆的具体方法: 因为圆的图像空间方程为:222()()x a y b r -+-=, 我们需要通过Hough 变换,将图像空间(,)x y 对应到参数空间(,,)a b r ,然后对其进行累加完成检测。但是显然这种方法的计算量是非常大的,所以一般都是先对灰度图像进行边缘提取,利用边界像素的灰度梯度信息估计出下式中的角度θ,以此来降低计算量: cos cos a x r b y r θ θ=-*??=-*? (1) 一般在检测过程中需要对图像进行预处理,使得检测更加准确和容易。检测过程如下所示: ○ 1真彩色图像转为灰度图像; ○ 2去除噪声,进行中值滤波; ○ 3转为二值图像,利用边缘算子进行图像边缘提取; ○ 4最后进行图像的平滑和填充。 这里处理的图像并没有太多噪声,所以处理的时候略去了中值滤波的步骤,直接对边缘提取后的图像进行Hough 变换检测圆形。 根据式(1),我们需要对半径r 和角度θ进行搜索,所以这里应该首先设置半径和角度方向的搜索步长step_r 和step_angle ,接着给出半径搜索的最大和最小值,当然这两个数值需要根据经验来自己确定。最后就可以根据这些确定半径和角度的最大搜索次数。

Hough变换检测直线

数字图像处理实验报告 实验题目:Hough变换检测直线 专业班级:电科1001 学生姓名:赵 学号:201048360102 指导老师:王贵财 时间:2012-2013-2

Hough变换检测直线 一.实验目的 实现用Hough变换检测直线的算法 二.实验要求 (1)找一幅或多幅(两幅以上)包含直线形状的图像,检测出图像中的多条直线; (2)分析并显示各直线的角度、长度。 三.实验原理 Hough变换是利用图像全局特性而将边缘像素连接起来组成区域封闭边界的一种方法。在预先知道区域形状的条件下,利用Hough变换可以方便的得到边界曲线而将不连续的像素边缘点连接起来。Hough 变换的主要优点是受噪声和曲线间断的影响小。利用Hough变换可以直接检测某些已知形状的目标,如直线。 Hough变换的基本思想是点线的对偶性。一方面,图像空间中共线的点对应在参数空间里相交的线;另一方面,在参数空间中相交于同一个点的所有直线在图像空间里都有共线的点与之对应。因此Hough 变换把在图像空间中的直线检测问题转换到参数空间中对点的检测问题,通过在参数空间里进行简单的累加统计完成检测任务。如果参数空间中使用直线方程,当图像空间直线斜率为无穷大时,会使累加

器尺寸和变很大,从而使计算复杂度过大。为解决这一问题,采用直线极坐标方程,变换方程如图1所示。 ρ= xcosθ+ysinθ 根据这个方程,原图像空间中的点对应新参数空间中的一条正弦曲线,即点- 正弦曲线对偶。检测直线的具体过程就是让θ取遍可能的值,然后计算ρ的值,再根据θ和ρ的值对累加数组累加,从而得到共线 点的个数。下面介绍θ和ρ取值范围的确定。设被检测的直线在第一象限,右上角坐标为( m, n) ,则第一象限中直线的位置情况如图1所示。 图一 由图可见,当直线从与x轴重合处逆时针旋转时,θ的值 开始由0°增大,直到180°,所以θ的取值范围为0°~180°。由 直线极坐标方程可知: ,其中Φ= ,所以当且仅当x和y都达到最大且θ+ Φ=±90°时(根据<来调整θ的值) , | ρ| =| ρ| max =

Hough变换实例

实验内容 1.拍摄一张包含硬币、橡皮等物品的照片,通过Hough 变换检测出圆形的硬币个数并区分不同半径的硬币。最终计算出照片中的总钱数。 解:Hough 变换的实质是对图像进行坐标的变换,将图像空间的线条变为参数空间的聚集点,从而将原始图像中检测给定形状的曲线问题,变成寻找参数空间中的峰点的问题。 它不仅可以检测直线,而且可以很方便地检测圆、椭圆和抛物线等形状。由于这里需要检测圆形的硬币,所以下面给出检测圆的具体方法: 因为圆的图像空间方程为:222()()x a y b r -+-=, 我们需要通过Hough 变换,将图像空间(,)x y 对应到参数空间(,,)a b r ,然后对其进行累加完成检测。但是显然这种方法的计算量是非常大的,所以一般都是先对灰度图像进行边缘提取,利用边界像素的灰度梯度信息估计出下式中的角度θ,以此来降低计算量: cos cos a x r b y r θθ=-*??=-*? (1) 一般在检测过程中需要对图像进行预处理,使得检测更加准确和容易。检测过程如下所示: ○ 1真彩色图像转为灰度图像; ○ 2去除噪声,进行中值滤波; ○ 3转为二值图像,利用边缘算子进行图像边缘提取; ○ 4最后进行图像的平滑和填充。 这里处理的图像并没有太多噪声,所以处理的时候略去了中值滤波的步骤,直接对边缘提取后的图像进行Hough 变换检测圆形。 根据式(1),我们需要对半径r 和角度θ进行搜索,所以这里应该首先设置半径和角度方向的搜索步长step_r 和step_angle ,接着给出半径搜索的最大和最小值,当然这两个数值需要根据经验来自己确定。最后就可以根据这些确定半径和角度的最大搜索次数。 由于Hough 变换需要用到稀疏矩阵,也即首先得找到图像矩阵中的非零量,针对这些非零量进行进一步的处理。这个操作可以直接通过Matlab 中的find 语

一种基于改进Hough变换的直线快速检测算法_段汝娇

第31卷 第12期2010年12月 仪器仪表学报 Ch i nese Journa l o f Sc ientific Instru m ent V o l 131N o 112D ec .2010 收稿日期:2010-07 R ece i ved D ate :2010-07 *基金项目:铁道部-清华大学科技研究基金(J 2008X011)资助项目 一种基于改进H ough 变换的直线快速检测算法 * 段汝娇,赵 伟,黄松岭,陈建业 (清华大学电机系电力系统国家重点实验室 北京 100084) 摘 要:针对传统H ough 变换计算量大、耗费内存空间、参数空间峰值点被次峰值点包围、易造成漏检或误检等缺陷,提出一种改进的H ough 变换直线快速检测算法。首先检测图像中相邻的像素点并进行聚类,形成一些相连的像素点的集合,然后将聚类后的像素点进行感知编组,细分成比原聚类线段更接近直线的线段,最后对每段近似直线用随机H ough 变换进行检测,从而精确地检测出图像中相应的直线。实验表明,与传统H ough 变换相比,改进后的算法计算量小,节省内存,无需先验知识,且抗干扰性有显著提高,并降低了误检率和漏检率。 关键词:像素点聚类;感知编组;随机H ough 变换;直线检测;快速检测 中图分类号:TP391.41 文献标识码:A 国家标准学科分类代码:510.4050 Fast line detecti on al gorith m based on improved H ough transformati on Duan Rujiao ,Zhao W e,i H uang Song li n g ,Chen Jianye (State K ey Lab of P o w er Syste m,D e p ar t m ent of Electrical E n g ineer i ng,T singhua Uni ver sity,Beijing 100084,China) Abst ract :H ough transfor m (HT)is a popu l a r too l for li n e detecti o n due to its r obustness to noise and m issi n g data . H o w ever ,the co m putati o na l cost and m e m ory space consu m ption assoc i a ti n g w ith its voting sche m e have prevented its applicati o ns .H ere an i m pr oved HT algo rithm is proposed to so lve these pr oble m s .Firstly the neighbor pixels are clustered ,and then the c l u sters are subd i v ided i n to sets ofm ost perceptua ll y si g nificant stra i g ht li n e seg m ents .For each seg m en,t its best fitting line can be found usi n g rando m H ough transfor m (RHT ).Co m pared w ith trad itional HT algor ithm ,the proposed approach can not on ly accelerate the co m puting speed and save m e m ory space ,but a lso produce a m uch cleaner vo ti n g m ap and m ake the transfor m m ore robus.t K ey w ords :pixel cluster ;perceptua l organ izati o n ;RHT;li n e detecti o n ;fast detection 1 引 言 自动识别图像中的直线,是图像处理和计算机视觉领域的一个重要课题。Hough 变换是处理此问题的一种有效工具,具有良好的鲁棒性和抗干扰能力,在许多领域得到了应用[1-6] 。H ough 变换算法的主要思想是,先将参数平面按一定步长离散化为许多小格,然后采用/多对一0映射,计算图像空间中共线的多个像素点在参数平面中对应的参数值,若计算结果落在参数平面某一小格内,就使该小格的累加器加1,累积值最大的小格即为图像 空间中直线的参数。这种从图像域/投票0到参数域的 穷尽式搜索模式,不仅计算量大,占用内存多;同时,参数 域中得票最多的小格被得票数次多的小格所包围,容易对检测造成干扰,导致对直线的误检或漏检。 针对H o ugh 变换的上述缺陷,一些学者提出了改进 措施。K ir yati 等人提出了概率Hough 变换(P HT )[7] ,具体是将图像数据映射到参数域中具有更大概率的单元,而非所有单元。Due 等人提出了随机H ough 变换(也称RHT )[8-11] ,即通过对像素点的随机采样,避免传统H ough 变换需庞大计算量,且降低了内存需求;但其处理复杂图

hough变换提取直线(Matlab实现)

Hough变换提取直线 一、实验目标 实现用Hough变换检测直线的算法 二、实验内容 1、读入图像 选取有较多直线及部分曲线以作对比的图像作为实验素材,这里我们必须使用彩色图像(有些看似灰度图像的实际属性也是彩色图像),原因下面有详解。 2、检测图像边缘 如果一个像素落在图像中某一个物体的边界上,那么它的邻域将成为一个灰度级变化的带。对这种变化最有用的两个特征是灰度的变化率和方向,他们分别用梯度向量的幅度和方向来表示。 边缘检测算子检查每个像素的邻域并对灰度变化率进行量化,通常也包括方向的确定。有若干种算子可以使用,大多数是基于方向导数掩模求卷积的方法。如Roberts算子,Sobel算子,Prewitt算子,Log算子等。这里采用Log算子提取图像边缘,再用均值滤波去除边缘图像噪声。 3、实现Houg变换,检测出图像中的直线 Hough变换是一种利用图像的全局特征将特定形状的边缘连接起来,形成连续平滑边缘的一种方法。它通过将源图像上的点影射到用于累加的参数空间,实现对已知解析式曲线的识别。 这里先对边缘图像进行二值化处理,然后再用hough变换提取直线,最后用红色标记之。因为处理过程中需使用灰度图像,但最后无法给灰度图像赋颜色(会出错或效果不好),只能给彩色图像赋颜色,故最初输入时请使用彩色图像。

4、Matlab代码如下: f=imread('3.png');%读入彩色图像,注意不能使用灰度图像 o=f; %保留彩色原图 f=rgb2gray(f);%将彩色图像转换为灰度图像, f=im2double(f); figure(); subplot(2,2,1);imshow(o);title('原图'); [m,n]=size(f);%得到图像矩阵行数m,列数n for i=3:m-2 for j=3:n-2%处理领域较大,所以从图像(3,3)开始,在(m-2,n-2)结束l(i,j)=-f(i-2,j)-f(i-1,j-1)-2*f(i-1,j)-f(i-1,j+1)-f(i,j-2 )-2*f(i,j-1)+16*f(i,j)-2*f(i,j+1)-f(i,j+2)-f(i+1,j-1)-2*f (i+1,j)-f(i+1,j+1)-f(i+2,j);%LoG算子 end end subplot(2,2,2);imshow(l);title('LoG算子提取图像边缘'); [m,n]=size(l); for i=2:m-1 for j=2:n-1 y(i,j)=l(i-1,j-1)+l(i-1,j)+l(i-1,j+1)+l(i,j-1)+l(i,j)+l(i,j+1)+l( i+1,j-1)+l(i+1,j)+l(i+1,j+1); y(i,j)=y(i,j)/9; %LoG算子提取边缘后,对结果进行均值滤波以去除噪 声,为下一步hough变换提取直线作准备 end end subplot(2,2,3);imshow(y);title('均值滤波器处理后') q=im2uint8(y); [m,n]=size(q); for i=1:m for j=1:n if q(i,j)>80; %设置二值化的阈值为80 q(i,j)=255; %对图像进行二值化处理,使图像边缘更加突出清晰 else q(i,j)=0; end end end subplot(2,2,4);imshow(q);title('二值化处理后');

Hough变换原理要点

摘要 人类对物体的识别最主要是对物体外形的识别,图像的形状检测在图像处理以及模式识别中是十分重要的。Hough变换作为目标形状特征提取的有效方法得到了广泛的应用。但Hough变换算法主要应用于二值图像(即边缘图像),因此在对灰度图像进行Hough变换前需要对其进行预处理(包括图像的滤波与边缘检测)。图像预处理作为Hough变换目标检测过程中重要的前期工作,其结果将直接影响检测结果的好坏。文中介绍了图像中常见的两种噪声,对图像的空间域噪声滤波做了一些研究,分析了高斯滤波与中值滤波的局限性,在双边滤波的基础上提出了一种基于多次中值抽取的双边滤波方法,该方法兼顾了空间邻域的相关性和像素强度的相似性,通过伪中值滤波选取强度滤波器的参考像素值,在平滑高斯噪声和椒盐噪声的同时更好地保护了边缘,与针对某一类特定噪声设计的传统滤波方法相比,该方法能够处理混有混合噪声(高斯噪声和椒盐噪声)的图像,并能够得到很好的滤波效果。同时,本文分析了几种经典的边缘检测算子,用迭代的双边滤波方法代替Canny算子中的高斯滤波过程或自适应滤波过程,在一定程度上避免了滤波过程给边缘带来的模糊,得到了更好的边缘检测结果。Hough变换作为图形目标检测的有效方法,能够检测直线、圆、椭圆和抛物线等众多解析图形,广义Hough变换对该方法做了一些推广,不

再受图形解析表达式的限制,通过预先设置的查找表,能够检测任何图形目标。文中对这些方法都做了介绍,并对这些方法做了仿真。由于受到图像空间和参数空间离散化的影响,以及Hough变换自身的计算过使得传统Hough变换方法也有一些局限性,比如在高强度噪声下检测的结果不佳,计算量大,存储资源需求大等。文中分析了传统Hough变换的投票过程,指出传统方法对参数单元进行1值累加是不合理的,并且传统方法没有区分图像中的噪声点和直线上的点,介于此,提出了基于直线连接度量的Hough变换,既考虑了图像的全局信息,也考虑了图像中像点邻域的局部信息,使得参数空间中的峰值不再受到噪声的影响,同时也避免了图像中具有线性关系的特征点投票带来的虚假峰值。通过对传统Hough变换定义方式的修改,提出了基于模板匹配的Hough变换检测方法,在该方法中,每一个参数单元都确定了图像空间中的一个模板,通过该模板主动搜索图像空间中符合条件的特征点,特征点的个数作为参数单元的值,并记录图像中线段的端点坐标,完成图像中线段的检测与定位,能够节省大量的存储资源。 关键词:特征提取;Hough变换 Hough变化检测直线 Hough变换的基本思想是利用点—线的对偶性,即图像空间共线的点对应在参数空间里相交的线,反过来,在参

(标准)Hough变换检测圆

Hough变换检测圆(附:MATLAB程序) 分类:图像处理Hough圆2011-12-11 21:37 12587人阅读评论(33) 收藏举报matlab算法图像处理internetfunction任务 Hough变换的基本原理在于,利用点与线的对偶性,将图像空间的线条变为参数空间的聚集点,从而检测给定图像是否存在给定性质的曲线。圆的方程为:(x-a)^2+(y-2)^2=r^2,通过Hough 变换,将图像空间对应到参数空间。附录中的MATLAB程序为网上比较常见的,实际运行中存在一些问题,这里进行些修改。 原理: 霍夫变换是图像处理中从图像中识别几何形状的基本方法之一,应用很广泛,也有很多改进算法。最基本的霍夫变换是从黑白图像中检测直线(线段)。 我们先看这样一个问题:设已知一黑白图像上画了一条直线,要求出这条直线所在的位置。我们知道,直线的方程可以用y=k*x+b 来表示,其中k和b是参数,分别是斜率和截距。过某一点(x0,y0)的所有直线的参数都会满足方程y0=kx0+b。即点(x0,y0)确定了一族直线。方程 y0=kx0+b在参数k--b平面上是一条直线,(你也可以是方程b=-x0*k+y0对应的直线)。这样,图像x--y平面上的一个前景像素点就对应到参数平面上的一条直线。我们举个例子说明解决前面那个问题的原理。设图像上的直线是y=x, 我们先取上面的三个点:A(0,0), B(1,1), C(22)。可以求出,过A点的直线的参数要满足方程b=0, 过B点的直线的参数要满足方程1=k+b, 过C 点的直线的参数要满足方程2=2k+b, 这三个方程就对应着参数平面上的三条直线,而这三条直线会相交于一点(k=1,b=0)。同理,原图像上直线y=x上的其它点(如(3,3),(4,4)等) 对应参数平面上的直线也会通过点(k=1,b=0)。这个性质就为我们解决问题提供了方法:首先,我们初始化一块缓冲区,对应于参数平面,将其所有数据置为0. 对于图像上每一前景点,求出参数平面对应的直线,把这直线上的所有点的值都加1。 最后,找到参数平面上最大点的位置,这个位置就是原图像上直线的参数。上面就是霍夫变换的基本思想。就是把图像平面上的点对应到参数平面上的线,最后通过统计特性来解决问题。假如图像平面上有两条直线,那么最终在参数平面上就会看到两个峰值点,依此类推。 在实际应用中,y=k*x+b形式的直线方程没有办法表示x=c形式的直线(这时候,直线的斜率为无穷大)。所以实际应用中,是采用参数方程p=x*cos(theta)+y*sin(theta)。这样,图像平面上的一个点就对应到参数p---theta平面上的一条曲线上。其它的还是一样。 在看下面一个问题:我们要从一副图像中检测出半径以知的圆形来。这个问题比前一个还要直观。我们可以取和图像平面一样的参数平面,以图像上每一个前景点为圆心,以已知的半径在参数平面上画圆,并把结果进行累加。最后找出参数平面上的峰值点,这个位置就对应了图像上的圆心。在这个问题里,图像平面上的每一点对应到参数平面上的一个圆。 把上面的问题改一下,假如我们不知道半径的值,而要找出图像上的圆来。这样,一个办法是把参数平面扩大称为三维空间。就是说,参数空间变为x--y--R三维,对应圆的圆心和半径。

Hough变换讲解

%Hough变换 clc;clear;close all f=imread('D:\dj.jpg'); %若是彩色图片转灰度化 if length(size(f))>2 f=rgb2gray(f); end % figure(1) subplot(121);imshow(f); %利用edge函数进行边缘检测 j=edge(f,'Sobel'); subplot(122);imshow(j); [row,col]=size(j); pinfang=round((row*row+col*col)^0.5); A=zeros(2*pi nfang,180); for m=1:row for n=1:col if j(m,n)>0 for thera=1:180 r=thera/180*pi; %角度转弧度 rho=round(m*cos(r)+n*sin(r));%ρ=cosθ+sinθ rho=rho+pinfang+1;%-l:l转换到1:2l+1 A(rho,thera)=A(rho,thera)+1; end end end end [rho,thera]=find(A>40);%交点超过60条线的点,ma,na为参数空间的坐标点 nma=length(rho); for i=1:nma hold on m=1:row; %rho=ma(i)-1; r=thera(i)/180*pi; n=(rho(i)-pinfang-m*cos(r))/(0.00001+sin(r)); plot(n,m,'r'); end %Hough变换 clc;clear;close all f=imread('D:\dj.jpg'); %若是彩色图片转灰度化 if length(size(f))>2 f=rgb2gray(f); end % figure(1) subplot(121);imshow(f); %利用edge函数进行边缘检测 j=edge(f,'Sobel'); subplot(122);imshow(j); [row,col]=size(j); pinfang=round((row*row+col*col)^0.5); A=zeros(2*pi nfang,180); for m=1:row for n=1:col if j(m,n)>0 for thera=1:180 r=thera/180*pi; %角度转弧度 rho=round(m*cos(r)+n*sin(r));%ρ=cosθ+sinθ rho=rho+pinfang+1;%-l:l转换到1:2l+1 A(rho,thera)=A(rho,thera)+1; end end end end [rho,thera]=find(A>40);%交点超过60条线的点,ma,na为参数空间的坐标点 nma=length(rho); for i=1:nma hold on m=1:row; %rho=ma(i)-1; r=thera(i)/180*pi; n=(rho(i)-pinfang-m*cos(r))/(0.00001+sin(r)); plot(n,m,'r'); end

hough变换原理

Hough变换原理 霍夫变换(Hough Transform)是图像处理中的一种特征提取技术,它通过一种投票算法检测具有特定形状的物体。该过程在一个参数空间中通过计算累计结果的局部最大值得到一个符合该特定形状的集合作为霍夫变换结果。霍夫变换于1962年由Paul Hough 首次提,后于1972年由Richard Duda 和Peter Hart推广使用,经典霍夫变换用来检测图像中的直线,后来霍夫变换扩展到任意形状物体的识别,多为圆和椭圆。 霍夫变换运用两个坐标空间之间的变换将在一个空间中具有相同形状的曲线或直线映射到另一个坐标空间的一个点上形成峰值,从而把检测任意形状的问题转化为统计峰值问题,上一节中已经介绍了车道的直线特征,本节中介绍hough变换检测直线的原理和检测结果。 我们知道,一条直线在直角坐标系下可以用y=kx+b表示, 霍夫变换的主要思想是将该方程的参数和变量交换,即用x,y作为已知量k,b作为变量坐标,所以直角坐标系下的直线y=kx+b在参数空间表示为点(k,b),而一个点(x1,y1)在直角坐标系下表示为一条直线y1=x1·k+b,其中(k,b)是该直线上的任意点。为了计算方便,我们将参数空间的坐标表示为极坐标下的γ和θ。因为同一条直线上的点对应的(γ,θ)是相同的,因此可以先将图片进行边缘检测,然后对图像上每一个非零像素点,在参数坐标下变换为一条直线,那么在直角坐标下属于同一条直线的点便在参数空间形成多条直线并内交于一点。因此可用该原理进行直线检测:

4-13 参数空间变换结果 如图4-13. 所示,对于原图内任一点(x,y)都可以在参数空间形成一条直线, 到的(γ,θ)在参数空间中得到一系列对应曲线见图4-14 霍夫统计变换结果。由霍夫变换检测结果见图4-15(c)所示。

基于MATLAB的一种Hough变换程序.

I=imread('test5.bmp';f=rgb2gray(I; f1=im2bw(f,200/255; BW1=double(f1; BW=edge(BW1,'sobel',0.4; r_max=50; r_min=10;step_r=10;step_angle=pi/12;p=0.7; [m,n] = size(BW; size_r = round((r_max-r_min/step_r+1; size_angle = round(2*pi/step_angle; hough_space = zeros(m,n,size_r; [rows,cols] = find(BW; ecount = size(rows; for i=1:ecount for r=1:size_r for k=1:size_angle a = round(rows(i-(r_min+(r-1*step_r*cos(k*step_angle; b = round(cols(i-(r_min+(r-1*step_r*sin(k*step_angle; if(a>0&&a<=m&&b>0&&b<=n hough_space(a,b,r = hough_space(a,b,r+1; end end end end max_para = max(max(max(hough_space; index = find(hough_space>=max_para*p; length = size(index; hough_circle = false(m,n; for i=1:ecount for k=1:length par3 = floor(index(k/(m*n+1; par2 = floor((index(k-(par3-1*(m*n/m+1; par1 = index(k-(par3-1*(m*n-(par2-1*m; if((rows(i-par1^2+(cols(i-par2^2<(r_min+(par3-1*step_r^2+5&&... (rows(i-par1^2+(cols(i-par2^2>(r_min+(par3-1*step_r^2-5 hough_circle(rows(i,cols(i = true; end end end for k=1:length par3 = floor(index(k/(m*n+1; par2 = floor((index(k-(par3-1*(m*n/m+1; par1 = index(k-(par3-1*(m*n-(par2-1*m; par3 = r_min+(par3- 1*step_r; fprintf(1,'Center %d %d radius %d\n',par1,par2,par3; para(:,k = [par1,par2,par3]; end subplot(221,imshow(f; subplot(222,imshow(BW; subplot(223,imshow(hough_circle

hough变换检测圆的matlab程序

hough变换检测圆的matlab程序 function [y0detect,x0detect,Accumulator] = houghcircle(Imbinary,r,thresh) %HOUGHCIRCLE - detects circles with specific radius in a binary image. % %Comments: % Function uses Standard Hough Transform to detect circles in a binary image. % According to the Hough Transform for circles, each pixel in image space % corresponds to a circle in Hough space and vise versa. % upper left corner of image is the origin of coordinate system. % %Usage: [y0detect,x0detect,Accumulator] = houghcircle(Imbinary,r,thresh) % %Arguments: % Imbinary - a binary image. image pixels that have value equal to 1 are % interested pixels for HOUGHLINE function. % r - radius of circles. % thresh - a threshold value that determines the minimum number of

相关文档