霍夫线/圆变换从原理到源码详解

1 简述

  霍夫变换是一个经典的特征提取技术,本文主要说的是霍夫线/圆变换,即从图像中获取直线与圆,同时需要对图像进行二值化操作,效果如下。
这里写图片描述
  霍夫变换目的通过投票程序在特定类型的形状内找到对象的不完美示例,这个投票程序是在一个参数空间中进行的,在这个参数空间中,候选对象被当作所谓的累加器空间中的局部最大值来获得,所述累加器空间由用于计算霍夫变换的算法明确的构建,霍夫变换不仅能够识别出图像中有无需要检测的图形,而且能够定位到该图像(包括位置、角度等),有标准霍夫变换,多尺度霍夫变换,统计概率霍夫变换3种较为经典的方法,主要优点是能容忍特征边界描述中的间隙,并且相对不受图像噪声的影响。

2 标准霍夫线变换原理

2.1 霍夫变换直线的方程

  直线的方程形式有截距式,斜截式,一般式,点斜式等,但是这些形式都有“奇异”情况,其中一个截距为0,斜率为0, c=0(通常把c除到等式左面,减少一个参数的搜索),另外某些形式的参数空间不是闭的,比如斜截式的斜率k,取值范围从0到无穷大,给量化搜索带来了困难。所以在霍夫线变换中采用了如下方程的形式:

p=xcosθ+ysinθ p = x c o s θ + y s i n θ

其中 p p θ 都是极坐标下点的极径与极角(也可以理解 p p 是原点离直线最近的距离),但并不是极坐标方程,因为还在笛卡尔坐标下表示,两个参数的意义如下图:
这里写图片描述
  这个方程的巧妙之处是角度与距离这两个参数都是有界的,而且没有奇异的情况,因此可以在参数空间中进行搜索。同时,直线霍夫变换有2个参数通过这一个等式相关联,所以程序在投票阶段只需要遍历其中一个,通过等式获取另一个参数从而进行投票与搜索峰值。

2.2 霍夫空间

  对于直线来说,可以将图像的每一条直线与一对参数 ( p , θ ) 相关联,这个参数 (p,θ) ( p , θ ) 平面有时被称为 霍夫空间,用于二维直线的集合,因此,对于某一指定的点,不同的 (p,θ) ( p , θ ) 代表了不同的直线,我们把 (p,θ) ( p , θ ) 之间的关系通过图像表示出来——固定一个点(3,4),角度取[0,2 π π ]时, r r 的范围取值情况:
这里写图片描述
会发现曲线的形状类似一条正弦曲线,通常 p 越大,正弦曲线的振幅越大,反而就会越小。

2.3 检测直线的方法

  可以得到一个结论,给定平面中的单个点,那么通过该点的所有直线的集合对应于(r,θ)平面中的正弦曲线,这对于该点是独特的。一组两个或更多点形成一条直线将产生在该线的(r,θ)处交叉的一条或多条正弦曲线。因此,检测共线点的问题可以转化为找到并发曲线的问题。
  具体的,通过将霍夫参数空间量化为有限间隔或累加器单元来实现变换。随着算法的运行,每个算法都把 (xi,yi) ( x i , y i ) 转换为一个离散化的 (r,θ) ( r , θ ) 曲线,并且沿着这条曲线的累加器单元被递增。累加器阵列中产生的峰值表示图像中存在相应的直线的有力证据。 换句话说,将每个交点看成一次投票,也就是说 A(r,θ)=A(r,θ)+1 A ( r , θ ) = A ( r , θ ) + 1 ,所有点都如此进行计算后,可以设置一个阈值,投票大于这个阈值的可以认为是找到的直线。

