(I)直线篇

1 直线是如何表示的?

对于平面中的一条直线,在笛卡尔坐标系中,常见的有点斜式,两点式两种表示方法。然而在hough变换中,考虑的是另外一种表示方式:使用(r,theta)来表示一条直线。其中r为该直线到原点的距离,theta为该直线的垂线与x轴的夹角。如下图所示。

2 如果坐标系中有多个点,又怎样识别出哪些点在一条直线上呢?

使用hough变换来检测直线的思想就是:为每一个点假设n个方向的直线,通常n=180,此时检测的直线的角度精度为1°,分别计算这n条直线的(r,theta)坐标,得到n个坐标点。如果要判断的点共有N个,最终得到的(r,theta)坐标有N*n个。有关这N*n个(r,theta)坐标,其中theta是离散的角度,共有180个取值。

最重要的地方来了,如果多个点在一条直线上,那么必有这多个点在theta=某个值theta_i时,这多个点的r近似相等于r_i。也就是说这多个点都在直线(r_i,theta_i)上。

3 下面拿个例子说明:

如果空间中有3个点,如何判断这三个点在不在一个直线上,如果在,这条直线是的位置为?

这个例子中,对于每个点均求过该点的6条直线的(r,theta)坐标,共求了3*6个(r,theta)坐标。可以发现在theta=60时,三个点的r都近似为80.7,由此可判定这三个点都在直线(80.7,60)上。

通过 r0theta 坐标系可以更直观表示这种关系,如下图:图中三个点的(r,theta)曲线汇集在一起,该交点就是同时经过这三个点的直线。

在实际的直线检测情况中,如果超过一定数目的点拥有相同的(r,theta)坐标,那么就可以判定此处有一条直线。在r0theta 坐标系图中,明显的交汇点就标示一条检测出的直线。

如下图,可以判定出平面上的点共构成了两条直线,即检测出两条直线。

4 代码:

在matlab中提供了hough变换的代码,有hough,houghlines,houghpeaks,具体的使用可以在help中查到。

(II)圆篇

继使用hough变换检测出直线之后,顺着坐标变换的思路,提出了一种检测圆的方法。

1 如何表示一个圆?

与使用(r,theta)来表示一条直线相似,使用(a,b,r)来确定一个圆心为(a,b)半径为 r  的圆。

2 如何表示过某个点的所有圆?

某个圆过点(x1,y1),则有:(x1-a1)^2 + (y1-b1)^2 = r1^2 。

那么过点(x1,y1)的所有圆可以表示为(a1(i),b1(i),r1(i)),其中r1∈(0,无穷),每一个 i 值都对应一个不同的圆,(a1(i),b1(i),r1(i))表示了无穷多个过点(x1,y1)的圆。

3 如何确定多个点在同一个圆上?

如(2)中说明,过点(x1,y1)的所有圆可以表示为(a1(i),b1(i),r1(i)),过点(x2,y2)的所有圆可以表示为(a2(i),b2(i),r2(i)),过点(x3,y3)的所有圆可以表示为(a3(i),b3(i),r3(i)),如果这三个点在同一个圆上,那么存在一个值(a0,b0,r0),使得 a0 = a1(k)=a2(k)=a3(k) 且b0 = b1(k)=b2(k)=b3(k) 且r0 =  r1(k)=r2(k)=r3(k),即这三个点同时在圆(a0,b0,r0)上。

从下图可以形象的看出:

首先,分析过点(x1,y1)的所有圆(a1(i),b1(i),r1(i)),当确定r1(i)时 ,(a1(i),b1(i))的轨迹是一个以(x1,y1,r1(i))为中心半径为r1(i)的圆。那么,所有圆(a1(i),b1(i),r1(i))的组成了一个以(x1,y1,0)为顶点,锥角为90度的圆锥面。

三个圆锥面的交点A 既是同时过这三个点的圆。

4 怎样用代码实现检测圆的过程?

上面的分析虽然很简单,但是用代码实现起来就麻烦了,首先过每一个点的(a(i),b(i),r(i))都有无穷多个,若是要检测的点很多,要两两比较所有的(a,b,r)值是否相等实在是一个巨大的运算量。

……未完待续……

转自:http://blog.163.com/yuyang_tech/blog/static/21605008320130233343990/

