hough变换 - 从图象空间到参数空间的投票检测_拔剑-浆糊的传说_新浪博客

好不容易写到一半丢了,随便写几个字。

   Hough变换将目标识别转化为参数空间的投票问题,然后找出投票最多的参数点,认为其是最大可能的检测。 

   其核心思想是把图像中属于某种图形的点集(二维)映射到一个点(可以是高维)上,这个点记录了点集中点的数目,使得程序通过搜索峰值找到该点,这个点就是后面要说到的图形的参数,而该参数的范围就叫做参数空间。hough变换不仅能够识别出图像中有无需要检测的图形,而且能够定位到该图(包括位置、角度等),这就非常有用了。

   换句话说,hough变换本质上是将(x,y)空间的每个前景点转化为参数空间的一条曲线(或曲面),遍历所有的点全部映射到参数空间,参数空间某一点取值越大(越浓),表明存在特征的可能越大,选取参数空间满足阈值的一个或多个点,实现一个或多个目标或对象的检测,同时它可以看成一个聚类问题。

一、直线检测

   (1) (x,y)平面的一点(x0,y0)总可以表示成一系列直线簇的交点,这些直线簇可以表示成
           y0 = a * x0 + b          -- a,b可变,但满足前述方程
       因此,对应到参数空间(a,b),它对应于一条直线 
          b = -a*x0 + y0

   (2) (x,y)空间一条直线(斜率一定,截距一定),
           y = a0*x + b0
        影射到参数空间(a,b),对应于一个点(a0,b0)

   (3) 因此,在(x,y)平面枚举每一个点,都对应到(a,b)平面的一条直线,如果(x,y)有一条直线非常明显,
       那么对应到(a,b)参数空间,就存在一个“很浓的交点”,这些角点由(x,y)空间每一点对应的(a,b)
       空间的直线相交而成。因此,只要找到(a,b)参数空间“最浓”的若干个点,那么相应(x,y)空间的直线
       就被检测出来了。

    在实际预算中,每枚举(x,y)空间一点,在(a,b)参数空间在一定取值范围把所有离散空间对应直线经过的点
    (a',b')都标记以下(如加1),最终只要在(a,b)离散空间查找标记次数最多的点,那么对应的(x,y)空间
    的直线就寻找到了。

   [说明}
       (1)鉴于 x = C (C为常数)无法用 y = a*x + b 表示,通常我们用另外一个参数空间来寻找可能的直线 (r, theta), 其中
             (*)r表示了(x,y)空间原点到 (x,y)空间直线的垂直距离,
              (*) theta表示了(x,y)空间原点到 (x,y)空间直线的垂线的角度
       (2) 由此,
             (*)(x,y)空间一个点(x0,y0) -> 无数个极坐标方程 ρ = x* cos(theta) + y * sin(theta), 且均相交于(ρ0 ,theta0)
             (*)(x,y)空间一条直线对应(ρ,theta)空间一个点(ρ0, theta0) 
       (3)因此,用上面同样的方法,可以在极坐标参数空间得到任意方向直线的检测

   直线的hough检测,本质上是参数空间(a,b)或(ρ,theta)在一定取值范围内的全局优化问题:
    (1)对每个(x,y)空间前景点,“绘制”参数空间对应的参数方程曲线,累加后得到参数空间每一个点对应的“浓度”
    (2)在参数空间可能的取值范围内,全局搜索最浓的一个或者几个点,得到一个或几个直线。
   实际上,直线检测在二维参数空间,可以用二维数组表示每个点的浓度。 
  

二、圆的检测
   
   (x,y)空间中,过圆心(a,b),半径为r的圆满足
             (x-a)^2 + (y-b)^2 = r^2

   (1)因此,对于(x,y)空间圆上任意一点满足
             (a-x0)^2 + ( b - y0)^2 = r^2
        实际上,对应于参数空间(a,b,r)的一个圆锥体。

   (2)在(x,y)空间任何一个圆,对应于(a,b,r)参数空间的一个点(a0,b0,r0)

  采用类似于直线检测的原理,枚举(x,y)空间每一个圆上的点,得到一系列圆锥,最终那么多圆锥在(a,b,r)三维空间形成最浓的一个点(a0,b0,r0)
  自然而然就影射到(x,y)空间的待求的圆。
 
  可见,圆的检测计算非常复杂:
    (1)对每个(x,y)空间前景点,“绘制”参数空间(a,b,r) 对应的锥体, 参数空间(a,b,r)的取值范围取决于当前图像的大小
    (2)在(a,b,r)三维空间取值空间,逐个取其浓度,得到一个或若干个较浓的点,实现了一个或多个圆的检测

  又及,如果采用极坐标方程
         ρ²-2acosθ-2bsinθ+a²+b²-R²=0
  对(x,y)空间每个已知点,  ρ、θ已知,因此同样对应(a,b,R)一个锥体,因此计算方法和前同。

  
 
