zoukankan      html  css  js  c++  java
  • VC6.0图形处理8Hough变换(上)

      Hough变换的基本思想是利用点—线的对偶性,即图像空间共线的点对应在参数空间里相交的线,反过来,在参数空间中交与同一个点的所有直线在图像空间里都有贡献的点与之对应。

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

                                                                 (3.1)

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

                                                                (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变换吧在图像空间中的直线检测问题转换到参数空间里对点的检测问题,通过在参数空间里进行简单的累加统计完成检测任务。

    在具体的计算过程中,需要将参数空间M一C离散化为二维的累加数组,设这个数组为(m,c),如图3一3所示,同时设[和分别为斜率和截距的取值范围。开始时置数组A全为零,然后对每一个图像空间中的给定边缘点,

    让m取遍内所有可能的值,并根据式 (3.2)算出对应的。再根据m和c的值(设都已经取整)据m和。的值(设都已经取整)对数组元素A(m,c)=A(m,c)+I。累加结束后,通过检测数组A中局部峰值点的位置来确定参数m和c的值。

        如果直线的斜率无限大(比如x=a形式的直线),采用式(3.2)是无法完成检测的,为了能够正确识别和检测任意方向的和任意位置的直线,可以可以用Duda和Hart提出的直线极坐标方程来替代 (3.1)式:

                                             (3.1)

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

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

                                            (3.4)

    其中,为参数分割段数:,是参数的分割段数,是为图像中的点距原点的距离最大值。具体的计算过程与上文相似,将参数相应的置换即可。

         利用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,设他们对应的边的倾斜角度为;

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

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

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

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

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


  • 相关阅读:
    AngularJS学习之旅—AngularJS 服务(八)
    Svchost进程和共享服务病毒原理
    服务劫持
    利用BHO实现浏览器劫持
    动态反调试
    常用的静态反调试技术及其规避方法
    teb, peb,seh 结构
    线程本地存储tls
    注入技术总结
    注入技术--远程线程注入
  • 原文地址:https://www.cnblogs.com/libing64/p/2878769.html
Copyright © 2011-2022 走看看