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

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


霍夫变换检测直线原理分析_第1张图片

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

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点....。

霍夫变换检测直线原理分析_第2张图片

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


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

霍夫变换检测直线原理分析_第3张图片


你可能感兴趣的:(基础学习,图像算法,opencv,图像处理)