Hough Line Transform

数学原理

类似极坐标(但不是极坐标),在直角坐标系中,用r,θr,\theta表示直角坐标系的(x,y)(x,y)

y=kx+by = kx + brr表示原点到直线的垂直距离,用θ\theta表示距离这条垂线与xx轴正半轴的夹角

因此k=cosθsinθk=-\frac{\cos\theta}{\sin\theta}b=rsinθb=\frac{r}{\sin\theta}

化简得到r=xcosθ+ysinθr=x\cos\theta + y\sin\theta

对于固定的一点(x,y)(x,y),带入得到r=r(θ)r=r(\theta) ,在rθr-\theta坐标系中,就是一条曲线。因此

在(x,y)坐标系一点为(r,θ)(r,\theta)坐标系一条曲线。

相应的,对于(x,y)坐标系一条直线,由于r,θr,\theta 固定,所以在rθr-\theta坐标系中是一个点。

设定阈值进行投票

在用Canny检测器检测出边缘后,得到很多点。这些点对应rθr-\theta 坐标系的曲线。如果很多条曲线都交于同一点,那么有理由怀疑在(x,y)(x,y)坐标系这些点连接而成构成一条直线。通过交点对应的曲线数目进行计算投票(字典计数),设定一个最低的阈值,高于阈值的即为直线。

实际上

我们遍历θ的值,从0-180°,并且同时代入(x,y)的值,求得对应的ρ。

找到0-180°中,哪个度数下的ρ值相同的数量最多。这反向说明了,在一个ρ和θ组成的函数中,符合的点数最多。