hough变换_【正点原子FPGA连载】第十二章基于霍夫变换的直线检测实验-领航者ZYNQ之HLS 开发指南...

1)摘自【正点原子】领航者ZYNQ之HLS 开发指南

2)平台购买地址:https://item.taobao.com/item.htm?&id=606160108761

3)全套实验源码+手册+视频下载:http://www.openedv.com/docs/boards/fpga/zdyz_linhanz.html

4)对正点原子FPGA感兴趣的同学可以加群讨论:876744900

5)正点原子资料更新和新品发布,请加正点原子公众号:正点原子 关注方法:微信→添加好友→公众号→输入:正点原子

第十二章基于霍夫变换的直线检测实验


直线检测是计算机视觉中的重要内容,例如车辆自动驾驶技术中道路边缘的获取,航拍图像中建筑物、机场跑道等直线特征的确定。霍夫变换算法具有较强的鲁棒性和抗干扰性,是直线检测中效果最好的算法之一。霍夫变换也可用来检测任意几何形状(比如圆),在图像处理和模式识别领域得到了广泛的应用。本章我们将在HLS中实现基于霍夫变换的直线检测。
本章包括以下几个部分:
1212.1简介
12.2实验任务
12.3HLS设计
12.4IP验证
12.5下载验证
12.1简介
霍夫变换是由Paul Hough于1962年提出的一种形状匹配技术,其本质是从图像空间到“参数空间”的映射,也就是将X/Y坐标系中的点转换到变量空间(parameter space)。变量空间的选择是由要检测的目标形状决定的,本章我们只考虑直线的检测。
在X/Y坐标系中,经过两个点(x1,y1)和(x2,y2)的一条直线可以用下面的公式描述:
y = ax + b
上式是直线在笛卡尔坐标系(又称直角坐标系)中的方程式,式中a、b为直线的变量(斜率和截距)。但是针对直线的霍夫换不使用这两个变量,因为对于垂直于X轴的直线来说,它的斜率a是无穷大的。这就导致以a、b为变量的变量空间为无穷大。因此我们可以使用直线的另外一种表示方法,即使用角度θ和长度ρ来表示一条直线的方程,如下所示:
ρ= xcos(θ) + ysin(θ)
式中θ和ρ的几何含义如下图所示:

b0acbaa53fa430196179e27da70c6ca3.png

图 12.1.1 笛卡尔坐标系中的直线


图 12.1.1中红色的是目标直线,我们过原点作该直线的法线(蓝色)。原点到直线的距离为ρ,法线与X轴的角度为θ,那么直线上所有的点均满足方程式ρ= xcos(θ) + ysin(θ)。笛卡尔坐标系中不同的直线对应着不同的(θ,ρ)参数,因此我们可以用θ作为横坐标,ρ作为纵坐标从而构成变量空间。那么笛卡尔坐标系中的一条直线,对应于θ/ρ变量空间中的一个点。
相比于用斜率a和截距b作为变量空间,使用角度θ和距离ρ变量空间的优势是θ和ρ都是有限值。θ的取值范围为0到180°,而ρ的最大值为图像的对角线距离,不会出现无穷大的情况。
现在我们考虑笛卡尔坐标系中的一个固定点P(x1,y1),经过该点可以作出无数条直线。这些直线有不同的θ和ρ,但是每一组(θ,ρ)均满足方程式ρ= x1cos(θ) + y1sin(θ)。该方程式在θ/ρ变量空间中为一条正弦曲线,如下图所示:

3eb1269c16ce5e2a133ec4a81435c396.png

图 12.1.2 变量空间中的正弦曲线


在图 12.1.2中,正弦曲线上的每一个点表示笛卡尔空间中经过点P(x1,y1)的一条直线。如图中红色点在θ/ρ变量空间中的坐标为(θ1,ρ1),它就表示笛卡尔空间中方程为ρ1= xcos(θ1) + ysin(θ1)的一条直线,且该直线经过点P(x1,y1)。
下面我们考虑笛卡尔空间中的3个点,假设他们位于同一条直线上。那么我们该如何找出经过这三个点的直线呢?
传统的思路是过其中的两个点作一条直线,求出其直线方程,然后将第三个点的坐标代入该直线方程,从而判断第三个点是否位于该直线上。这种计算方法看似简单,但是随着点的数目增多,计算量会大到让你开始怀疑人生:对于分辨率为640*480的一幅图像,共有307200个像素点,单单是由两个点连接而成的直线就有307200*(307200-1)/2种可能。而且对于其中每条直线,我们还要一一去判断在剩余的(307200-2)个点中,有多少点位于该直线上。
此时我们就可以借助霍夫变换,将笛卡尔空间中的直线检测问题转化成参数空间中相对简单的求最大值的问题。
首先在笛卡尔空间中,过其中一个点作出所有经过该点的直线。如果这三个点位于一条直线上,那么在所有经过第一个点的直线中,肯定有一条同时也经过其他两个点,我们最终的目的就是找到这条直线。
由于经过一个点可以作出角度不同的无数条直线,因此我们需要给角度指定一个精度。如果精度为1°,那么过第一个点一共可以作出180条直线。这里为了简单起见,我们将精度指定为30°,如下图所示,

e5dc69b00618e0c26a66cfe806f9f167.png

图 12.1.3 霍夫变换第一步


图 12.1.3的左边表示过第一个点作出的所有直线,由于精度为30°,所以一共能作出6条直线(180/30=6)。相邻直线之间的角度差为30°,在下面的表格中列出了这些直线的角度θ以及原点到直线的距离ρ。由前面的介绍我们知道,这六组(θ,ρ)在变量空间中位于同一条正弦曲线上。
我们对第二个点和第三个点执行同样的操作,最后由三个表格里的数据,在变量空间中绘制相应的正弦曲线,如下图所示:

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值