霍夫变换由霍夫在1964年提出,其基本原理是笛卡尔坐标系的变换。
y
=
k
x
+
b
y = kx + b
y=kx+b
这是一个很普通的直线定义式,k是斜率,b是截距。
那么取该直线上的两个点
(
x
i
,
y
i
)
,
(
x
j
,
y
j
)
(x_i, y_i),(x_j, y_j)
(xi?,yi?),(xj?,yj?), 就可以使得两个方程式成立。
y
i
=
k
x
i
+
b
y_i = kx_i + b
yi?=kxi?+b, 和
y
j
=
k
x
j
+
b
y_j = kx_j + b
yj?=kxj?+b, 两点确定一条直线。
这里将目光转向 以
k
k
k 和
b
b
b 为坐标系的时候,情况就变成了:
b
=
?
k
x
i
+
y
i
b = -kx_i +y_i
b=?kxi?+yi? 和
b
=
?
k
x
j
+
y
j
b = - kx_j + y_j
b=?kxj?+yj?, 也就是不平行的两条直线有且只有一个交点,这个交点就是一条直线,那么这条直线的形成可以看成是两个平面的相交。即两条直线在侧面进行拉长,三维空间中。
这不是重点。
当
x
,
y
x, y
x,y空间中的直线接近于垂直的时候,梯度接近无穷,那么最好的办法是用法线来表示,即用原切的原理,定义原点为圆心,定义角度和半径,然后利用圆的切点对应的切线唯一来表示直线。
直线的表达式:
ρ
=
x
c
o
s
θ
+
y
s
i
n
θ
\rho=xcos\theta+ysin\theta
ρ=xcosθ+ysinθ
当给定两组
x
,
y
x, y
x,y的值时,形成的直线等于两组线的交点
θ
i
,
ρ
i
\theta_i, \rho_i
θi?,ρi?在
x
,
y
x, y
x,y空间中相对于
θ
i
,
ρ
i
\theta_i, \rho_i
θi?,ρi?的直线。
y
=
?
c
o
s
θ
sin
?
θ
x
+
ρ
s
i
n
θ
y = -\frac{cos\theta}{\sin\theta}x+\frac{\rho}{sin\theta}
y=?sinθcosθ?x+sinθρ?
那么它如何识别一条直线呢, 有这么一个短视频,它显示出,一个平面坐标X的点可以表示为另一个空间Y中的两条直线,并且它们交为一点,如果检测到X中的一条直线,它就能够在Y中以交点覆盖一片区域,即所有的线都会交于一点,如果不交于一点,那么它就不属于一条直线。