当前位置:文档之家› Hough变换原理

Hough变换原理

Hough变换原理
Hough变换原理

摘要

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

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

关键词:特征提取;Hough变换

Hough变化检测直线

Hough变换的基本思想是利用点—线的对偶性,即图像空间共线的点对应在参数空间里相交的线,反过来,在参

数空间中交与同一个点的所有直线在图像空间里都有贡献的点与之对应。

在图像空间X—Y中,所有共线的点(x,y)都可以用直线方程描述为:

=

y+

c

mc

(3.1)

其中m为直线的斜率,c为截距,同时式(3.1)又可以改写为:

c+

=

-

xm

y

(3.2)

上式可以看做是参数空间C—M中的一条直线方程,其中直线的斜率为x,截距为y。

比较式(3.1)和式(3.2),可以看出,图像空间中的一点(x,y)对应参数空间中的一条直线,而图像空间中的一条直线又是由参数空间中的一个点(m,c)来决定的。Hough 变换的基本思想就是将上述两式看作时图像空间中的点和参数空间中的点的共同的约束条件,兵由此定义一个从图像空间到参数空间的一对映射图3—1体现了这种点—线之间的对偶关系。图3—2(a)所示图像空间中位于同一直线的点,(b)所示是图像中直线上的点经式(3.2)映射到参数空间中的一簇直线,图像空间中的一条直线上的点经过hough 变换后,对应的参数空间中的直线相较于一点,这一点是确定的,确定该点在参数空间中的位置皆可以知道图像中直线

的参数。Hough变换吧在图像空间中的直线检测问题转换到参数空间里对点的检测问题,通过在参数空间里进行简单的累加统计完成检测任务。

(a)图像空间中的单点(b)参数空间中的直线

图3一1图像空间中的点与参数空间中的直线对偶示意图

(a)图像空间中位于同一直线上的点(b)参数空间中的直线

图3一2图像空间中的直线与参数空间中的点对偶示意图

图3一3参数空间中的累加数组

在具体的计算过程中,需要将参数空间M 一C 离散化为二维的累加数组,设这个数组为(m ,c),如图3一3所示,同时设[[]max min ,m m 和[]max min ,c c 分别为斜率和截距的取值范围。开

始时置数组A 全为零,然后对每一个图像空间中的给定边缘点,

让m 取遍[]max min ,m m 内所有可能的值,并根据式 (3.2)算出对应

的c 。再根据m 和c 的值(设都已经取整)据m 和。的值(设都已经取整)对数组元素A(m ,c)=A(m ,c)+I 。累加结束后,通过检测数组A 中局部峰值点的位置来确定参数m 和c 的值。 如果直线的斜率无限大(比如x=a 形式的直线),采用式(3.2)是无法完成检测的,为了能够正确识别和检测任意方向的和任意位置的直线,可以可以用Duda 和Hart 提出的直线极坐标方程来替代 (3.1)式:

θθρsin cos y x += (3.1)

如图3一4(a)所示,图像空间中一条直线l ,θ为l 过原点的

垂线与x 轴正方向的夹角,p 为原点到z 的距离。这时,参数空间就变为p 一θ空间,X 一Y 空间中的任意一条直线对应了p 一θ空间内的一个点,由式(3.3)可知,X 一Y 空间内的一点对应了p 一θ空间中的一条正弦曲线。如果有一组位于由参数p 和θ决定的直线上的点,则每个点对应了参数空间中的一条正弦曲线,所有这些曲线必交于点()θρ,,如图3一4所示。

(a)图像中位于同一直线上的点 (b)参数空间中交于一点的正弦曲线

图3一4极坐标方程下的点一线对偶示意图

同样,在计算的过程中需要对参数空间进行离散化,每个单元的中心点坐标为:

?????=?-==?-=),2,1()21(),2,1()21(ρθρρθθN n n N n n n n (3.4)

其中θπθN /=?,θN 为参数θ分割段数:ρπρN /=?,是参数ρ的

分割段数,)max(2

2y x L +=是为图像中的点距原点的距离最大值。具体的计算过程与上文相似,将参数相应的置换即可。 利用Hough 变换在图像中检测直线的基本策略就是:由图像空间中的边缘点去计算参数空间中的参考点的可能轨迹,并在一个累加器中给出计算的参考点计数,最后选出峰值。Hough 变换实质上是一种投票机制,对参数空间中的离散点进行投票,若投票值超过某一门限值,则认为有足够多的图像点位于该参数点所决定的直线上。这种方法受噪声和直线出现间断的影响较小。

3.5实验结果与分析

标准Hough 变换广泛用于直线的检测,在同一图像上具有多条直线和噪声干扰的情况下,正确识别直线需要注意一下几点:

1)参数空间中只有当计数器的值为局部峰值时,该点的坐标才有可能作为直线的参数,累加数组其他各点的坐标不能作为直线的参数看待;

