Hough变换检测直线的Java实现

本文介绍了使用Hough变换在Java中检测直线的方法。通过将直线以(r,theta)形式表示,对于图像中的每个点假设多个方向的直线,计算得到的(r,theta)坐标点在特定角度下会集中,表明这些点位于同一直线上。通过查找(r,theta)坐标系中的交汇点,可以检测出图像中的直线。示例展示了当点的r值在特定角度θ处接近时,这些点位于同一直线(r,θ)上。最后,给出了实际代码实现和检测直线的效果展示。" 90105371,7854026,Hadoop2.x的Yarn架构解析,"['大数据开发', 'Hadoop', 'Yarn']
摘要由CSDN通过智能技术生成

转载: hough变换是如何检测出直线和圆的? ——钰
参考: java hough变换(霍夫变换)检测直线 ——epleone

对于平面中的一条直线,在笛卡尔坐标系中,常见的有点斜式,两点式两种表示方法。然而在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 坐标系图中,明显的交汇点就标示一条检测出的直线。
如下图,可以判定出平面上的点共构成了两条直线,即检测出两条直线。
这里写图片描述

代码如下:

package houghTransform;

import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileNotFoundException;
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值