直线的极座标表示
考虑一条直线 ax+by+c=0,过原点 O 做这条直线的垂线交于 N。不妨令 N 点的极座标为 (rN,θN),再任取直线上的一点 P(x,y),显然应该有 ON⊥NP,所以两向量垂直,故
ON⋅NP=0代入 ON=(rNcos(θN),rNsin(θN)),NP=(x−rNcos(θN),y−rNsin(θN)),化简并代入点乘公式有
rNcos(θN)⋅(x−rNcos(θN))+rNsin(θN)⋅(y−rNsin(θN))x⋅rNcos(θN)−rN2cos2(θN)+y⋅rNsin(θN)−rN2sin2(θN)x⋅rNcos(θN)+y⋅rNsin(θN)xcos(θN)+ysin(θN)=0=0=rN2=rN所以直线的表达式是
xcosθ+ysinθ=r
令 (x0,y0) 为图像上一点,对于图像空间来说,横轴为 x,纵轴为 y.
我们找出所有 (θ,r) 满足
x0cosθ+y0sinθ=r把这些点标在 Hough Space 中。Hough Space 的横轴为 θ,纵轴为 r. 那么满足条件的 (θ,r) 在 Hough Space 上的图像为正弦函数的一部分。
这是因为,我们可以把直线的极座标表达式转化成
x02+y021sin(θ+φ)=r所以 Hough Space 上的曲线是正弦函数.
Curve Voting
对于每一个点 (x,y),计算所有 (θ,r),然后在计数器 A 里 +1,即 A(θ,r)←A(θ,r)+1,最后,我们取得票数最多的 (θ,r) 视作 Linked Edge.
这个就类似于,我们对每一个点计算它可能属于什么直线,然后对所有点找出那条公共的直线。