2)参数0的取值范围为[0o ,]8口’夕或[一夕0o ,夕口,,变换过程中0的离散间隔决定了识别的精度,但e 的步长不能过小,这样会引起参数空间的峰值扩散,也会增大 Hough 变换的计算量;

3)对于宽度大于1个像素点的直线,正确地识别不仅需要对p 的取值,而且需要对夕的取值加以限制 [3811391。在本节

中我们只考虑对1个像素宽度的直线进行

Hough变换检测

如图3一9所示,其中(“)图含有6条直线,并且每条直线都有间断,为了分清每条直线在经过Hough变换后对参数空间单元的累加值,我们对每条直线都加以标记,直线1,2是图中较长的两条直线,直线a,b,c,d可以看作是图像中矩形的四条边。(b)图是(a)图加入了5%的椒盐噪声,可以通过对(a)图和(b)图的Hough变换检测结果进行比较来考察Hough变换的抗噪声能力。图(c)、(d)分别是图(a)、(b)经Hough 变换后参数空间中累加单元的累加值效果

图,图(c)中的标号与图(a)中的标号是一一对应的,可以看出图像中直线段的长度决定了对应累加单元的累加值的大小,图像中的孤立点噪声增大了参数单元中的累加值,但没有改变局部峰值点的位置。图(。)、(f)是通过寻找参数空间中局部峰值点的位置画出来的,分别是(a)图和(b)图的Hough变换检测结果,这两个图基本上没有什么差别。因此,Hough 变换对图像中的直线出现间断或是噪声具有很强的抵抗能力,但如果我们将图(a)看成是由多条线段组成的图,而且需要检测到这些线段,标准Hough变换是无法完成的,因为此时参数空间单元的信息只包括:线段所处直线的参数以及共线点的个数,而无法确定该线段的

起始点的位置。

在图3一9(c)中,a 、b 、c 、d 四个峰值点分别对应了图像中矩形的四条边,这四个峰值点满足下面的关系: l)它们是成对出现的:第一对是b 和d ,设他们对应的边的倾斜角度为1

θ; 第二对是a 和c ,设他们对应的边的倾斜角度是2

θ; 2)两对峰值点在“轴上间隔90。,即02190≈-θθ;

3)因为矩形的对边的长度相等,则同一对中的两个峰值的累加值是相同的,即a c H a H ==)()(。b d H b H ==)()(,()?H 为参数单元中累加值,?代表边的长度;

4)同一峰值对中两点间在ρ轴上的距离值等于矩形的边长,即b c a =-ρρ,

a d

b =-ρρ。

我们可以在参数空间中寻找符合上述4个关系的峰值点,从而检测图像中的矩形轮廓。

(a)无噪声图像 (b)加噪后图像

(c)图(a)经Hough变换后参数空间(d)图(b)经Hough 变换后的参数空间

(e)图(a)的Hough变换检测结果(f)图(b)的Hough 变换检测结果

图3一9Hough变换检测直线

图3一10(a)是一副含有单个圆轮廓的合成图像,其中轮廓的边缘厚度为一个像素,(b)是(a)经Hough变换后在参数空间中的累加值图,在变换的过程中,圆的半径是已知的,此时参数空间的大小与图像空间相同,峰值点所处的位置即为图像中圆的圆心位置。图(c)中加入5%的椒盐噪声,并且圆轮廓边缘出现了间断,图(d)图(c)经Hough变换后的参数空间中累加单元的示意图,受噪声的干扰,非峰值点的区域不如图(b)平坦。

改进的Hough变换直线检测方法