2.4 一个例子

  举一个具体的例子,来体现霍夫变换的流程同时更深的理解一下该算法(此例子摘取某博客,下文会给出所有参考博客的链接)

  霍夫变换可用于识别最适合一组给定边缘点的曲线的参数。该边缘描述通常从诸如Roberts Cross,Sobel或 Canny边缘检测器的特征检测算子获得,并且可能是嘈杂的,即其可能包含对应于单个整体特征的多个边缘片段。此外,由于边缘检测器的输出仅限定图像中的特征的位置,所以霍夫变换进一步是确定两个特征是什么(即检测其具有参数(或其他)的特征描述)以及 它们有多少个存在于图像中。
  为了详细说明霍夫变换,我们从两个闭合矩形的简单图像开始。
这里写图片描述
使用 Canny边缘检测器可产生一组边界描述的这个部分,如下图:
这里写图片描述
  这里我们看到了图像中的整体边界,但是这个结果并没有告诉我们边界描述中的特征的身份(和数量)。在这种情况下,我们可以使用Hough(线检测)变换来检测该图像的八个单独的直线段,从而确定对象的真实几何结构。
  如果我们使用这些边缘/边界点作为Hough变换的输入,每一个点通过遍历不同的 (r,θ) ( r , θ ) 都会在笛卡尔空间中生成一条曲线,当被视为强度图像时, 累加器阵列看起来像如下所示:
这里写图片描述
可以利用直方图均衡技术使得图像可以让我们看到包含在低强度像素值中的信息模式,如下图:
这里写图片描述
  注意,虽然r​和θ​是概念上的极坐标,但是累加器空间以横坐标θ​和纵坐标r​的矩形绘制 。请注意,累加器空间环绕图像的垂直边缘,因此实际上只有8个实际峰值。
  由梯度图像中的共线点生成的曲线(r,θ) 在霍夫变换空间中的峰中相交。这些交点表征原始图像的直线段。有许多方法可用于从累加器阵列中提取这些亮点或局部最大值。例如,一个简单的方法涉及阈值处理,然后 对累加器阵列图像中孤立的亮点集群进行一些细化处理。这里我们使用相对阈值来提取(r,θ) ,对应于原始图像中的每条直线边缘的点。(换句话说,我们只采用累加器数组中的那些局部最大值,其值等于或大于全局最大值的某个固定百分比。)
  从Hough变换空间(即,反霍夫变换)映射回笛卡尔空间产生一组图像主题的线描述。通过将该图像叠加在原始的反转版本上,我们可以确认霍夫变换找到两个矩形的8个真实边的结果,并且因此展示出了遮挡场景的基础几何形状。
这里写图片描述
  请注意,在这个简单的例子中,检测到的和原始图像线的对齐精度显然不完美,这取决于累加器阵列的量化。(还要注意许多图像边缘有几条检测线,这是因为有几个附近的霍夫空间峰值具有相似的线参数值,存在控制这种效应的技术,但这里没有用来说明标准霍夫变换)
  还要注意,由霍夫变换产生的线条的长度是无限的。如果我们希望识别产生变换参数的实际线段,则需要进一步的图像分析以便查看这些无限长线的哪些部分实际上具有点。
  为了说明Hough技术对噪声的鲁棒性,Canny边缘描述已被破坏1%(由椒盐噪声引起), 在Hough变换之前,如图12所示。
这里写图片描述
霍夫空间如下图所示:
这里写图片描述
将这个结果反霍夫变换(相对阈值设置为40%,并将它覆盖在原来的结果上)
这里写图片描述
可以通过变换图像来研究Hough变换对特征边界中的间隙的敏感性,如下图:
这里写图片描述
然后我们再将其变换到霍夫变换空间,如下图
这里写图片描述
然后使用40%的相对阈值去对图像反霍夫变换(同样也是叠加在原图上)
这里写图片描述
  在这种情况下,因为累加器空间没有接收到前面例子中的条目数量,只能找到7个峰值,但这些都是结构相关的线。

3 霍夫线变换的算法流程

3.1 标准霍夫线变换算法流程

  1. 读取原始图像,并转换成灰度图,利用阈值分割或者边缘检测算子转换成二值化边缘图像
  2. 初始化霍夫空间, 令所有 Num(θ,p)=
  • 20
    点赞
  • 62
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值