一,概念:

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. VR开发者必看:4大最为值得关注的内容平台【转】

            时间 2016-01-19 14:12:57 原文  http://www.sfw.cn/xinwen/478369.html 主题 虚拟现实 Oculus 对很多有意涉及VR行业的内 ...

  2. HTC相关开发所需SDK等工具都在这里了。 【转】

    OpenVR SDK https://github.com/ValveSoftware/openvr  OpenVR SDK是由原本的SteamWorks SDK更新而来,新增对HTC VIVE开发者 ...

  3. 外网无法连接Kafka集群(报错:NoBrokersAvailable)

    本地Consumer和Producer无法使用远程Kafka服务器的解决方法: 分别修改各台服务器Kafka配置文件server.properties, 在#listeners=PLAINTEXT:/ ...

  4. Node.js abaike图片批量下载Node.js爬虫1.00版

    这个与前作的差别在于地址的不规律性,需要找到下一页的地址再爬过去找. //====================================================== // abaik ...

  5. html5学习整理-0311

    整理一下今天所学的一些标签内容. 首先说一下DNS:全称Domain Name System,域名系统.是因特网上作为域名和IP地址相互映射的一个分布式数据库. URL协议:规定URL地址的格式,UR ...

  6. HDU 5379 Mahjong tree(dfs)

    题目链接:pid=5379">http://acm.hdu.edu.cn/showproblem.php? pid=5379 Problem Description Little su ...

  7. IOS高级面试题

    1.写一下UIButton与UITableView的层级结构  2.Cocoa的Foundation对象与Core Foundation对象通过什么keyword进行转换?这些keyword有什么差别 ...

  8. Nginx主动连接与被动连接的差别

    1.主动连接是指Nginx主动发起的同上游server的连接:被动连接是指Nginx接收到的来自client主动发起的连接; 2.主动连接用ngx_peer_connection_t结构体表示:被动连 ...

  9. C-C Primer Plus阅读笔记

    常用头: stdio.h string.h inttypes.h limits.h float.h 1.打印short.long.long long和unsigned #include <std ...

  10. Problem-1000:A + B Problem

    Problem-1000:A + B Problem Sample Code: C 代码: [code] #include int main() { int a,b; while(~scanf(&qu ...