Hough变换作为图像目标检测的有效方法,具有很强的抗干扰能力。如果检测的曲线上有小的扰动或是间断,或者图像中存在背景噪声,Hough变换算都能够准确地检测出目标曲线。因此,该方法在图像处理中得到了越来越广泛应用。但Hough变换将图像中的每一个边缘点映射为参数空间中相应的曲线,算量非常大,且需要预存的参数空间,浪费大量的存储资源。特别对于直线的Hough变换检测,由于图像空间和参数空间的离散化以及受到噪声的影响,容易引起数空间中峰值的扩散,甚至会出现伪峰值,给检测带来了困难,限制了它在很多方面的应用。

4.1基于直线连接度量的Hough变换

4.1.1传统Hough变换的局限

Duda提出的Hough变换检测直线的极坐标映射关系可以表示为:

θ

ρsin

θ

x+

=

cos y

(4.1)

其中ρ表示直线与图像空间中原点的距离,θ表示直线法线与x轴的夹角。

图4一1特征点(x,y)力映射为参数空间的一条曲线

曲线上的每一点确定穿过(x,y)的直线

可以看出,x一y平面上的一点映射到。ρ

θ-平面上是一条正弦曲线。参数空间的离散化单元为()ρ

θ,,给定图像空间中特征点(x,y),θ遍历[)π,0

中的离散值计算得到ρ,然后把()ρθ,表示的累加单元的值加1。这一方法隐含了假设通过(x,y)点的直线的角度是在[)π,0上等概率分布的,如图4一1所示,(a)中的实线表示由参数空间中的值得到的候选直线。可以看出,此时对0的离散个数决定了可能通过点(x,y)的直线条数,这与现实生活中只有有限条直线相交于同一点是矛盾的。

传统Hough变换依据图像的全局统计特性检测直线,它对符合条件的所有参

数单元等值投票累加,容易检测出虚假直线。实际上,如果图像中一点在一条直

线上,则在该点的周围也将有其他点在这条直线上。图4一2表示图像空间中的四个特征点A、B、C、D,其中A是待分析的参考点,我们发现,通过参考点A的直线只有两条AB或ACD,因此经Hough变换后,把符合条件的所有[)π,0上的离散参数单元都等值投票累加是不合理的。由于B点距A点的距离较C、D点小,在图像空间中AB作为经过A点直线的可能性比ACD要大,但传统HT 依据图像的全局统计特性检测得到的是本来不应在一条直线上的三点A、C、D所连接成的直线,对于C、D两点,传统HT无法区分它们是图像点还是噪声点。

图4一2A,B是图像点,C,D是噪声点

(a)原图(b)图(a)经Hough变换后的参数空间

图4一3图像噪声引起的伪峰值示意图

图4一3(a)是一副大小为ldx!百的图像,其中含有一条线段和5个孤立的噪声点,图(b)为图(a)经Hough变换后参数空间累加单元的累加值图,其中Q所指峰值点代表图像中的直线段,而由于受到噪声的干扰,在Q峰值点的附近出现了一个伪峰值点P。同时,在二值累加方式下,由于各投票点的贡献值相同,噪声的存在容易使参数空间出现峰值扩散现象,这对参数空间中的峰值检测是十分不利的。为了保证提取有效的峰值作为直线参数的准确估计,应当对投票点的贡献有所区分,对代表通过该特征点的可能直线的参数单元给与较大的投票值,从而突出局部峰值。

我们应用本文算法(MHT)分别检测合成图像和实际图像中的线段特征,图像的大小都是256x256。在变换的过程中,我们假设参数单元的匹配模板中只含有一条线段特征。实验所用计算机配置为CPU:Pentiuml.SG,内存:256MB。在算法的

起始时刻,我们令01=ρ,乃ρρρ?+=12,,I =?ρ,I =?θ。图4一13(a)是一幅含有噪声的合成图像,图4一13(b)是一所房子的实际图像。

图4一13测试图像 图4一14是由测试图像得到的实验结果,由图4一14可以看出,本文算法具有

很好的鲁棒性,能够准确地定位图像中直线的起点和终点位置,且不受线段中间

断的影响。对图4一13(b)经过Canny 算子提取的边缘图像应用传统Hough 变换

(eHT)检测线段方法和MHT 得到的结果如图4一14(c),(d)所示,受Canny

算子中阐值和算法步骤(3)中所选取闭值的影响,造成一些边缘点的丢失,MHT