三、和普通最小二乘法的区别与联系

  普通的最小二乘法也可以求取一个图像上可能的直线或者圆,但建立模型后:
  (1)普通的最小二乘法一般同时只能检测一个物体,并且把所有的点无差别考虑了,因此适用范围较小
  (2)Hough变换的长处在于可以同时检测多个直线或者圆(本质上就是在参数空间寻找“最浓”的那若干个点)
       并且,这种接近于并行算法的好处在于,不是全局建模,适合多目标检测。

四、广义hough变换
    (http://hi.baidu.com/luckzpz/item/1b01bf1314a0abadfeded5d9)

       霍夫变换检测椭圆如果使用椭圆的标准式,那么将会有五个参数,它们通过标准式相关,检测圆就已经相当耗时了,如果再用这中方程形式处理势必失去实际用途。
 
       Ballard (1981) 一般化了霍夫变换(Hough,1962),利用图形梯度量加快算法速度,形成了广义霍夫变换。
 
       透过前面的检测直线、圆、广义霍夫变换,已经可以提取出霍夫变换的一个本质——给出图形的一个描述模式,比如图形点集的方程、函数、表格等,然后利用这个模式加上遍历参数空间,把属于该模式的图形点集投射到参数空间的一个点(实际的离散情况一般不会完美的集中到一点),这个点记录的是图形点数目。
       广义霍夫变换之所以能处理任意形状的图形并不是找到了可以表示任意图形的方程(这是不可能的),而是使用表的形式描述一种图形,把图形边缘点坐标保存在一张表中,那么该图形就确定下来了,所以其实无论是直线(其实是线段)、圆、椭圆还是其他形状的几何图形,都可以使用同一方法处理,所不同的是这时候的图形是自定义的,是实在的,而代数方程表示的模式是连续的、抽象的,圆的方程只有一种,但自定义的圆却是无穷的,只要你认为它足够圆了就可以。当然两种表示都会有各自的优势和局限。有了表之后就需要找到一种可以把图形点集投射到参数空间的一点的转换算法,例如直线和圆霍夫变换通过方程(函数)及遍历把点集进行投射,使得属于某直线或圆的点集中到一个点;那么仅有一张描述图形边缘坐标点的表如何进行投射呢?我们可以把这张表看作是模板,进行模板匹配,大部分的点匹配成功也就可以理解为这些点都投射到一个点上,不过这时候不需要再搜索参数空间峰值了,这种模式可以认为是参数间没有任何关联,所以是完全的遍历。但有旋转加上缩放的情况模板匹配型的霍夫变换是十分耗时的,也可以想象成因为参数不相关所以增加遍历搜索时间。Ballard (1981) 的广义霍夫变换最精妙之处在于为参数增加了两个关联,使得有平移和旋转(无缩放)的情况只需要遍历一个参数,三个参数分别是图形的中心坐标(横纵),旋转角度(相对参考图形),Ballard 的算法预先把参考图形边缘点对中心的径向量保存起来,利用待搜索图形边缘点的梯度方向(用相对坐标轴的角度表示)作为索引找到相应的径向量,加上该量后就完成了投射,所以要遍历的参数只有旋转角度,所以说有两个关联。当然如果加上缩放就要遍历两个参数,这也只是和霍夫检测圆的规模一样而已。这种广义霍夫变换的图形表不再是直接保存坐标,而是边缘点的梯度加上径向量,给出了这些量同样的也就能够表示出一种图形了。然而这种广义霍夫变换也是有缺陷的,不少后来者提出了改进方法,这不在本文讨论范围。
      再来强调一次,霍夫变换就是通过图形的一种表示模式,加上一种转换方法,把图形的点集投射到一个点上以便检测。我们已经能够知道,参数个数越少,需要遍历的参数个数约少(关联越多),参数空间越小则处理速度越快。所以设计一种合理的转换方法非常关键。
       对于一种图形,在现实世界中可以有多种形变,线性的如:平移、旋转、透视;非线性的如:径变、切变、扭曲。每多考虑一种形变都会增加参数,比如把椭圆看作是圆的透视形变,结果多了两个参数,理论上可以去遍历每一个参数空间,但这不能满足实时性要求,所以参数之间约束(关联)越多则处理速度越快,Ballard的广义霍夫变换就是例子,这就需要发挥主观创造力了。
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值