Skip to content

Hough Line Transform

约 361 个字 预计阅读时间 2 分钟

数学原理

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

\(y = kx + b\)\(r\)表示原点到直线的垂直距离,用\(\theta\)表示距离这条垂线与\(x\)轴正半轴的夹角

因此\(k=-\frac{\cos\theta}{\sin\theta}\)\(b=\frac{r}{\sin\theta}\)

化简得到\(r=x\cos\theta + y\sin\theta\)

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

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

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

设定阈值进行投票

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

实际上

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

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