共检测得到25条线段。在CHT 中,ρ和θ的采样均是1,通过分析峰值点处蝶形

单元结构来确定线段的端点坐标。但图像空间中相距很近的两条直线的峰值点蝶

形单元容易相互影响,从而造成误检,如图4一14(c)右下角的三条线段。

图4一14测试图像的实验结果

表4.1是对这两种算法检测到的直线条数,运算时间以及所需参数单元个数

的比较。由表4.1可以看出,MHT在节约计算时间上并不具有很大的优势,但在计

算的过程中只需要固定个数的参数单元。

表1两种算法的性能比较

该算法通过寻找各个参数单元在图像中的匹配模板来获得投票值,从而将满

足单元匹配条件的特征点聚类到同一参数点。它可以准确定位线段的端点,避免

了在内存中预先存储Hough变换的所有参数单元,能够保持与传统算法同样的精

确度,节约大量的存储空间。由于该算法是对各个参数单元进行单独处理,因此

可以采用并行处理的方法来提高算法的运算速度。

第五章总结与展望

边缘作为图像的一个基本特征,为人们描述和识别目标以及解释图像提供了

一个重要的特征参数,同时它还经常被应用于计算机视觉和模式识别等较高层次

的处理中。受滤波过程的影响,图像的边缘容易被模糊。本文介绍了几种经典的

图像滤波方法和边缘检测算子,双边滤波是近年来提出的一种比较新颖的滤波算

法,文中对双边滤波方法做了改进,使其能够平滑混合噪声,并将迭代的双边滤

波方法应用于Cajmy边缘检测过程中,得到很好的边缘检测结果。随着计算机视

觉与模式识别技术的发展,对图像的预处理提出了更高的要求,本文的方法虽然

在仿真时都得到了较好的结果,但要求的计算量比经典方法都要大,因此找到这

些方法的快速算法,达到实时性的要求将是一个很有意义的研究内容。

Hough变换自1962年提出以来有了很大的发展,在信息处理邻域的应用也越

来越广泛。文中对Hough变换检测直线、圆和椭圆的方法做了介绍,并对这些方

法进行了仿真。由于Hough变换的质量对提高图像的识别率非常重要,本文提出

了基于直线连接度量的Hough变换算法—该方法即从全局也从局部定义图像中

的直线,完成对图像中直线的检测,以及参数单元主动搜索图像空间中特征点的

模板匹配Hough变换。这两种方法都是启发式的方法,因此有待于对其进行理论

分析以及算法效率的分析。对于低信噪比的图像,为了解决经典Hough变换方法

运算量大,耗费存储空间大的缺点,众多研究人员提出了许多改进的方法,但由

于参数空间离散化给Hough变换带来的不确定性与不精确性的矛盾,这些方法对

变换质量的提高是有限的,如何在改进Hough变换投票机制的同时解决上述两个

缺点是以后研究的一个重点方向。

边缘检测与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变换的边缘提取

图像处理期末作业 姓名:刘新芳 学号:2012204097 院系:信自院通信系 专业:信号与信息处理

用Hough变换提取边界直线 Hough变换是1962年由Paul Hough提出来的。它所实现的是一种从图像空间到参数空间的映射关系。它具有一系列的优点。例如,由于根据局部度量来计算全面描述参数,因而对于区域边界被噪声干扰或者其他目标遮盖而引起边界发生瞬间间断的情况,它具有很好的容错性和鲁棒性。 原理 Hough变换是图像处理中从图像中识别几何形状的基本方法之一。 Hough 变换是一种利用表决原理的参数估计技术。其基本原理在于利用图像空间和Hough参数空间的点与线的对偶性,把图像空间中的检测问题转换到参数空间。通过在参数空间里进行简单的累加统计,然后在Hough参数空间寻找累加器峰值的方法检测直线。Hough变换的实质是将图像空间内具有一定关系的像元进行聚类,寻找能把这些像元用某一解析形势联系起来的参数空间累计对应点。在参数空间不超过二维的情况下,这种变换效果理想。 将原始图像空间的给定的曲线表达形式变为参数空间的一个点,这样就把原始图像中给定曲线的检测问题转化为寻找参数空间的峰值问题,也即是把检测整体特性转化为检测局部特性。比如直线、椭圆、圆、弧线等。简而言之,Hough 变换思想是:在原始图像坐标系下的一个点对应了参数坐标系中的一条直线,同样参数坐标系的一条直线对应了原始坐标系下的一个点,然后,原始坐标系下呈现直线的所有点,它们的斜率和截距是相同的,所以它们在参数坐标系下对应于同一个点。这样在原始坐标系下的各个点的投影到参数坐标系下之后,看参数坐标系下没有聚集点,这样的聚集点就对应了原始坐标系下的直线。 如果参数空间中使用直线方程,当图像空间直线斜率为无穷大时,会使累加器尺寸和变很大,从而是计算复杂程度过大,为解决这一问题,采用极坐标方程,变换方程如图1所示。 θ ρsin θ = cos y x+ 根据这个方程,原图像空间中的点对应新参数空间中的一条正弦曲线,即点-正弦曲线对偶。检测直线的具体过程就是让θ取遍可能的值,然后计算ρ的值,

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变换直线检测matlab实现