hough变换检测圆周_hough变换是如何检测出直线和圆的?相关推荐

  1. hough变换检测圆周_hough变换原理以及实现(转载)

    原理链接如下:陌归:霍夫(Hough)变换之直线检测 代码链接:Ganso:Fundamentals--从车道线检测谈到霍夫变换 同样是一篇讲解原理的番外,这一篇主要讲解CV中常用的霍夫变换的数学原理 ...

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

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

  3. hough变换检测圆周_用点Hough变换实现圆检测的方法

    图像中圆的检测及其参数确定是计算机视觉和模式识 别中一项重要任务.常用的圆检测技术有形状分析法.环路积分微分法[1].圆变换()HoughCHT [2]等.是目前应用CHT 最为广泛的圆检测方法,该方 ...

  4. hough变换检测圆周_Python OpenCV 霍夫变换

    霍夫变换(Hough Transform)是图像处理中的一种特征提取技术,它通过一种投票算法检测具有特定形状的物体.Hough变换是图像处理中从图像中识别几何形状的基本方法之一.Hough变换的基本原 ...

  5. 直线/曲线检测:Randon变换与Hough变换

    一. Randon 变换 Radon变换简介 Tips: Radon变换的基本原理: 一个平面内沿不同的直线(直线与原点的距离为d,方向角为alfa)对f(x,y)做线积分,得到的像F(d,alfa) ...

  6. MATLAB仿真高速目标检测-基于keystone变换的微弱目标检测

    MATLAB仿真高速目标检测-基于keystone变换的微弱目标检测 高速目标检测具有跨距离走动,不易相参积累,而相参积累时间内,目标的距离走动不能超过半个距离单元,对于高距离分辨雷达或观测高速目标的 ...

  7. 逆clarke变换_是clarke变换还是clark

    匿名用户 1级 2017-06-01 回答 是clarke变换还是clark 第三,关于abc坐标系,这是最重要的:四,:派克变换的初步推导:先推倒从abc系到静止的xyz系的过度矩阵M1,:这三个基 ...

  8. 理解离散傅立叶变换(一. 傅立叶变换的由来)

    理解离散傅立叶变换(一) ------傅立叶变换的由来 关于傅立叶变换,不管是书本还是在网上可以非常easy找到关于傅立叶变换的描写叙述,可是大都是些故弄玄虚的文章,太过抽象,尽是一些让人看了就望而生 ...

  9. opencv-python:16_形态学处理【二】(开操作、闭操作、形态学梯度、顶帽变换、黑帽变换,去除皮肤镜中的毛发噪音、cv2.morphologyEx())

    形态学处理[二] 开操作.闭操作.形态学梯度.顶帽变换.黑帽变换 相关函数有:cv2.morphologyEx().cv2.getStructuringElement() 有趣的应用:去除皮肤镜中的毛 ...

  10. Matlab 伪彩色处理方法总结(密度分割法、灰度级变换法、频域变换法)

    伪彩色处理方法总结 伪彩色处理是将黑白图像转换为彩色图像,方法分为空域变换及频域变换.空域变换其基本原理是构建颜色映射函数,将灰度值转换为彩色值.因为人眼对彩色图像的分辨能力大于黑白图像,所以伪彩色处 ...

最新文章

  1. 网络流24题(2) P4014 分配问题
  2. Linux state 方式 安装nginx 服务
  3. 安卓队列缓存文件,包括断点续传
  4. ScriptManager同时存在于两个dll中的问题
  5. IOCP配合AcceptEx的例子
  6. SQL Server 2005 在只有MDF文件的情况下恢复(丢失日志文件)
  7. PCB设计中焊盘的种类,你都见过几种?
  8. Relatively Prime Powers CodeForces - 1036F (莫比乌斯函数容斥)
  9. Java中使用Map and Fold进行功能性编程
  10. 双向(端)链表、栈、队列
  11. 为什么在实际的 kaggle 比赛中 gbdt 和 random forest 效果非常好?
  12. phylip软件_进化树专题(五)| 密码子分区软件介绍
  13. 电脑上怎么做pdf文件_怎么编辑pdf文件内容?什么工具可以编辑pdf?
  14. Single Number III
  15. Atitit. Class  元数据的反射操作 api apache  工具
  16. 04748JAVA语言程序设计实践考试复习
  17. Unicode 字符编码表
  18. IDEA格式化HTML页面
  19. MovieLens数据集
  20. [QCTF2018]X-man-Keyword

热门文章

  1. 发电厂及电力系统类毕业论文文献都有哪些?
  2. Java程序员面试常见问题
  3. RapidXml用法
  4. Android 键盘映射
  5. 数据结构题及c语言版 答案,数据结构(C语言版)1800道题及答案[完整版]
  6. win10 android fastboot usb驱动
  7. (六)linux中的进程管理
  8. 英语论文引用中的常用缩写含义
  9. Ubuntu常用命令及git常用命令
  10. 谷歌街景15年乾坤大挪移!带你穿越法老的金字塔