霍夫变换(Hough Transform)

标签: 图像处理 算法
1289人阅读 评论(0) 收藏 举报
分类:

霍夫变换是图像处理中从图像中识别几何形状的基本方法之一,应用很广泛,也有很多改进算法。最基本的霍夫变换是从黑白图像中检测直线(线段)。

我们先看这样一个问题:


设已知一黑白图像上画了一条直线,要求出这条直线所在的位置。

我们知道,直线的方程可以用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)。这个性质就为我们解决问题提供了方法:

  1. 首先,我们初始化一块缓冲区,对应于参数平面,将其所有数据置为0.
  2. 对于图像上每一前景点,求出参数平面对应的直线,把这直线上的所有点的值都加1。
  3. 最后,找到参数平面上最大点的位置,这个位置就是原图像上直线的参数。

上面就是霍夫变换的基本思想。就是把图像平面上的点对应到参数平面上的线,最后通过统计特性来解决问题。假如图像平面上有两条直线,那么最终在参数平面上就会看到两个峰值点,依此类推。

在实际应用中,y=k*x+b形式的直线方程没有办法表示x=c形式的直线(这时候,直线的斜率为无穷大)。所以实际应用中,是采用参数方程p=x*cos(theta)+y*sin(theta)。这样,图像平面上的一个点就对应到参数p---theta平面上的一条曲线上。其它的还是一样。

再看下面一个问题:


我们要从一副图像中检测出半径以知的圆形来。这个问题比前一个还要直观。我们可以取和图像平面一样的参数平面,以图像上每一个前景点为圆心,以已知的半径在参数平面上画圆,并把结果进行累加。最后找出参数平面上的峰值点,这个位置就对应了图像上的圆心。在这个问题里,图像平面上的每一点对应到参数平面上的一个圆。

把上面的问题改一下,假如我们不知道半径的值,而要找出图像上的圆来。这样,一个办法是把参数平面扩大称为三维空间。就是说,参数空间变为x--y--R三维,对应圆的圆心和半径。图像平面上的每一点就对应于参数空间中每个半径下的一个圆,这实际上是一个圆锥。最后当然还是找参数空间中的峰值点。不过,这个方法显然需要大量的内存,运行速度也会是很大问题。

有什么更好的方法么?


我们前面假定的图像都是黑白图像(2值图像),实际上这些2值图像多是彩色或灰度图像通过边缘提取来的。我们前面提到过,图像边缘除了位置信息,还有方向信息也很重要,这里就用上了。根据圆的性质,圆的半径一定在垂直于圆的切线的直线上,也就是说,在圆上任意一点的法线上。这样,解决上面的问题,我们仍采用2维的参数空间,对于图像上的每一前景点,加上它的方向信息,都可以确定出一条直线,圆的圆心就在这条直线上。这样一来,问题就会简单了许多。

接下来还有许多类似的问题,如检测出椭圆,正方形,长方形,圆弧等等。这些方法大都类似,关键就是需要熟悉这些几何形状的数学性质。霍夫变换的应用是很广泛的,比如我们要做一个支票识别的任务,假设支票上肯定有一个红颜色的方形印章,我们可以通过霍夫变换来对这个印章进行快速定位,在配合其它手段进行其它处理。霍夫变换由于不受图像旋转的影响,所以很容易的可以用来进行定位。

霍夫变换有许多改进方法,一个比较重要的概念是广义霍夫变换,它是针对所有曲线的,用处也很大。就是针对直线的霍夫变换也有很多改进算法,比如前面的方法我们没有考虑图像上的这一直线上的点是否连续的问题,这些都要随着应用的不同而有优化的方法。

推荐杂志


顺便说一句,搞图像处理这一行,在理论方面,有几本杂志是要看的,自然是英文杂志,中文期刊好象没有专门的图像处理期刊,当然也有不少涉及这方面的期刊,但事实求是来说,的确比英文杂志水平差很多。

‘IEEE Transactions on Pattern And Machine Intelligence’

