Hough变换简易理解

直线与点的映射关系

图1左图为直角坐标系,直线L1与原点的距离为 ρ 1 \rho1 ρ1夹角为 θ 1 \theta1 θ1,对应右图极坐标系的( ρ 1 \rho1 ρ1 θ 1 \theta1 θ1),直线L2对应的点则为( ρ 2 \rho2 ρ2 θ 2 \theta2 θ2)。因此,我们得到了第一个结论:直角坐标系的一条直线与极坐标系的一个点对应。继续深入,下图中的AB点所在直线可以命名为 L a b Lab Lab,经过A点和B点的直线分别有无穷多条,由上述结论1可知,直角坐标系下的每一条直线可以对应极坐标系的一个点,因此我们可以将经过A点的N条直线,对应标注在极坐标系下的N个点上,这些点依次相连形成了曲线A(在这里为了使图片清晰只画了三条,实际可以自由选择,若每旋转10度做一条直线,则可以选36条),经过B点的N条直线在极坐标系上对应的点相连,可以得到曲线B。结论2则为:直角坐标系上的一个点与极坐标系下的一条曲线对应曲线A和B的交点则为AB两点共同经过的直线,即 L a b Lab Lab,我们可以看出,直角坐标系的一条直线上的多个共线点映射为参数空间相交于一点的多条正弦曲线。在这里插入图片描述
到这里,可能还是会感到疑惑,这样的映射是如何实现的直线检测呢,别着急,我们来看一张更复杂的图:

在这里插入图片描述
假设一张图的像素点如左图的*分布,那么很显然,我们希望检测的直线是绿色的那一条(因为在这条直线上的点更多,更集中),在实际中,可以认为这是一条直线而非偶然的噪声点。
实际我们要怎么操作呢?
要将左图的每一个像素点仿射变换到右图,每一个点对应一条曲线,这些曲线可能有很多交点A,B,C等(因为在左图中,严格数学意义上的直线不止一条),但我们要确定的是绿色直线,因此我们要选择相交次数最多的那一点,即点P,最终确定了直线P为我们想要检测出的那一条。

hough变换的算法实现

这一部分改写自: Hough变换非常详细讲解
(1)量化参数空间:将参数空间(ρ,θ) 量化,赋初值一个二维矩阵M,M(ρ,θ) 就是一个累加器了。
(2)然后对图像边界上的每一个点进行变换,变换到属于哪一组(ρ,θ) ,就把该组(ρ,θ) 对应的累加器数加1,逐渐加一的过程可以认为是:有更多的点经过了当前的(ρ,θ)代表的那条直线。
这里的需要变换的点就是上面说的经过边缘提取以后的图像了。 (为什么需要边缘提取呢,因为全部的图像点太多了,只提取有用的边缘信息可以减少计算量)
(3)当所有点处理完成后,就来分析得到的M(ρ,θ) ,设置一个阈值T,认为当M(ρ,θ)>T ,就认为存在一条有意义的直线存在。而对应的M(ρ,θ) 就是这组直线的参数,至于T是多少,自己去式,试的比较合适为止。
(4)有了M(ρ,θ) 和点(x,y)计算出来这个直线就ok了。

到这里讲的还只是伪算法~具体编程语言和公式的实验留给以后去做吧,所以到这里,你理解hough变换了嘛?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值