(九)单应性矩阵
图像变换,单应矩阵
欢迎访问个人网络日志🌹🌹知行空间🌹🌹
单应矩阵(homography matrix
)等同于透视变换中使用的矩阵。
透视变换描述了两个平面之间的映射关系。理解之所以称为单应矩阵,是因为两个平面之间的关系是确定的,只能通过唯一的矩阵来表示这个变换,故称之为单应矩阵。
单应矩阵通常描述处于共同平面上的一些点在两张图像间的变换关系。对于空间中固定平面上的点P(如墙面),对于运动的相机,可根据P在 t k , t k + 1 t_k,t_{k+1} tk,tk+1时刻图像中的位置 p 1 , p 2 p_1,p_2 p1,p2来估计相机的运动。
设点P所处的固定平面的方程为:
n
T
P
+
d
=
0
n^TP + d = 0
nTP+d=0
上式参考空间中平面的方程:
A
(
x
−
x
0
)
+
B
(
y
−
y
0
)
+
C
(
z
−
z
0
)
=
0
A(x-x_0) + B(y-y_0) + C(z-z_0) = 0
A(x−x0)+B(y−y0)+C(z−z0)=0
化简为:
−
n
T
P
d
=
1
-\frac{n^TP}{d} = 1
−dnTP=1
设
K
K
K是相机的内参矩阵,
R
R
R和相机外参旋转矩阵,
t
⃗
\vec{t}
t是相机外参平移向量,则根据相机模型的推导,空间点P到像素坐标系的映射可写为:
p
=
s
K
(
R
P
+
t
⃗
)
p = sK(RP + \vec{t})
p=sK(RP+t)
使用齐次坐标表示像素坐标,因齐次坐标最后一维为0或1,则带尺度因子的
s
p
sp
sp与
p
p
p是相等的,
[
u
v
1
]
≃
[
s
u
s
v
s
]
\begin{bmatrix} u\\ v\\ 1 \end{bmatrix} \simeq \begin{bmatrix} su\\ sv\\ s \end{bmatrix}
⎣⎡uv1⎦⎤≃⎣⎡susvs⎦⎤
≃
\simeq
≃表示齐次坐标这种尺度相等的关系。
则方程
p
=
s
K
(
R
P
+
t
⃗
)
p = sK(RP + \vec{t})
p=sK(RP+t)
可写成
p
2
≃
K
(
R
P
+
t
⃗
⋅
(
−
n
T
P
d
)
)
p_2 \simeq K(RP + \vec{t}\cdot(-\frac{n^TP}{d}))
p2≃K(RP+t⋅(−dnTP))
将
t
k
t_k
tk时刻的相机坐标系当做世界坐标系,则R表示
t
k
t_k
tk到
t
k
+
1
t_{k+1}
tk+1时刻相机的姿态变化,
t
⃗
\vec{t}
t表示
t
k
t_k
tk到
t
k
+
1
t_{k+1}
tk+1时刻相机的平移变化,上述方程可写成:
p
2
≃
K
(
R
−
t
⃗
n
T
d
)
K
−
1
p
1
p_2 \simeq K(R-\frac{\vec{t}n^T}{d})K^{-1}p_1
p2≃K(R−dtnT)K−1p1
记
H
=
K
(
R
−
t
⃗
n
T
d
)
K
−
1
H=K(R-\frac{\vec{t}n^T}{d})K^{-1}
H=K(R−dtnT)K−1,则上式写为:
p
2
=
s
H
p
1
p_2 = s H p_1
p2=sHp1
因
p
2
p_2
p2和
p
1
p_1
p1是齐次坐标,具有尺度不变性,s
尺度缩放因子,而齐次坐标的最后一维要么为0
要么为1
,因此s
最后都会被约掉,因此,
p
2
≃
H
p
1
p_2 \simeq H p_1
p2≃Hp1
H即为单应矩阵。
[
u
2
v
2
1
]
≃
[
h
1
h
2
h
3
h
4
h
5
h
6
h
7
h
8
h
9
]
[
u
1
v
1
1
]
\begin{bmatrix} u_2\\ v_2\\ 1 \end{bmatrix} \simeq \begin{bmatrix} h_1 & h_2 & h_3 \\ h_4 & h_5 & h_6 \\ h_7 & h_8 & h_9 \end{bmatrix}\begin{bmatrix} u_1 \\ v_1 \\ 1 \end{bmatrix}
⎣⎡u2v21⎦⎤≃⎣⎡h1h4h7h2h5h8h3h6h9⎦⎤⎣⎡u1v11⎦⎤
这里还是
≃
\simeq
≃而非=
,因此对矩阵
H
H
H乘以任意的缩放因子
s
s
s上式仍然成立。假设取
s
=
1
h
9
s = \frac{1}{h_9}
s=h91则矩阵H可以重新写成:
H
=
[
h
1
h
2
h
3
h
4
h
5
h
6
h
7
h
8
1
]
H = \begin{bmatrix} h_1 & h_2 & h_3 \\ h_4 & h_5 & h_6 \\ h_7 & h_8 & 1 \end{bmatrix}
H=⎣⎡h1h4h7h2h5h8h3h61⎦⎤
因此可令
h
9
=
1
h_9=1
h9=1,单应矩阵只包含8个自由度。
{
u
2
=
h
1
u
1
+
h
2
v
1
+
h
3
h
7
u
1
+
h
8
v
1
+
1
v
2
=
h
4
u
1
+
h
5
v
1
+
h
6
h
7
u
1
+
h
8
v
1
+
1
\left\{\begin{matrix} u_2=\frac{h_1u_1+h_2v_1+h_3}{h_7u_1+h_8v_1+1}\\ v_2=\frac{h_4u_1+h_5v_1+h_6}{h_7u_1+h_8v_1+1} \end{matrix}\right.
{u2=h7u1+h8v1+1h1u1+h2v1+h3v2=h7u1+h8v1+1h4u1+h5v1+h6
整理之后可以写为:
{ h 1 u 1 + h 2 v 1 + h 3 − h 7 u 1 u 2 − h 8 v 1 u 2 = u 2 h 4 u 1 + h 5 v 1 + h 6 − h 7 u 1 v 2 − h 8 v 1 v 2 = v 2 \left\{\begin{matrix} h_1u_1+h_2v_1+h_3 - h_7u_1u_2 - h_8v_1u_2 = u_2\\ h_4u_1+h_5v_1+h_6 - h_7u_1v_2 - h_8v_1v_2 = v_2 \end{matrix}\right. {h1u1+h2v1+h3−h7u1u2−h8v1u2=u2h4u1+h5v1+h6−h7u1v2−h8v1v2=v2
由以上推理过程,1组匹配点可以得到2个方程,因此自由度为8的单应矩阵H可以通过4组匹配点(不能有3点共线)得到8个方程来求得,方程组可写为:
[ u 1 1 v 1 1 1 0 0 0 − u 1 1 u 2 1 − v 1 1 u 2 1 0 0 0 u 1 1 v 1 1 1 − u 1 1 v 2 1 − v 1 1 v 2 1 u 1 2 v 1 2 1 0 0 0 − u 1 2 u 2 2 − v 1 2 u 2 2 0 0 0 u 1 2 v 1 2 1 − u 1 2 v 2 2 − v 1 2 v 2 2 u 1 3 v 1 3 1 0 0 0 − u 1 3 u 2 3 − v 1 3 u 2 3 0 0 0 u 1 3 v 1 3 1 − u 1 3 v 2 3 − v 1 3 v 2 3 u 1 4 v 1 4 1 0 0 0 − u 1 4 u 2 4 − v 1 4 u 2 4 0 0 0 u 1 4 v 1 4 1 − u 1 4 v 2 4 − v 1 4 v 2 4 ] [ h 1 h 2 h 3 h 4 h 5 h 6 h 7 h 8 ] = [ u 2 1 v 2 1 u 2 2 v 2 2 u 2 3 v 2 3 u 2 4 v 2 4 ] \begin{bmatrix} u^1_1 & v^1_1 & 1 & 0 & 0 & 0 & -u^1_1u^1_2 & -v^1_1u^1_2\\ 0 & 0 & 0 & u^1_1 & v^1_1 & 1 & -u^1_1v^1_2 & -v^1_1v^1_2\\ u^2_1 & v^2_1 & 1 & 0 & 0 & 0 & -u^2_1u^2_2 & -v^2_1u^2_2\\ 0 & 0 & 0 & u^2_1 & v^2_1 & 1 & -u^2_1v^2_2 & -v^2_1v^2_2\\ u^3_1 & v^3_1 & 1 & 0 & 0 & 0 & -u^3_1u^3_2 & -v^3_1u^3_2\\ 0 & 0 & 0 & u^3_1 & v^3_1 & 1 & -u^3_1v^3_2 & -v^3_1v^3_2\\ u^4_1 & v^4_1 & 1 & 0 & 0 & 0 & -u^4_1u^4_2 & -v^4_1u^4_2\\ 0 & 0 & 0 & u^4_1 & v^4_1 & 1 & -u^4_1v^4_2 & -v^4_1v^4_2\\ \end{bmatrix}\begin{bmatrix} h_1\\ h_2\\ h_3\\ h_4\\ h_5\\ h_6\\ h_7\\ h_8 \end{bmatrix}=\begin{bmatrix} u_2^1\\ v_2^1\\ u_2^2\\ v_2^2\\ u_2^3\\ v_2^3\\ u_2^4\\ v_2^4 \end{bmatrix} ⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎡u110u120u130u140v110v120v130v140101010100u110u120u130u140v110v120v130v1401010101−u11u21−u11v21−u12u22−u12v22−u13u23−u13v23−u14u24−u14v24−v11u21−v11v21−v12u22−v12v22−v13u23−v13v23−v14u24−v14v24⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎤⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎡h1h2h3h4h5h6h7h8⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎤=⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎡u21v21u22v22u23v23u24v24⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎤
通过求解上述方程组,可以恢复
H
H
H,这种方法称为直接线性变换法Direct Linear Transform
(DLT)。求得H
后再对其进行分解可以求得
R
R
R和
t
⃗
\vec{t}
t.
参考资料
欢迎访问个人网络日志🌹🌹知行空间🌹🌹
更多推荐
所有评论(0)