霍夫变换原理和具体实现

Hough transform


这里是霍夫变换动态可视化的链接,可以看效果图,然后结合下列文字进行理解,效果更佳。

定义

霍夫变换由霍夫在1964年提出,其基本原理是笛卡尔坐标系的变换。
y = k x + b y = kx + b y=kx+b
这是一个很普通的直线定义式,k是斜率,b是截距。
那么取该直线上的两个点 ( x i , y i ) , ( x j , y j ) (x_i, y_i),(x_j, y_j) xi,yi,(xj,yj), 就可以使得两个方程式成立。
y i = k x i + b y_i = kx_i + b yi=kxi+b, 和 y j = k x j + b y_j = kx_j + b yj=kxj+b, 两点确定一条直线。
这里将目光转向 以 k k k b b b 为坐标系的时候,情况就变成了:
b = − k x i + y i b = -kx_i +y_i b=kxi+yi b = − k x j + y j b = - kx_j + y_j b=kxj+yj, 也就是不平行的两条直线有且只有一个交点,这个交点就是一条直线,那么这条直线的形成可以看成是两个平面的相交。即两条直线在侧面进行拉长,三维空间中。

这不是重点。
x , y x, y x,y空间中的直线接近于垂直的时候,梯度接近无穷,那么最好的办法是用法线来表示,即用圆切的原理,定义原点为圆心,定义角度和半径,然后利用圆的切点对应的切线唯一来表示直线。
直线的表达式: ρ = x c o s θ + y s i n θ \rho=xcos\theta+ysin\theta ρ=xcosθ+ysinθ
当给定两组 x , y x, y x,y的值时,形成的直线等于两组线的交点 θ i , ρ i \theta_i, \rho_i θi,ρi x , y x, y x,y空间中相对于 θ i , ρ i \theta_i, \rho_i θi,ρi的直线。
y = − c o s θ sin ⁡ θ x + ρ s i n θ y = -\frac{cos\theta}{\sin\theta}x+\frac{\rho}{sin\theta} y=sinθcosθx+sinθρ

那么它如何识别一条直线呢, 有这么一个短视频,它显示出,一个平面坐标X的点可以表示为另一个空间Y中的两条直线,并且它们交为一点,如果检测到X中的一条直线,它就能够在Y中以交点覆盖一片区域,即所有的线都会交于一点,如果不交于一点,那么它就不属于一条直线。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值