hough变换是如何检测出直线的
来源:互联网 发布:python保存文件 编辑:程序博客网 时间:2024/06/10 03:31
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 下面拿个例子说明:
通过 r0theta 坐标系可以更直观表示这种关系,如下图:图中三个点的(r,theta)曲线汇集在一起,该交点就是同时经过这三个点的直线。
使用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中查到。
0 0
- hough变换是如何检测出直线和圆的
- hough变换是如何检测出直线和圆的?
- hough变换是如何检测出直线和圆的
- hough变换是如何检测出直线和圆的
- hough变换是如何检测出直线和圆的?
- hough变换是如何检测出直线的
- hough变换是如何检测出直线和圆的?
- opencv中标准Hough变换检测出的直线参数
- Hough变换检测直线
- Hough 变换检测直线
- Hough变换检测直线
- Hough变换直线检测
- hough变换检测直线
- Hough变换检测直线
- Hough变换直线检测
- Hough变换-直线检测
- Hough变换直线检测
- Hough变换检测直线
- thinkPHP快速创建验证码
- C++中虚析构函数的作用
- 9项目三动态分配空间储存
- 架构师思维的十个学习步骤
- 七牛上传图片(javascript)
- hough变换是如何检测出直线的
- 分析某实习招聘网站上海地区的平均实习工资
- 01背包——HDOJ2602拾骨者
- 远程过程调用(RPC)实现原理
- CONFIGURE --PREFIX --WITH命令
- Java实现FTP链接读取txt文件----高内聚和低耦合怎么才能折中
- Hie with the Pie_poj3311
- poj 3013
- OpenCV成长之路4:加载一个视频并且显示