OpenCV中Hough transform(霍夫变换)

霍夫变换所基于的公式:

P = X * COS(θ) + Y *SIN(θ)

      首先,明确图像坐标,在图像中横轴是从左向右增加,纵轴是从上向下增加,原点在左上角,在使用霍夫变换检测图像中的直线时,P是原点到直线的距离,θ是原点到直线垂线和X轴正方向在顺时针方向的夹角。

霍夫变换思想:

       我们建立一个累积数组acc[][],对于每一个给定的图像上的点(X0 , Y0)有一组对应的(p , θ)表示通过这个点的所有直线,我们累计acc[p][θ]++;依次计算图像中的每一个点。最后检查acc[][]他们他们最后的值就是图像上以p , θ 为参数的直线在图像中通过的点数。检查acc[]][]若其值大于等于threshold则被认为是一条直线。

OpenCV中基本霍夫变换的函数:

void HoughLines( InputArray image, OutputArray lines,
                              double rho, double theta, int threshold,
                              double srn=0, double stn=0 );

参数:

lines:存放检测到的直线

rho:是P的步长

theta:是θ的步长

threshold:是设定的最小投票数,也即acc[p][θ]>=threshold时才认定其为一条直线


函数HoughLines()只能得到直线的参数P ,θ并不知道检测到的直线的端点

霍夫变换的变形HoughLinesP()可以检测到直线的两个端点。

你可能感兴趣的:(算法,OpenCV)