《增强现实:原理、算法与应用》读书笔记(2)多视图几何
第三章:实景的三维结构恢复和重建
多视图几何
多视图几何相比双视图几何,有利于消除噪声的影响提高精度,从递推关系上来说,我们可以用基础矩阵来表示双视图的关系,则可以用多焦点张量表达多视图之间的联系(如三视图几何可以使用 3 × 3 × 3 3\times3\times3 3×3×3的张量来表达)。
如图,空间直线
L
L
L在三个视图
C
,
C
′
,
C
′
′
C,C',C''
C,C′,C′′上的投影分别为
l
,
l
′
,
l
′
′
l,l',l''
l,l′,l′′,即三者的反投影平面在空间中交于
L
L
L,可以记为:
L
=
[
π
,
π
′
,
π
′
′
]
L=[\pi,\pi',\pi'']
L=[π,π′,π′′]
存在一个
3
×
3
×
3
3\times3\times3
3×3×3的张量
T
=
(
T
k
i
j
,
i
,
j
,
k
∈
1
,
2
,
3
)
T=\left(T_{k}^{ij},i,j,k\in {1,2,3}\right)
T=(Tkij,i,j,k∈1,2,3),与投影线
l
,
l
′
,
l
′
′
l,l',l''
l,l′,l′′之间的满足:
l
⊤
=
l
′
⊤
T
l
′
′
l^{\top}=l'^{\top}Tl''
l⊤=l′⊤Tl′′
假设三视图的投影矩阵分别为:
P
=
[
I
∣
0
]
P=[I|0]
P=[I∣0]
P
′
=
[
A
∣
a
]
P'=[A|a]
P′=[A∣a]
P
′
′
=
[
B
∣
b
]
P''=[B|b]
P′′=[B∣b]
则张量
T
T
T可以由以下关系式求得:
T
i
j
k
=
a
i
j
b
4
k
−
a
4
j
b
i
k
T_{i}^{jk}=a_{i}^{j}b_{4}^{k}-a_{4}^{j}b_{i}^{k}
Tijk=aijb4k−a4jbik
这里的 a i , b i a_{i},b_{i} ai,bi是对应投影矩阵的第 i i i列,三焦点张量 T T T表示了三条投影线之间的关系,表达式中并没有 L L L的参与。
不过三焦点张量不方便可视化,实际应用中,一般用矩阵的表达联立多视图的多个约束关系。
例如图3.2中的三视图情景,可以列出每个视图上每条直线
l
l
l与其通过相机光心反向投影的平面
π
\pi
π的关系:
π
=
P
⊤
l
\pi=P^{\top}l
π=P⊤l
π
′
=
P
′
⊤
l
′
\pi'=P'^{\top}l'
π′=P′⊤l′
π
′
′
=
P
′
′
⊤
l
′
′
\pi''=P''^{\top}l''
π′′=P′′⊤l′′
证明(瞎几把证明):假设,
π
=
(
n
⊤
,
d
)
⊤
\pi=\left(n^{\top},d\right)^{\top}
π=(n⊤,d)⊤,其中由于平面
π
\pi
π过原点(相机坐标系光心原点),故
d
=
0
d=0
d=0,则
π
=
(
n
⊤
,
0
)
⊤
\pi=\left(n^{\top},0\right)^{\top}
π=(n⊤,0)⊤,而且
n
⊤
X
=
0
n^{\top}X=0
n⊤X=0,
π
⊤
X
^
=
0
\pi^{\top}\hat{X}=0
π⊤X^=0。平面
π
\pi
π上的任一点
X
^
\hat{X}
X^投影到视图平面上的点
x
^
\hat{x}
x^之间满足
X
^
=
s
P
†
x
^
+
C
\hat{X}=sP^{\dagger}\hat{x}+C
X^=sP†x^+C(见本系列上一篇博客),考虑在直线
l
l
l上任取两个点,有
x
^
⊤
l
=
0
\hat{x}^{\top}l=0
x^⊤l=0,则有
π
⊤
(
s
P
†
x
^
+
C
)
=
0
\pi^{\top}\left(sP^{\dagger}\hat{x}+C\right)=0
π⊤(sP†x^+C)=0对任意的
s
,
x
^
∈
l
^
s,\hat{x}\in \hat{l}
s,x^∈l^成立。
由于 C = ( 0 , 0 , 0 , 1 ) ⊤ C=(0,0,0,1)^{\top} C=(0,0,0,1)⊤在平面 π \pi π上,所以 π ⊤ C = 0 \pi^{\top}C=0 π⊤C=0,则有: π ⊤ P † x ^ = 0 \pi^{\top}P^{\dagger}\hat{x}=0 π⊤P†x^=0
结合 x ^ ⊤ l = 0 \hat{x}^{\top}l=0 x^⊤l=0,可推 l ⊤ x ^ = 0 l^{\top}\hat{x}=0 l⊤x^=0,两式联立,由于对任意 x ^ ∈ l ^ \hat{x}\in \hat{l} x^∈l^成立,所以消去 x ^ \hat{x} x^(接下来就是乱搞了,正式要推不要写成这样,不过我觉得这样好理解一些)
π ⊤ P † = π ⊤ P ⊤ ( P P ⊤ ) − 1 = l ⊤ \pi^{\top}P^{\dagger}=\pi^{\top}P^{\top}\left(PP^{\top}\right)^{-1}=l^{\top} π⊤P†=π⊤P⊤(PP⊤)−1=l⊤ π ⊤ P ⊤ = l ⊤ P P ⊤ \pi^{\top}P^{\top}=l^{\top}PP^{\top} π⊤P⊤=l⊤PP⊤ P π = P P ⊤ l P\pi=PP^{\top}l Pπ=PP⊤l π = P ⊤ l \pi=P^{\top}l π=P⊤l
证明完毕。
由于投影线
l
,
l
′
,
l
′
′
l,l',l''
l,l′,l′′是空间同一直线
L
L
L的不同方向的投影,因此其各自反投影平面并不互相线性独立,其中一个平面可以表示成另外两个平面的线性组合,这种约束关系可以通过下式表达:
M
=
[
π
,
π
′
,
π
′
′
]
M=[\pi,\pi',\pi'']
M=[π,π′,π′′]
M
M
M是一个
4
×
3
4\times3
4×3的矩阵,秩为2。
对于空间点的多视图场景,三维点 X j X_{j} Xj在不同视图下的观测点 x i j = P i X ^ i j x_{ij}=P_{i}\hat{X}_{ij} xij=PiX^ij
x i j x_{ij} xij代表 X j X_{j} Xj在第 i i i个视图下的投影
假设有
n
n
n个视图,
m
m
m个三维点,可以通过最小化如下目标函数求解出相机参数:
E
B
A
(
P
1
,
P
2
,
…
,
P
n
,
X
1
,
X
2
,
…
,
X
m
)
=
∑
i
∑
j
w
i
j
∥
π
(
P
i
X
^
j
)
−
x
i
j
∥
2
E_{BA}\left(P_{1},P_{2},…,P_{n},X_{1},X_{2},…,X_{m}\right)=\sum_{i}^{}\sum_{j}^{}w_{ij}\left \| \pi\left(P_{i}\hat{X}_{j}\right)-x_{ij} \right \|^{2}
EBA(P1,P2,…,Pn,X1,X2,…,Xm)=i∑j∑wij∥∥∥π(PiX^j)−xij∥∥∥2
其中, w i j w_{ij} wij为相应的可见性因子(可见则为1,不可见则为0)。