‘IEEE Transactions on Image Processing’

是最重要的两本,其它的如ICIP等的会议文章也非常好。不过,要不想很偏理论,这些玩艺儿也没什么要看的。

源文档 :<http://www.chinaai.org/ip/image-transform/hough-transform.html>

查看评论

Hough transform(这篇文字比较形象地阐述了霍夫变换的基本原理,简单易懂)

霍夫变换是图像处理中从图像中识别几何形状的基本方法之一,应用很广泛,也有很多改进算法。最基本的霍夫变换是从黑白图像中检测直线(线段)。 我们先看这样一个问题: 设已知一...
  • hdanbang
  • hdanbang
  • 2014-12-04 16:08:10
  • 1093

霍夫变换(Hough Transform)直线检测

在图像处理中,如果图像由已知形状和大小的物体组成,需要找出物体的形状的问题。在解决这些问题的许多可能方法中,一种是在图像中移动一个合适形状和大小的掩模,寻找图像与掩模的相关性,因由于形状变形,旋转、缩...
  • utimes
  • utimes
  • 2013-12-05 15:51:55
  • 13832

霍夫变换 ( Hough Transform) 直线检测(Matlab 源码)

霍夫变换直线检测的基本原理
  • xiaoxiao133
  • xiaoxiao133
  • 2015-10-02 18:06:25
  • 2203

霍夫变换概述霍夫变换(Hough Transform)是图像处理中的一种特征提取技术

霍夫变换概述霍夫变换(Hough Transform)是图像处理中的一种特征提取技术,该过程在一个参数空间中通过计算累计结果的局部最大值得到一个符合该特定形状的集合作为霍夫变换结果。 霍夫变换于19...
  • kjkuio
  • kjkuio
  • 2014-05-29 18:36:51
  • 1231

以一般化视角串联霍夫变换(hough transform),从直线到圆再到广义霍夫变换

       计算机视觉中经常需要识别或者定位某些几何图形,比如直线、圆、椭圆,还有其他一些图形。检测直线的霍夫变换提供了在图像中寻找直线的一种算法,是最简单的一种情形,后来发展到检测圆、椭圆、还有一...
  • cy513
  • cy513
  • 2009-06-15 08:36:00
  • 39655

灰度图像--图像分割 霍夫变换(Hough Transform)--直线

学习DIP第50天 转载请标明本文出处:http://blog.csdn.net/tonyshengtan ,出于尊重文章作者的劳动,转载请标明出处!文章代码已托管,欢迎共同开发:https://...
  • TonyShengTan
  • TonyShengTan
  • 2015-02-16 09:12:49
  • 4658

图像处理————霍夫(HOUGH)变换

霍夫(HOUGH)变换         霍夫变换是图像处理中用来从图像中分离出具有某种相同特征的几何形状(通常,直线,圆等)的常用方法。经典的霍夫变换常用来检测直线,圆,椭圆等。 为什么要进行...
  • sinat_34035510
  • sinat_34035510
  • 2016-06-05 11:02:22
  • 2116

Hough变换以及C实现

霍夫变换于1962年由PaulHough 首次提出,后于1972年由RichardDuda和PeterHart推广使用,经典霍夫变换用来检测图像中的直线,后来霍夫变换扩展到任意形状物体的识别,多为圆和...
  • einsdrw
  • einsdrw
  • 2014-08-22 15:56:42
  • 4115

hough变换 矩形检测

//#include "cv.h" //#include "highgui.h" #include #include #include #include #include #include #i...
  • weiliangdemo
  • weiliangdemo
  • 2015-05-30 19:26:05
  • 1085

霍夫变换(Hough)

霍夫变换(Hough)是一个非常重要的检测间断点边界形状的方法。它通过将图像坐标空间变换到参数空间,来实现直线与曲线的拟合。...
  • sudohello
  • sudohello
  • 2016-05-06 22:41:53
  • 19282
    个人资料
    等级:
    访问量: 9万+
    积分: 1497
    排名: 3万+
    最新评论