1.霍夫变换综述
霍夫变换是图像处理中从图像中识别几何形状的基本方法之一,应用很广泛,也有很多改进算法。主要用来从图像中分离出具有某种相同特征的几何形状。最基本的霍夫变换是从黑白图像中检测直线。在图像处理中可以通过霍夫变换可以快速的检测出直线或圆。
2.霍夫线变换
opencv提供三种不同的霍夫线变换分别是:标准霍夫变换(Standard Hough Transform, SHT)、多尺度霍夫 变换(Multi-Scale Hough Transform, MSHT)和累计概率霍夫变换(Progressive Probabilistic Hough Transform, PPHT).其中多尺度霍夫变换(MSHT)为经典霍夫变换(SHT)在多尺度下的一个变种。而累计概率霍夫变换(PPHT)算法是标准霍夫变换(SHT)算法的一个改进,它在一定的范围内进行霍夫变换,计算单独线段的方向以及范围,从而减少计算量,缩短计算时间。之所以称PPHT为概率的事因为并不将累加器平面内的所有可能的点累加,而只是累加其中的一部分,想法是如果峰值足够高,只用一小部分时间去寻找它就够了。(本段参考博文地址:http://blog.csdn.net/poem_qianmo/article/details/26977557)
在opencv中可以用HoughLines函数来调用标准霍夫变换(SHT)和多尺度霍夫变换(MSHT).而HoughLinesP函数用于调用累计概率霍夫变换PPHT。累计概率霍夫变换执行效率很高。
霍夫线变换是用来寻找直线的方法,在使用霍夫线变换之前首先要对图像进行边缘检测的处理,也即霍夫线变换的直接输入只能是边缘二值图像。
霍夫线变换实现原理如下:
(1). 众所周知,一条直线在图像二维空间可由两个变量表示。如:
- a.在笛卡尔坐标系:可由参数(m, b)斜率和截距表示。
- b.在极坐标系:可由参数(r, θ)极径和极角表示
对于霍夫变换,我们将用极坐标系来表示直线。因此直线的表达式可为:
化简的:r=xcosθ+ysinθ
(2). 一般来说对于点,我们可以将通过这个点的一簇直线同一定义为:
这就意味着对于每一对代表一条通过点
的直线。
(3). 如果对于一个给定点,我们在极坐标对极径极角平面绘出所有通过它的直线,将得到一条正弦曲线。例如对于给定点
和
我们可以绘出下图:
只绘出满足条件r>0和0<θ<2π。
(4). 我们可以对图像中所有点进行上述操作,如果两个不同点经过上述操作后得到的曲线在平面θ-r相交就意味着它们通过同一条直线。例如接上面的例子,我们继续对点x1=9,y1=4和点x2=12, y2=3绘图得到下图:
这三条曲线在θ-r平面相交于点(0.925, 9.6), 坐标表示的是参数对(θ, r)或者是说点(x0, y0),点(x1, y1)和点(x2, y2)组成的平面内的直线。
(5).上述说明一般来讲,一条能够通过在平面θ-r寻找交于一点的曲线数量检测。越多曲线交于一点也就意味着这个交点表示的直线由更多的点组成。一般来说我们可以通过