`
zuroc
  • 浏览: 1311138 次
  • 性别: Icon_minigender_1
  • 来自: 江苏
社区版块
存档分类
最新评论

[转载]霍夫变换

阅读更多
[转载]霍夫变换

作者:ISee    转贴自:ISee组内部资

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

我们先看这样一个问题:
设已知一黑白图像上画了一条直线,要求出这条直线所在的位置。

我们知道,直线的方程可以用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)。

这个性质就为我们解决问题提供了方法:

首先,我们初始化一块缓冲区,对应于参数平面,将其所有数据置为0.

对于图像上每一前景点,求出参数平面对应的直线,把这直线上的所有点的值都加1。

最后,找到参数平面上最大点的位置,这个位置就是原图像上直线的参数。

上面就是霍夫变换的基本思想。

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

在实际应用中,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等的会议文章也非常好。不过,要不想很偏理论,
这些玩艺儿也没什么要看的。



分享到:
评论

相关推荐

    霍夫变换_霍夫变换检测_霍夫变换进行直线检测_霍夫变换_

    总结起来,"霍夫变换_霍夫变换检测_霍夫变换进行直线检测"这个主题是关于使用MATLAB通过霍夫变换在二值图像中检测直线的过程,涉及到图像预处理、边缘检测、霍夫变换、峰值检测以及结果可视化等一系列步骤。...

    霍夫变换检测圆和直线

    霍夫变换是数字图像处理领域中的一个重要算法,用于检测图像中的特定几何形状,如直线和圆。本课程设计主要关注如何利用霍夫变换来实现这一功能。霍夫变换的基本思想是将图像空间中的几何形状(如直线或圆)转换到...

    霍夫变换检测直线

    霍夫变换检测直线 霍夫变换是图像处理中从图像中识别几何形状的基本方法之一。霍夫变换的基本原理在于利用点与线的对偶性,将原始图像空间的给定的曲线通过曲线表达形式变为参数空间的一个点。这样就把原始图像中...

    基于matlab的霍夫变换

    在图像处理领域,霍夫变换(Hough Transform)是一种用于检测图像中特定形状,如直线、圆等的算法。在本案例中,我们关注的是直线检测,这在车牌识别、条形码检测、道路分析等诸多应用中都有重要作用。MATLAB作为一...

    基于霍夫变换的矩形检测matlab实现

    本资源主要介绍如何利用MATLAB实现基于霍夫变换的矩形检测,这对于理解图像处理的基本原理以及进行相关毕业设计极具价值。 霍夫变换是一种在图像中检测直线或曲线的算法,最早由D.W.霍夫于1959年提出。它通过在参数...

    matlab基于霍夫变换实现虹膜识别程序源码_matlab_霍夫变换_虹膜识别_hough变换_包含图片集

    资源名:matlab基于霍夫变换实现虹膜识别程序源码_matlab_霍夫变换_虹膜识别_hough变换_包含图片集 资源类型:matlab项目全套源码 源码说明: 全部项目源码都是经过测试校正后百分百成功运行的,如果您下载后不能...

    霍夫变换_直线识别_霍夫变换_图像处理_

    霍夫变换是图像处理领域中的一个关键算法,主要用于检测图像中的特定几何形状,尤其是直线和曲线。这个技术是由美国科学家Richard D. Hough在1959年提出的,因此得名“霍夫变换”。它的核心思想是将图像空间中的几何...

    霍夫变换MATLAB程序代码

    霍夫变换是一种在图像处理和计算机视觉领域广泛应用的数学方法,主要用于检测图像中的直线、圆、椭圆等形状。在MATLAB中实现霍夫变换,可以帮助我们从图像中提取出这些几何特征,对于识别和分析图像非常有帮助。这篇...

    图像识别 广义霍夫变换

    ### 图像识别中的广义霍夫变换技术解析 #### 引言 图像识别技术作为计算机视觉领域的核心之一,在诸多应用场景中发挥着重要作用。其中,针对特定形状的检测一直是研究的重点。传统的霍夫变换主要用于规则形状(如...

    MATLAB霍夫变换查找图像圆心

    本主题聚焦于MATLAB中的霍夫变换(Hough Transform),这是一种在图像中检测特定形状,如直线、圆等的有效方法。在给定的"MATLAB霍夫变换查找图像圆心"的项目中,我们将深入探讨如何利用这种技术来定位图像中的圆心...

    【OpenCV入门教程之十四】OpenCV霍夫变换:霍夫线变换,霍夫圆变换合辑 - 【浅墨的游戏编程Blog】毛星云(浅墨)的专

    【OpenCV入门教程之十四】主要讲解了OpenCV中的霍夫变换,包括霍夫线变换和霍夫圆变换。霍夫变换是一种图像处理中的特征提取技术,由Paul Hough在1962年提出,主要用于从黑白图像中检测直线和曲线。它的基本思想是在...

    霍夫变换源程序

    霍夫变换是计算机视觉领域中一种重要的几何形状检测方法,主要用来识别图像中的直线、圆、椭圆等形状。在本实例中,我们将探讨如何利用OpenCV库来实现图像的霍夫变换功能,以检测图像中的直线。 OpenCV(开源计算机...

    c#霍夫变换源码

    根据给定文件的信息,本文将围绕“C#霍夫变换源码”展开,重点解析代码中的关键部分,并介绍霍夫变换的基本概念、应用场景以及在该示例中的具体实现。 ### 霍夫变换简介 霍夫变换(Hough Transform)是一种在图像...

    用霍夫变换地方法来检测圆的代码

    霍夫变换是图像处理领域中一种非常重要的几何特征检测算法,尤其在形状识别,特别是直线和圆的检测中被广泛应用。本资源提供的“用霍夫变换地方法来检测圆的代码”是一个基于霍夫变换实现圆检测的MATLAB程序,文件名...

    随机霍夫变换 圆检测

    随机霍夫变换(Randomized Hough Transform,RHT)是一种图像处理中的几何形状检测方法,尤其在圆形检测中被广泛应用。传统的霍夫变换是通过在参数空间中积累边缘点对应的参数值来检测直线或曲线,但这种方法对于...

    杭电研究生数字图像处理——1、霍夫变换检测蓝线和圆

    《杭电研究生数字图像处理——1、霍夫变换检测蓝线和圆》 在数字图像处理领域,霍夫变换(Hough Transform)是一种强大的技术,常用于检测图像中的直线、曲线甚至多边形。本课题的重点是利用霍夫变换来识别和定位...

    霍夫变换找圆

    霍夫变换是一种在数字图像处理领域中用于检测直线、圆和其他形状的常见算法。这个方法基于几何变换理论,由Paul Viola和Marvin Smith在1950年代提出。在这个场景中,我们专注于霍夫变换在找圆上的应用,这在诸如机器...

    霍夫变换的直线检测

    霍夫变换是一种在图像处理领域广泛使用的算法,主要用于检测图像中的特定形状,如直线、圆、椭圆等。在这个特定的案例中,我们关注的是直线检测。霍夫变换的直线检测是通过将图像中的像素点转换到霍夫空间来实现的,...

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

    霍夫变换(Hough Transform)的主要思想: 一条直线在平面直角坐标系(x-y)中可以用y=ax+b式表示,对于直线上一个确定的点(x0,y0),总符合y0-ax0=b,而它可以表示为参数平面坐标系(a-b)中的一条直线。因此,图像中的一...

    霍夫变换圆检测(标准MATLAB)

    ### 霍夫变换圆检测(标准MATLAB) #### 原理介绍 霍夫变换是一种在计算机视觉和图像处理领域广泛应用的技术,主要用于检测图像中的特定几何形状,如直线、圆、椭圆等。该变换的基本思想是通过将图像空间中的点...

Global site tag (gtag.js) - Google Analytics