一,概念:

Hough变换用于在图像中检测特定性状,如线,圆,矩形等,广泛用于图像识别领域。

二,原理:

1,Hough变换直线检测:

一条直接的方程可表示为:y = a*x + b ,当a,b固定时直线固定,在图像中可任意取两个不同的x,计算得到相应y则可绘制出这条直线。

而直线检测,则是上述过程的逆过程:已知一系列的点,求取a,b参数的过程。

b = –x*a+y

这里表示对于任意的点(x0,y0),在参数空间Space(a,b)中有一条对应的直线: b = –x0 * a + y0 ,所以对于原图像中的直线上的点,在参数空间中有相应数目的直线,且这些直线必相交于(a,b),得到这个相交点,则原直线方程可求出。

NOTE:

对于a=0,即直线为水平的情况,上述方法不适用,因为所有的点(x,y)在参数空间中对应的直线均为b=y,无交点。

所以发展出另外一种算法,不用Space(a,b),而是Space(theta,rho),即直线方程表示为:rho = x * cos(theta) + y * sin(theta) 。求theta,rho的方法参照上面的方法。

2,Hough变换圆检测:

一个圆表示为:(x+a)^2 + (y+b)^2 = R^2 , 即将图像空间的点映射到参数空间Space(a,b,R),然后计算出参数空间中的交点,即得到a,b,R,圆检测得到。

NOTE : 上述方法前提条件是理想情况下的一条线/圆检测,在实际工程中多条直线,多个圆的的情况,需要一个阈值将参数空间的大部分点去除,剩下的就是检测结果。

三,思考:

类似于Hough变换这样的算法的核心是,在某个角度空间看似无解或者很困难的任务,转换到一个恰当的空间中或许会非常简单。

难点是,这样的一个转换过程也许会很难想到。

Hough变换的基本思考的更多相关文章

  1. hough变换检测线和圆

    参考:http://blog.163.com/yuyang_tech/blog/static/21605008320130233343990/ 这篇介绍的基本思想. http://www.cnblog ...

  2. OpenCV2马拉松第22圈——Hough变换直线检測原理与实现

    计算机视觉讨论群162501053 转载请注明:http://blog.csdn.net/abcd1992719g/article/details/27220445 收入囊中 Hough变换 概率Ho ...

  3. hough变换是如何检测出直线和圆的?

    (I)直线篇 1 直线是如何表示的?对于平面中的一条直线,在笛卡尔坐标系中,常见的有点斜式,两点式两种表示方法.然而在hough变换中,考虑的是另外一种表示方式:使用(r,theta)来表示一条直线. ...

  4. Hough变换在opencv中的应用

    霍夫曼变换(Hough Transform)的原理 霍夫曼变换是一种可以检测出某种特殊形状的算法,OpenCV中用霍夫曼变换来检测出图像中的直线.椭圆和其他几何图形.由它改进的算法,可以用来检测任何形 ...

  5. Matlab实现Hough变换检測图像中的直线

    Hough变换的原理: 将图像从图像空间变换至參数空间.变换公式例如以下: 变换以后,图像空间与參数空间存在下面关系: 图像空间中的一点在參数空间是一条曲线,而图像空间共线的各点相应于參数空间交于一点 ...

  6. Hough变换-理解篇

    Hough变换-理解篇 霍夫变换(Hough Transform)是图像处理中的一种特征提取技术,它通过一种投票算法检测具有特定形状的物体.该过程在一个参数空间中通过计算累计结果的局部最大值得到一个符 ...

  7. 查找图像中椭圆轮廓的快速随机hough变换

    查找图像中椭圆轮廓的快速随机hough变换 图像中椭圆轮廓的查找在视频监控等领域有着广泛的应用,经典hough变换给我们提供了一种查找各种图形轮廓的方法,特别是在直线查找方面具有非常高的精确度.但是由 ...

  8. Hough变换原理

    Hough变换原理 一.简单介绍 Hough变换是图像处理中从图像中识别几何形状的基本方法之一.Hough变换的基本原理在于利用点与线的对偶性,将原始图像空间的给定的曲线通过曲线表达形式变为参数空间的 ...

  9. 利用Hough变换识别图像中的直线

    引入 近期看到2015年数学建模A题太阳影子定位中的第四问,需要根据附件中视频里的直杆的太阳影子的变化确定拍摄地点.其实确定拍摄地点这个问题并不是十分困难,因为有前三问的铺垫,我们已经得出了太阳影子长 ...

随机推荐

  1. unity backbuffer

    拿unity backbuffer的方法 var  backbuffer = new RenderTargetIdentifier(BuiltinRenderTextureType.None); 这个 ...

  2. 转:【AI每日播报】从TensorFlow到Theano:横向对比七大深度学习框架

    http://geek.csdn.net/news/detail/139235 说到近期的深度学习框架,TensorFlow火的不得了,虽说有专家在朋友圈大声呼吁,不能让TensorFlow形成垄断地 ...

  3. react-native 模仿原生 实现下拉刷新/上拉加载更多(RefreshListView)

    1.下拉刷新/上拉加载更多 组件(RefreshListView) src/components/RefreshListView/index.js /** * 下拉刷新/上拉加载更多 组件(Refre ...

  4. 【Java】Java_12 Eclipse

    1.eclipse简介 Eclipse 是一个开放源代码的.基于Java的可扩展开发平台.就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境. 尽管 Eclipse 是使用Java语 ...

  5. Swift学习-枚举(Enumerations)的使用方法

    Swift学习-枚举的使用方法 枚举的使用语法: enum someEnumer { // 枚举的成员值 } 以下是方向的一个例子: enum direction { case Up case Dow ...

  6. How to manually remove an infected file from your computer

    http://blog.csdn.net/pipisorry/article/details/41258577 How to manually remove an infected file from ...

  7. C++之栈、队列基本用法

    1.C++栈的基本用法: #include<stack> (1)push():向栈内压入一个成员: (2)pop():栈顶弹出一个成员: (3)empty():栈为空返回true,否则返回 ...

  8. SVN checkout 功能不可用 右键只看到提交和更新,没有显示checkout

    不要在受SVN控制的文件夹里点右键,因为这个文件夹已经在SVN控制之下,当然不会允许在里面嵌套另一个SVN版本库换个不受控的文件夹点右键,比如D盘根目录

  9. Atitit.biz业务系统 面向框架  面向模式---------数据映射imp

    Atitit.biz业务系统 面向框架  面向模式---------数据映射imp 1.1. 面向变量  面向过程  面向对象 面向组件  面向框架  面向服务 面向模式1 1.2. 第2章 架构模式 ...

  10. Atitit.编程语言原理---方法重载的实现与设计 调用方法的原理

    Atitit.编程语言原理---方法重载的实现与设计 调用方法的原理 1. 重载包括:普通方法的重载和构造方法的重载 1 1.1. 横向重载”和“纵向重载”1 1.2. 方法签名通过  方法名称,参数 ...