Hough变换检测直线到广义霍夫变换

来源:互联网 发布:水轰5水上飞机技术数据 编辑:程序博客网 时间:2024/06/05 09:53

霍夫变换检测直线

原理

  • (x,y)坐标空间的直线,等价于(m,b)坐标空间的一点,等价于(r,θ)坐标空间的一点

  • (x,y)坐标空间的一点,等价于(m,b)坐标空间的一条直线,等价于(r,θ)坐标空间的一条正弦线

注: 转换为r-θ坐标空间,是因为b-m空间在检测垂直线条m->∞和参数的非线性离散化时会遇到困难。

霍夫变换检测圆

原理

  • (x-a)^2 + (y-b)^2 = r^2

  • (a-x)^2 + (b-y)^2 = r^2


原理同样是转换到参数空间,(x,y)坐标系中经过圆上的一点(x0,y0),在(a,b,r)的参数空间中,就代表一个圆锥,(x0,y0)就是圆心。同一个圆上的点,由于r相同设r0,在参数3维空间中,必然在(a,b,r0)平面上相交于一点;通过这一交点(a0,b0,ro)便可得到圆的参数。


与检测直线的区别
hough检测直线,在hough空间是正弦线的交点;而检测圆,hough空间是圆的交点;

霍夫变换任意可用方程表示的曲线

对于可以用解析方程描述的曲线,使用hough变换检测曲线的算法描述为:

霍夫变换检测任意形状:广义霍夫变换

原理

用一个例子解释原理:
考虑在一个边缘图像中检测一个已知半径的圆,因为圆是旋转对称的,因此只需考虑平移情况。如果希望在边缘图像中尽可能迅速地找到圆的位置,对于比背景亮的圆,它的边缘梯度向量方向垂直圆边界并指向圆中心,如果圆比背景暗,梯度方向背离圆心。由于我们已知圆的半径,理论上我们可以从圆上单个点确定圆的中心。不幸的是,我们不知道哪个点在圆上。我们注意到圆上所有的像素都拥有同样的特性,这个特性就是基于梯度向量可以构建出圆的中心,这样我们就可以找到圆的位置。


我们可以用以下步骤完成已知半径圆检测(得到中心坐标):
1. 创建一个数组累积圆心出现在某个位置的次数,数组初始化为0;
2. 遍历所有边缘点位置、该点的梯度向量以及已知半径求出一个潜在的圆心位置;
3. 将累计数组对应位置的数组值加一
4. 遍历完所有边缘点后,累积数组中将包含所寻找圆心坐标的投票,设定一个阈值可得到圆中心位置;

上述算法运算时间与目标图像边缘点数量成比例,与模板大小无关,与圆的大小无关(只是遍历目标图像边缘点,利用是模板的先验信息)。


扩展到检测任意形状:
- 任意物体边界上的梯度向量不是必然指向一个参考点;那我们可以建立边缘点信息(梯度方向)与参考点位置(r向量)间的关系表,此表成为R-table;
- 在检测过程中,我们对于给定边缘点信息,我们通过查表然后计算出参考点位置,然后根据投票机制,确定投票最多的位置。
- r向量指参考点到边界点的向量,向量包括大小(r)和方向(α);因此关系表表示为梯度方向的函数;即φ-r(φ)-α(φ);
由于形状不规则,可能存在每个φ对应多个r向量。

边缘点与参考点之间的计算关系:
这里写图片描述
这里写图片描述

实现方法

R表建立详细步骤为:
这里写图片描述

检测过程:
这里写图片描述

对于旋转尺度变换的检测:
这里写图片描述
这里写图片描述

优缺点

优点:

  • 对噪声不敏感
  • 容忍轻微变形

缺陷:

  • 需要大量的存储空间
  • 对于机器视觉应用还不够快,用来搜索对象的累积空间会在很短的时间内变得非常大,但是内部是可以并行的!
  • 速度的改进方向有:金字塔加速,减少累积数组的尺寸!

参考资料:

  1. Generalized Hough Transform(GHT) Ballard and Brown, section 4.3.4
  2. 机器视觉算法与应用
  3. http://www.aiseminar.cn/bbs/forum.php?mod=viewthread&tid=1479
  4. 图像处理、分析与机器视觉(第三版)