图像处理-霍夫直线检测(1):原理详解

P.V.C.Hough[1]第一次提出用霍夫变换(Hough Transform) 检测二值图中的直线和曲线, R.D.Duda和P.E.Hart[2]根据霍夫变换提出了一种更有效的直线检测方法, 这就是通常所称的标准霍夫直线检测。 下面详细介绍它的原理。 在xoy平面内的一条直线大致分为如图9-5所示的四种情况:

通过观察可以发现, 计算完成四个象限的直线方程, 最后的表示结果是一样的, 即如果知道原点到一条直线的代数距离ρ和与x轴的夹角θ, 则直线方程可由以下方式表示:
p = x\cos \theta + y\sin \theta

当然, 反过来也可以, 如果知道平面内的一条直线, 那么可以计算出唯一的ρ和θ,即xoy平面内的任意一条直线对应参数空间(或称霍夫空间) θoρ中的一点(ρ, θ) 。 如图9-6所示, 对于xoy平面内的直线y =10-x, 因为原点到该直线的垂线在第一象限, 垂线与x轴正方向的夹角为 \pi /4, 原点到该直线的代数距离为 10/\sqrt{}2, 所以该直线对应到θoρ中的点\left ( \pi /4, 10/\sqrt{2}\right ):

从另一个角度考虑, 过xoy平面内的一点(x1, y1) 有无数条直线, 则对应霍夫空间中的无数个点, 这无数个点连接起来就是θoρ平面内的曲线ρ=x1 cosθ+y1 sinθ。 如图9-7所示, 过xoy平面内的点(5, 5) 有无数条直线, 则这个点对应到霍夫空间中的曲线ρ=5cosθ+5 sinθ, 其中因为过(5, 5) 有一条直线是y=10-x, 如图9-6所示, 该直线对应坐标点\left ( \pi /4, 10/\sqrt{2}\right ) , 所以ρ=5 cosθ+5 sinθ过点 \left ( \pi /4, 10/\sqrt{2}\right )。 对其他直线的讨论与之类似。


通过上述讨论可以解答一个问题: 如何验证xoy平面内的(x1, y1) , (x2,y2) , …是否共线? 只要曲线ρ=xi cosθ+yi sinθ, i=1, 2, …在θoρ平面内相交于一个点就可以了。 举例: 在xoy平面内有四个点1、 2、 3、 4, 坐标依次为(2, 8) 、 (3, 7) 、(5, 5) 和(6, 4) , 根据这四个点可以在θoρ平面内画出对应的四条曲线, 这四条曲线相交于一个点, 所以这四个点是共线的, 如图9-8所示。


过这四个点的直线是y=10-x, 所以相交点为 \left ( \pi /4, 10/\sqrt{2}\right ), 如图9-9所示:

推广以上结论, 讨论一个稍微复杂的问题: 已知平面内的一些点, 如何找出哪些点在同一条直线上? 解答过程如图9-10所示, xoy平面内有5个点, 对应到θoρ平面内的5条曲线, 可以看出1、 2、 3、 4点对应的曲线是相交于一个点的, 所以xoy平面内的1、 2、3、 4点是共线的; 同样, 5点和4点对应的曲线也相交于一个点, 所以xoy平面内的5点和4点是共线的(两点决定一条曲线) ; 其他的与之类似.


图9-10 验证笛卡儿坐标系中的哪些点在同一条直线上


结论: 判断xoy平面内哪些点是共线的, 首先求出每一个点对应到霍夫空间的曲线, 然后判断哪几条曲线相交于一点, 最后将相交于一点的曲线反过来对应到xoy平面内的点, 这些点就是共线的, 这就是在图像中进行标准霍夫直线检测的核心思想。
 

猜你喜欢

转载自blog.csdn.net/zfjBIT/article/details/87269300
今日推荐