多视图几何总结——等距变换、相似变换、仿射变换和射影变换
多视图几何总结——从本质矩阵恢复摄像机矩阵
本质矩阵是归一化坐标下基本矩阵的特殊形式,具有五个自由度,我们通过八点法或者五点法可以求出本质矩阵,那么我们如何从中恢复出我们实际想要的 R R R和 t t t呢?我们得从性质入手。
(1)本质矩阵性质
多视图几何上定义:一个3×3的矩阵是本质矩阵的充要条件是它的奇异值中有两个相等而第三个是0,为什么呢?
首先我们知道
E
=
[
t
]
×
R
=
S
R
E=[t]_{ \times} R=S R
E=[t]×R=SR其中S为反对称矩阵,反对称矩阵有什么性质呢?
结论1:如果 S S S是实的反对称矩阵,那么 S = U B U T S=UBU^T S=UBUT,其中 B B B为形如 d i a g ( a 1 Z , a 2 Z . . . a m Z , 0 , 0...0 ) diag(a_1Z,a_2Z...a_mZ,0,0...0) diag(a1Z,a2Z...amZ,0,0...0)的分块对角阵,其中 Z = [ 0 1 − 1 0 ] Z=\begin{bmatrix}0 & 1 \\ -1 & 0\end{bmatrix} Z=[0−110],反对称矩阵的特征矢量都是纯虚数并且奇数阶的反对称矩阵必是奇异的
那么根据这个结论我们可以将 S S S矩阵写成 S = k U Z U ⊤ \mathrm{S}=k \mathrm{UZU}^{\top} S=kUZU⊤,而 Z \mathrm{Z} Z为 Z = [ 0 1 0 − 1 0 0 0 0 0 ] \mathrm{Z}=\left[ \begin{array}{ccc}{0} & {1} & {0} \\ {-1} & {0} & {0} \\ {0} & {0} & {0}\end{array}\right] Z=⎣⎡0−10100000⎦⎤而 Z Z Z由可以写成 Z = diag ( 1 , 1 , 0 ) W \mathrm{Z}=\operatorname{diag}(1,1,0) \mathrm{W} Z=diag(1,1,0)W,其中 W \mathrm{W} W为 W = [ 0 − 1 0 1 0 0 0 0 1 ] \mathrm{W}=\left[ \begin{array}{ccc}{0} & {-1} & {0} \\ {1} & {0} & {0} \\ {0} & {0} & {1}\end{array}\right] W=⎣⎡010−100001⎦⎤因此这个 E E E矩阵可以分解为 E = S R = U diag ( 1 , 1 , 0 ) ( W U ⊤ R ) \mathrm{E}=\mathrm{SR}=\mathrm{U} \operatorname{diag}(1,1,0)\left(\mathrm{WU}^{\top} \mathrm{R}\right) E=SR=Udiag(1,1,0)(WU⊤R)这样就证明了 E E E拥有两个相等的奇异值
(2)从本质矩阵恢复摄像机矩阵
假定第一个摄像机矩阵是
P
=
[
I
∣
0
]
\mathrm{P}=[\mathrm{I} | 0]
P=[I∣0],为了计算第二个摄像机矩阵
P
′
\mathrm{P}^{\prime}
P′,必须把
E
E
E矩阵分解为反对成举着和旋转矩阵的乘积
S
R
\mathrm{SR}
SR。
还是根据上面的结论一,我们在相差一个常数因子的前提下有
S
=
U
Z
U
T
\mathrm{S}=\mathrm{U} \mathrm{ZU}^{\mathrm{T}}
S=UZUT,我们假设旋转矩阵分解为
U
X
V
T
\mathrm{UXV}^{\mathrm{T}}
UXVT,则有
U
diag
(
1
,
1
,
0
)
V
T
=
E
=
S
R
=
(
U
Z
U
T
)
(
U
X
V
⊤
)
=
U
(
Z
X
)
V
T
\mathrm{U} \operatorname{diag}(1,1,0) \mathrm{V}^{\mathrm{T}}=\mathrm{E}=\mathrm{SR}=\left(\mathrm{UZU}^{\mathrm{T}}\right)\left(\mathrm{UXV}^{\top}\right)=\mathrm{U}(\mathrm{ZX}) \mathrm{V}^{\mathrm{T}}
Udiag(1,1,0)VT=E=SR=(UZUT)(UXV⊤)=U(ZX)VT则有
Z
X
=
diag
(
1
,
1
,
0
)
\mathrm{ZX}=\operatorname{diag}(1,1,0)
ZX=diag(1,1,0),因此
x
=
W
\mathrm{x}=\mathrm{W}
x=W或者
X
=
W
T
\mathrm{X}=\mathrm{W}^{\mathrm{T}}
X=WT
结论:如果 E E E的SVD分解为 U diag ( 1 , 1 , 0 ) V ⊤ \mathrm{U} \operatorname{diag}(1,1,0) \mathrm{V}^{\top} Udiag(1,1,0)V⊤, E = S R \mathrm{E}=\mathrm{SR} E=SR有两种分解形式,分别是: S = U Z U ⊤ R = U W V T or UW T V ⊤ \mathrm{S}=\mathrm{UZU}^{\top} \quad \mathrm{R}=\mathrm{UWV}^{\mathrm{T}} \text {or UW }^{\mathrm{T}} \mathrm{V}^{\top} S=UZU⊤R=UWVTor UW TV⊤
接着分析,又因为
S
t
=
0
\mathrm{St}=0
St=0(自己和自己叉乘肯定为0嘛)以及
∥
t
∥
=
1
\|\mathbf{t}\|=1
∥t∥=1(对两个摄像机矩阵的基线的一种常用归一化),因此
t
=
U
(
0
,
0
,
1
)
T
=
u
3
\mathbf{t}=\mathrm{U}(0,0,1)^{\mathrm{T}}=\mathbf{u}_{3}
t=U(0,0,1)T=u3,即矩阵
U
U
U的最后一列,这样的好处是不用再去求
S
S
S了,应为
t
\mathbf{t}
t的符号不确定,
R
R
R矩阵有两种可能,因此其分解有如下四种情况:
P
′
=
[
U
W
V
T
∣
+
u
3
]
or
[
U
W
V
T
∣
−
u
3
]
o
r
[
U
W
T
V
T
∣
+
u
3
]
or
[
U
W
T
V
T
∣
−
u
3
]
\mathrm{P}^{\prime}=\left[\mathrm{UWV}^{\mathrm{T}} |+\mathbf{u}_{3}\right] \text { or }\left[\mathrm{UWV}^{\mathrm{T}} |-\mathbf{u}_{3}\right] or \left[\mathrm{UW}^{\mathrm{T}} \mathrm{V}^{\mathrm{T}} |+\mathbf{u}_{3}\right] \text { or }\left[\mathrm{UW}^{\mathrm{T}} \mathrm{V}^{\mathrm{T}} |-\mathbf{u}_{3}\right]
P′=[UWVT∣+u3] or [UWVT∣−u3]or[UWTVT∣+u3] or [UWTVT∣−u3]
就是下面这张图展示的
然后用空间中的一个点作测试,验证它是否在两个摄像机前面就可以从两个不同解中确定一个作为摄像机矩阵
到这里就OK啦,有问题欢迎交流~
此外,对SLAM算法感兴趣的同学可以看考我的博客SLAM算法总结——经典SLAM算法框架总结