霍夫变换检测直线原理分析

最近在学习《Learning OpenCV》,看到了第六章霍夫变换部分,参考了一些网上的资源,感觉比较多,这里简单总结一下我的理解。如有不对之处,还望指出。


以上面这一副简单的二值图像为例,要用霍夫变换找到图中的直线,过程如下:

1.在图像中检测直线的问题,其实质是找到构成直线的所有的像素点。那么问题就是从找到直线,变成找到符合y=kx+b的所有(x,y)的点的问题。

2.将y=kx+b进行坐标系变换,由x-y坐标系变换到k-b坐标系,即:变成b=-xk+y,这样表示为过点(k,b)的直线束。可以这样理解,在图像x-y坐标系中的一点A(x,y),对应到k-b坐标系下为一直线(此时,x值,y值可以理解为k-b坐标系下直线的斜率和截距)。

3.如果在k-b坐标系下两条直线相交,那意味着什么呢? 假设这两条相交的直线由x-y坐标系下的两个点A(x1,y1)和B(x2,y2)确定,那么这意味着,存在一组k, b值使得由k, b值确定的直线经过A点和B点。

4.推而广之,在x-y坐标系下的边缘点,A点、B点、C点、D点、E点、F点......对应确定了k-b坐标系下的很多条直线,并且这些直线都相交到一点O(k',b')呢?那就意味着,根据该交点O(k‘,b‘)确定的直线y=k‘x+b'通过了A点、B点、C点、D点、E点、F点....。


5.由第四步也许可以在k-b坐标系下得到很多个交点,那么在局部统计各个交点处相交的直线个数,相交的直线个数越多,说明由该交点确定的直线通过的边界点越多,就在原图中越有可能是真实存在的直线。统计过后会得到若干个局部最大值,也就得到了若干条直线。


实际在使用这一原理的时候,不是采用直线的斜率和截距公式,因为直线的斜率可能不存在。而是用类似极坐标的方式表示,ρ=xcosθ+ysinθ,具体含义如下图。将θ分为若干小区间,分别在各个区间内统计垂直距离ρ值出现的次数,各个区间内出现次数最多的一组ρ值和θ即对应着原图中的若干条直线



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值