霍夫变换概论(浅显易懂)
转自百度百科:http://baike.baidu.com/view/256854.htm
详细内容
我们先看这样一个问题:设已知一黑白图像上画了一条直线,要求出这条直线所在的位置。我们知道,直线的方程可以用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(2,2)。可以求出,过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平面上的一条曲线上。其它的还是一样。
应用实例1
在看下面一个问题:我们要从一幅图像中检测出半径已知的圆形来。这个问题比前一个还要直观。我们可以取和图像平面一样的参数平面,以图像上每一个前景点为圆心,以已知的半径在参数平面上画圆,并把结果进行累加。最后找出参数平面上的峰值点,这个位置就对应了图像上的圆心。在这个问题里,图像平面上的每一点对应到参数平面上的一个圆。
把上面的问题改一下,假如我们不知道半径的值,而要找出图像上的圆来。这样,一个办法是把参数平面扩大称为三维空间。就是说,参数空间变为x--y--R三维,对应圆的圆心和半径。
图像平面上的每一点就对应于参数空间中每个半径下的一个圆,这实际上是一个圆锥。最后当然还是找参数空间中的峰值点。不过,这个方法显然需要大量的内存,运行速度也会是很大问题。有什么更好的方法么?我们前面假定的图像都是黑白图像(2值图像),实际上这些2值图像多是彩色或灰度图像通过边缘提取来的。我们前面提到过,图像边缘除了位置信息,还有方向信息也很重要,这里就用上了。根据圆的性质,圆的半径一定在垂直于圆的切线的直线上,也就是说,在圆上任意一点的法线上。这样,解决上面的问题,我们仍采用2维的参数空间,对于图像上的每一前景点,加上它的方向信息,都可以确定出一条直线,圆的圆心就在这条直线上。这样一来,问题就会简单了许多。
应用实例2
接下来还有许多类似的问题,如检测出椭圆,正方形,长方形,圆弧等等。这些方法大都类似,关键就是需要熟悉这些几何形状的数学性质。霍夫变换的应用是很广泛的,比如我们要做一个支票识别的任务,假设支票上肯定有一个红颜色的方形印章,我们可以通过霍夫变换来对这个印章进行快速定位,在配合其它手段进行其它处理。霍夫变换由于不受图像旋转的影响,所以很容易的可以用来进行定位。
霍夫变换有许多改进方法,一个比较重要的概念是广义霍夫变换,它是针对所有曲线的,用处也很大。就是针对直线的霍夫变换也有很多改进算法,比如前面的方法我们没有考虑图像上的这一直线上的点是否连续的问题,这些都要随着应用的不同而有优化的方法。 顺便说一句,搞图像处理这一行,在理论方面,有几本杂志是要看的,自然是英文杂志,中文期刊好像没有专门的图像处理期刊,当然也有不少涉及这方面的期刊,但事实求是来说,的确比英文杂志水平差很多。
‘IEEE Transactions on Pattern Recognition And Machine Intelligence’ ‘IEEE Transactions on Image Processing’ 是最重要的两本,其它的如ICIP等的会议文章也非常好。
霍夫变换概论(浅显易懂)相关推荐
- 霍夫变换检测圆c 语言,c++ 霍夫变换检测直线
通常这是一幅边缘图像,比如来自 Canny算子.cv:: Houghlines函数的输出是 cV::Vec2f向量,每个元素都是一对代表检测到的直线的浮点数(p,0).在下例中 我们首先应用 Cann ...
- 霍夫变换到广义霍夫变换
版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/tiandijun/article/details/47251913 计算机视觉中经常需要识别或者定位 ...
- 《OpenCV3编程入门》学习笔记7 图像变换(二 )霍夫变换
7.2 霍夫变换 7.2.1 概述 1.特征提取技术,运用两个坐标空间之间的变换将在一个空间中具有相同形状的曲线或直线映射到另一个坐标空间的一个点上形成峰值,从而把检测任意形状的问题转化为统计峰值问题 ...
- OpenCV+python:霍夫变换与直线检测
1,霍夫变换 霍夫变换是图像处理中从图像中识别几何形状的基本方法之一.主要用来从图像中分离出具有某种相同特征的几何形状(如,直线,圆等).最基本的霍夫变换是从黑白图像中检测直线(线段). 霍夫变换最简 ...
- 霍夫变换(Hough Transform):霍夫变化在图像处理以及点云处理中的直线检测应用
霍夫变换(Hough Transfrom)是图像处理中的一种特征提取技术,它通过一种投票算法检测具有特定形状的物体,该过程在一个参数空间中通过计算累计结果的局部最大值得到一个符合该特定形状的集合作为霍 ...
- CS131专题-4:拟合(最小二乘、RANSAC、霍夫变换)
本专题目的:了解最小二乘.RANSAC.霍夫变换这3个算法的基本原理,能够做到脱口而出,并从零编程实现. 目录 1 前言 2 最小二乘 2.1 基本原理 2.2 求解方法 3 RANSAC 算法 3. ...
- OpenCV(十八)霍夫变换(直线、线段与圆检测)
目录 一.基础理论 1.作用: 2.定义 3.原理 二.直线检测 1.基础理论 1.原理 2.过程 2.HoughLines函数(直线检测) 3.HoughLinesP函数(线段检测) 三.圆检测 1 ...
- 14.查找概论与顺序查找
一.查找概论 1.查找:即依据给定的某个值,在查找表中确定一个其keyword等于给定值的数据元素(或纪录).若表中不存在keyword等于给定值的纪录.则称查找不成功,此时查找的结果可给出一个&qu ...
- 使用霍夫变换检测车道线
点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 车道线检测是自动驾驶汽车的重要组成部分之一,有很多方法可以做到这一 ...
最新文章
- PHP设计模式之装饰模式(Decorator)
- 如何向列表中添加数据值(管理员篇)
- win 7 DHCP获取不到ip的解决办法
- 一步一步实现网站的多语言版本
- 在布局空间标注的尺寸量不对_CAD图纸中标注值和实际测量值不一样怎么回事?...
- [html] 如何设置打印尺寸?
- IIS7 设置 UrlRewrite
- 运用枚举展示静态数据
- 文字处理技术:形状绕排的难点
- 为什么对项目总结产生了分赴
- 12306数据泄露,12306数据库遭网络公开下载,这里提供个账号安全监测工具
- Windows Server AppFabric正式发布
- android 农信易扫app源码,农信易扫 · 全自动 上码教程 · 看云
- ESLint语法检查
- JAVA后台生成海报分享图片(简单配置轻松生成)
- sentinel 熔断降级
- android视频动态壁纸app,短视频动态壁纸转换
- 职场人上班成本调查:工作一天要花掉多少钱?
- html5关于校庆作品名称,十周年校庆幼少儿组绘画作品展
- 4.SPSS24安装教程
热门文章
- 部署企业版lync2013之二:前端准备
- 【强化学习】迷宫寻宝:Sarsa和Q-Learning
- 【shell】shell脚本实战-for循环
- Brother P-touch标签打印机使用手册
- sega游戏_SEGA 宇宙骑警 画面音效操作感一级棒的 驾驶类街机游戏
- “被讨厌的勇气:‘自我启发之父‘阿德勒的哲学课“ 读书笔记
- 海康Camera MVS Linux SDK二次开发封装ROS packge过程记录(c++)
- html写注册协议页面,注册页面编写(html/css)
- 2021年广西卫生系统副高考试成绩查询,中国卫生人才网-2021卫生职称考试成绩查询官网-国家卫生人才网...
- 倒排索引 java_倒排索引原理和实现