数字图像处理—Hough 变换直线检测,matlab 实现实验八Hough 变换直线检测 一、实验目的 理解Hough变换的原理,了解其应用;掌握利用Hough变换进行直线检测的处理过程 及编程方法。 二、实验内容 利用Hough变换检测直线通常先进行边缘检测,得到只包含边缘的二值图像。再通过 Hough变换,在参数空间检测图像共线点的数量得到直线参数,从而实现直线检测。 1、读入图像(图像需有直线或直线性边缘) 2 、进行图像边缘,得到二值图像 3、实现Hough变换,检测出图像中的直线方程 4、输出结果

三、实验要求 1、编写代码,完成各项实验内容 2、总结实验中遇到问题及解决方案,书写实验报告 %Hougl变换 clc;clear;close all f=imread('l in e.bmp'); % 若是彩色图片转灰度化if len gth(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); pi nfan g=ro un d((row*row+col*colF0.5); A=zeros(2*pinfang,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));% p =cos 0 +sin 0 rho=rho+pinfang+1;%-l:l 转换到1:2l+1 A(rho,thera)=A(rho,thera)+1; end end end end [rho,the⑻二仙d(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));

一种基于改进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变换原理 霍夫变换(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)所示。

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变换的基本原理在于利用点与线的对偶性,将原始图像空间的给定的曲线通过曲线表达形式变为参数空间的一个点。这样就把原始图像中给定曲线的检测问题转化为寻找参数空间中的峰值问题。也即把检测整体特性转化为检测局部特性。比如直线、椭圆、圆、弧线等。 Hough变换的基本思想 设已知一黑白图像上画了一条直线,要求出这条直线所在的位置。我们知道,直线的方程可以用y=k*x+b 来表示,其中k和b是参数,分别是斜率和截距。过某一点(x0,y0)的所有直线的参数都会满足方程y0=kx 0+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)。这个性质就为我们解决问题提供了方法,就是把图像平面上的点对应到参数平面上的线,最后通过统计特性来解决问题。假如图像平面上有两条直线,那么最终在参数平面上就会看到两个峰值点,依此类推。 简而言之,Hough变换思想为:在原始图像坐标系下的一个点对应了参数坐标系中的一条直线,同样参数坐标系的一条直线对应了原始坐标系下的一个点,然后,原始坐标系下呈现直线的所有点,它们的斜率和截距是相同的,所以它们在参数坐标系下对应于同一个点。这样在将原始坐标系下的各个点投影到参数坐标系下之后,看参数坐标系下有没有聚集点,这样的聚集点就对应了原始坐标系下的直线。 首先,初始化一块缓冲区,对应于参数平面,将其所有数据置为0.对于图像上每一前景点,求出参数平面对应的直线,把这直线上的所有点的值都加1。最后,找到参数平面上最大点的位置,这个位置就是原图像上直线的参数。 在实际应用中,y=k*x+b形式的直线方程没有办法表示x=c形式的直线(这时候,直线的斜率为无穷大)。所以实际应用中,是采用参数方程p=x*cos(theta)+y*sin(theta)。这样,图像平面上的一个点就对应到参数p ---theta平面上的一条曲线上,其它的还是一样。 Hough变换推广 1、已知半径的圆

基于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

相关主题
文本预览
相关文档 最新文档