本文系统梳理从相机成像模型,通过不同图像帧之间的构造几何约束求解位姿变换,再根据位姿变换和匹配点还原三维坐标的过程,可以作为基于特征点法的视觉SLAM的数学基础。
1、相机成像模型
1.1、针孔相机模型
实际相机的成像方式通常很复杂,针孔模型是对这种复杂成像方式的简化描述,其原理如下图
图中, O − x − y − z O-x-y-z O−x−y−z为相机坐标系 { C } \{C\} {C},其 x x x轴, y y y轴位于针孔平面上,一般要求从相机后方看去 x x x轴向右, y y y轴向下, O O O是针孔模型中的针孔,也称为摄像机的光心; O ′ − x i m g − y i m g O^{\prime}-x^{\mathrm{img}}-y^{\mathrm{img}} O′−ximg−yimg为物理成像坐标系,位于物理成像平面上。针孔平面与物理成像平面平行,二者之间距离为焦距 f f f,也即 O O ′ OO^{\prime} OO′的距离。习惯上,规定从相机后侧看时, x , x i m g x,x^{\mathrm{img}} x,ximg轴向右, y , y i m g y,y^{\mathrm{img}} y,yimg轴向下, z z z轴向前。
从相机坐标系下的空间点
p
=
[
X
,
Y
,
Z
]
T
\mathbf{p}=[X,Y,Z]^{T}
p=[X,Y,Z]T发出的光线,穿过针孔
O
O
O,落在物理成像平面上,成为点
[
X
i
m
g
,
Y
i
m
g
]
T
[X^\mathrm{img},Y^{\mathrm{img}}]^{T}
[Ximg,Yimg]T,考虑到
X
X
X和
X
i
m
g
X^{\mathrm{img}}
Ximg,
Y
Y
Y和
Y
i
m
g
Y^{\mathrm{img}}
Yimg符号必定相反,根据三角形相似关系,可以得到
Z
f
=
−
X
X
i
m
g
=
−
Y
Y
i
m
g
(1)
\frac{Z}{f}=-\frac{X}{X^{\mathrm{img}}}=-\frac{Y}{Y^{\mathrm{img}}}\tag{1}
fZ=−XimgX=−YimgY(1)
整理得到物理成像平面上的坐标
X
i
m
g
=
−
f
X
Z
Y
i
m
g
=
−
f
Y
Z
X^{\mathrm{img}}=-f\frac{X}{Z}\\ Y^{\mathrm{img}}=-f\frac{Y}{Z}
Ximg=−fZXYimg=−fZY
负号表示成像为倒向,在实际成像过程中,为方便起见,经过算法内部调整为正像,即将物理成像平面上的坐标变为
X
i
m
g
=
f
X
Z
Y
i
m
g
=
f
Y
Z
\begin{align*} X^{\mathrm{img}}=f\frac{X}{Z}\tag{2a}\\ Y^{\mathrm{img}}=f\frac{Y}{Z}\tag{2b} \end{align*}
Ximg=fZXYimg=fZY(2a)(2b)
1.2、像素坐标系
在相机中,最终获得的是
[
X
i
m
g
,
Y
i
m
g
]
T
[X^\mathrm{img},Y^{\mathrm{img}}]^{T}
[Ximg,Yimg]T对应的像素坐标
[
⌊
U
⌋
,
⌊
V
⌋
]
T
[\lfloor{U}\rfloor,\lfloor{V}\rfloor]^{T}
[⌊U⌋,⌊V⌋]T,其中
{
U
=
α
X
i
m
g
+
c
x
V
=
β
Y
i
m
g
+
c
y
(3)
\left\{ \begin{align*} U&=\alpha{X}^{\mathrm{img}}+c_{x}\\ V&=\beta{Y}^{\mathrm{img}}+c_{y} \end{align*} \right.\tag{3}
{UV=αXimg+cx=βYimg+cy(3)
其中,
α
,
β
\alpha,\beta
α,β表示
u
,
v
u,v
u,v轴上单位距离对应的像素数,
c
x
,
c
y
c_{x},c_{y}
cx,cy是相机光心的像素坐标
{
U
=
f
x
X
Z
+
c
x
V
=
f
y
Y
Z
+
c
y
(4)
\left\{ \begin{align*} U&=f_{x}\frac{X^{\mathrm{}}}{Z}+c_{x}\\ V&=f_{y}\frac{Y}{Z}+c_{y} \end{align*} \right.\tag{4}
⎩
⎨
⎧UV=fxZX+cx=fyZY+cy(4)
其中
f
x
=
α
f
f_{x}=\alpha{f}
fx=αf,
f
y
=
β
f
f_{y}=\beta{f}
fy=βf
根据以上关系,可以得到下式,其中左侧是齐次坐标,右侧是非齐次坐标
[
U
V
1
]
=
1
Z
[
f
x
0
c
x
0
f
y
c
y
0
0
1
]
[
X
Y
Z
]
(5)
\left[\begin{align*} U\\V\\1 \end{align*}\right]= \frac{1}{Z}\left[ \begin{array}{ccc} f_{x}&0&c_{x}\\ 0&f_{y}&c_{y}\\ 0&0&1 \end{array} \right] \left[ \begin{array}{ccc} X\\Y\\Z \end{array} \right]\tag{5}
UV1
=Z1
fx000fy0cxcy1
XYZ
(5)
定义相机的内参数矩阵
K
=
[
f
x
0
c
x
0
f
y
c
y
0
0
1
]
(6)
\mathbf{K}=\left[\begin{array}{ccc} f_{x}&0&c_{x}\\ 0&f_{y}&c_{y}\\ 0&0&1 \end{array}\right]\tag{6}
K=
fx000fy0cxcy1
(6)
因为
f
x
,
f
y
≠
0
f_{x},f_{y}\neq0
fx,fy=0,容易看出,相机的内参数矩阵是可逆的,该矩阵通常右生产厂商标定,在出厂后不会再发生变化
设
q
=
[
U
,
V
,
1
]
T
\mathbf{q}=[U,V,1]^{T}
q=[U,V,1]T,则
q
=
1
Z
K
p
(7)
\mathbf{q}=\frac{1}{Z}\mathbf{K}\mathbf{p}\tag{7}
q=Z1Kp(7)
实际的像素坐标对求出的
q
\mathbf{q}
q取整即可。
设初始相机坐标系 { C 0 } \{C_{0}\} {C0}为世界坐标系 { W } \{W\} {W},若已知 { W } \{W\} {W}到相机坐标系相机坐标系 { C k } , k ⩾ 0 \{C_{k}\},k\geqslant0 {Ck},k⩾0的位姿,当得到新一帧图像 I m g k + 1 \mathrm{Img}_{k+1} Imgk+1后,根据拍摄到的图像帧估计从相机坐标系 { C k } \{C_{k}\} {Ck}到 { C k + 1 } \{C_{k+1}\} {Ck+1}的旋转矩阵和平移向量 R c k + 1 c k , t c k + 1 c k c k + 1 \mathbf{R}_{c_{k+1}c_{k}},\mathbf{t}^{c_{k+1}}_{c_{k+1}c_{k}} Rck+1ck,tck+1ckck+1,这两个量在后文中简记作 R , t \mathbf{R},\mathbf{t} R,t,是计算的目标
1.3、等价成像模型
成像模型可以做两处等价。
第一处等价:根据 ( 2 ) (2) (2),把“将倒向调整为正像的过程”等价为将成像平面对称地放到针孔平面前方,成像位置位于针孔 p \mathbf{p} p与针孔 O O O的连线与对称的成像平面的交点上;
第二处等价:根据
(
7
)
(7)
(7),成像过程可等价为先将空间点
p
=
[
X
,
Y
,
Z
]
T
\mathbf{p}=[X,Y,Z]^{T}
p=[X,Y,Z]T转换到归一化平面
z
=
1
z=1
z=1上的
p
‾
\overline{\mathbf{p}}
p,即令
p
‾
=
[
X
‾
,
Y
‾
,
1
]
T
=
[
X
Z
,
Y
Z
,
1
]
T
(8)
\overline{\mathbf{p}}=\begin{bmatrix}\overline{X},\overline{Y},1\end{bmatrix}^{T}=\begin{bmatrix}\frac{X}{Z},\frac{Y}{Z},1\end{bmatrix}^{T}\tag{8}
p=[X,Y,1]T=[ZX,ZY,1]T(8)
再根据第一处等价投影到对称的成像平面,成为下面的坐标后再取整数
q
=
K
p
‾
(9)
\mathbf{q}=\mathbf{K}\overline{\mathbf{p}}\tag{9}
q=Kp(9)
上述等价过程的示意图如下:
2、已知2D-2D匹配数据估算相机运动
2.1、2D-2D存在的约束
2.1.1、对极约束
设三维空间点
P
P
P在两帧相机坐标系下坐标为
p
1
,
p
2
\mathbf{p}_{1},\mathbf{p}_{2}
p1,p2,二者的归一化坐标为
p
‾
1
,
p
‾
2
\overline{\mathbf{p}}_{1},\overline{\mathbf{p}}_{2}
p1,p2,这两个归一化坐标对应的空间点分别为
P
1
,
P
2
P_{1},P_{2}
P1,P2,容易看出
O
1
,
O
2
,
P
,
P
1
,
P
2
O_{1},O_{2},P,P_{1},P_{2}
O1,O2,P,P1,P2位于同一平面上,故
O
2
P
2
→
⋅
(
O
2
O
1
→
×
O
1
P
1
→
)
=
0
(10)
\overrightarrow{O_{2}P_{2}}\cdot\left(\overrightarrow{O_{2}O_{1}}\times\overrightarrow{O_{1}P_{1}}\right)=0\tag{10}
O2P2⋅(O2O1×O1P1)=0(10)
下面在
{
C
2
}
\{C_{2}\}
{C2}坐标系下表示
(
8
)
(8)
(8),在
{
C
2
}
\{C_{2}\}
{C2}坐标系下,
O
2
P
2
→
=
p
‾
2
\overrightarrow{O_{2}P_{2}}=\overline{\mathbf{p}}_{2}
O2P2=p2,
O
2
O
1
→
=
t
\overrightarrow{O_{2}O_{1}}=\mathbf{t}
O2O1=t,
O
1
P
1
→
=
R
p
‾
1
+
t
\overrightarrow{O_{1}P_{1}}=\mathbf{R}\overline{\mathbf{p}}_{1}+\mathbf{t}
O1P1=Rp1+t,故
(
8
)
(8)
(8)可改写为
p
‾
2
T
(
t
∧
(
R
p
‾
1
+
t
)
)
=
0
\overline{\mathbf{p}}_{2}^{T}\left(\mathbf{t}^{\wedge}(\mathbf{R}\overline{\mathbf{p}}_{1}+\mathbf{t})\right)=0
p2T(t∧(Rp1+t))=0
进一步化简可得
p
‾
2
T
(
t
∧
R
)
p
‾
1
=
0
(11)
\overline{\mathbf{p}}_{2}^{T}\left(\mathbf{t}^{\wedge}\mathbf{R}\right)\overline{\mathbf{p}}_{1}=0\tag{11}
p2T(t∧R)p1=0(11)
根据归一化坐标和像素坐标的转换关系,得到
q
2
T
[
(
K
−
1
)
T
(
t
∧
R
)
K
−
1
]
q
1
=
0
(12)
\mathbf{q}_{2}^{T}\left[(\mathbf{K}^{-1})^{T}(\mathbf{t}^{\wedge}\mathbf{R})\mathbf{K}^{-1}\right]\mathbf{q}_{1}=0\tag{12}
q2T[(K−1)T(t∧R)K−1]q1=0(12)
称下面的矩阵为本质矩阵(Essential Matrix)
E
=
t
∧
R
\mathbf{E}=\mathbf{t}^{\wedge}\mathbf{R}
E=t∧R
需要说明,一个矩阵能够成为本质矩阵当且仅当其的奇异值为
σ
,
σ
,
0
\sigma,\sigma,0
σ,σ,0,其中
σ
\sigma
σ为任意实数
称下面的矩阵为基础矩阵(Fundamental Matrix)
F
=
(
K
−
1
)
T
E
K
−
1
\mathbf{F}=(\mathbf{K}^{-1})^{T}\mathbf{E}\mathbf{K}^{-1}
F=(K−1)TEK−1
(
11
)
(11)
(11)可改写为
p
‾
2
T
E
p
‾
1
=
0
\begin{align*} \overline{\mathbf{p}}_{2}^{T}\mathbf{E}\overline{\mathbf{p}}_{1}=0\tag{13}\\ \end{align*}
p2TEp1=0(13)
(
12
)
(12)
(12)可改写为
q
2
T
F
q
1
=
0
(14)
\mathbf{q}_{2}^{T}\mathbf{F}\mathbf{q}_{1}=0\tag{14}
q2TFq1=0(14)
(
11
)
,
(
12
)
(11),(12)
(11),(12)或
(
13
)
,
(
14
)
(13),(14)
(13),(14)称为对极约束
2.2、约束矩阵的计算
本质矩阵,基础矩阵,单应矩阵都可以做为相机运动过程中存在的约束,可以通过已知的匹配点可计算这些约束矩阵
2.2.1、基础矩阵的计算
将
(
14
)
(14)
(14)的矩阵乘法写成元素形式
[
U
2
V
2
1
]
[
f
1
f
2
f
3
f
4
f
5
f
6
f
7
f
8
f
9
]
[
U
1
V
1
1
]
=
0
\begin{bmatrix} U_{2}&V_{2}&1 \end{bmatrix} \begin{bmatrix} f_{1}&f_{2}&f_{3}\\ f_{4}&f_{5}&f_{6}\\ f_{7}&f_{8}&f_{9} \end{bmatrix} \begin{bmatrix} U_{1}\\ V_{1}\\ 1 \end{bmatrix}= 0
[U2V21]
f1f4f7f2f5f8f3f6f9
U1V11
=0
令
f
=
[
f
1
,
⋯
,
f
9
]
T
\mathbf{f}=[f_{1},\cdots,f_{9}]^{T}
f=[f1,⋯,f9]T,经过整理,上式可以等价地改写为
[
U
1
U
2
U
2
V
1
U
2
V
2
U
1
V
1
V
2
V
2
U
1
V
1
1
]
f
=
0
(15)
\begin{bmatrix} U_{1}U_{2}&U_{2}V_{1}&U_{2}&V_{2}U_{1}&V_{1}V_{2}&V_{2}&U_{1}&V_{1}&1 \end{bmatrix} \mathbf{f}=0\tag{15}
[U1U2U2V1U2V2U1V1V2V2U1V11]f=0(15)
通常限定
∥
f
∥
=
1
\|\mathbf{f}\|=1
∥f∥=1保证尺度确定,根据上式可以看出,一组匹配点可以构造出一项约束
设匹配点组成的系数矩阵为
A
∈
R
n
×
9
\mathbf{A}\in\mathbb{R}^{n\times9}
A∈Rn×9,
n
n
n为匹配点对数,则基础矩阵的约束方程
(
20
)
(20)
(20)可改写为
A
f
=
0
∥
f
∥
=
1
(16)
\mathbf{A}\mathbf{f}=\mathbf{0}\quad\|\mathbf{f}\|=1\tag{16}
Af=0∥f∥=1(16)
当匹配点较少时,
r
a
n
k
(
A
)
<
8
\mathrm{rank}(\mathbf{A})<8
rank(A)<8时,
(
23
)
(23)
(23)为欠定问题,具有多个解;当
r
a
n
k
(
A
)
=
8
\mathrm{rank}(\mathbf{A})=8
rank(A)=8时,
(
21
)
(21)
(21)为适定问题,具有唯一解,可直接通过解线性方程组获得;当匹配点较多时,
r
a
n
k
(
A
)
>
8
\mathrm{rank}(\mathbf{A})>8
rank(A)>8时,
(
23
)
(23)
(23)变为超定问题,线性方程组无解,故可以构造如下优化问题求近似解
f
~
=
a
r
g
min
f
:
∥
f
∥
=
1
1
2
∥
A
f
∥
2
(17)
\begin{align*} \tilde{\mathbf{f}} &=\underset{\mathbf{f}:\|\mathbf{f}\|=1}{\mathrm{arg}\min}\,\frac{1}{2}\|\mathbf{A}\mathbf{f}\|^{2}\\ \end{align*}\tag{17}
f~=f:∥f∥=1argmin21∥Af∥2(17)
对
A
\mathbf{A}
A做奇异值分解
A
=
U
Σ
V
T
\mathbf{A}=\mathbf{U}\mathbf{\Sigma}\mathbf{V}^{T}
A=UΣVT
其中
V
=
[
v
1
,
⋯
,
v
9
]
\mathbf{V}=[\mathbf{v}_{1},\cdots,\mathbf{v}_{9}]
V=[v1,⋯,v9]按照特征值降序排列,容易知道
f
~
\tilde{\mathbf{f}}
f~可取为
f
~
=
±
v
9
(18)
\tilde{\mathbf{f}}=\pm\mathbf{v}_{9}\tag{18}
f~=±v9(18)
将
f
~
\tilde{\mathbf{f}}
f~转变为
F
~
\tilde{\mathbf{F}}
F~得到基础矩阵,并根据定义求出
E
~
=
K
T
F
~
K
\tilde{\mathbf{E}}=\mathbf{K}^{T}\tilde{\mathbf{F}}\mathbf{K}
E~=KTF~K。但受误差影响此时
E
~
\tilde{\mathbf{E}}
E~不一定满足成为本质矩阵的充要条件,需要进一步变换,首先对
E
~
\tilde{\mathbf{E}}
E~做SVD分解
E
~
=
U
~
d
i
a
g
(
σ
~
1
,
σ
~
2
,
σ
~
3
)
V
~
T
\tilde{\mathbf{E}}=\tilde{\mathbf{U}}\mathrm{diag}(\tilde{\sigma}_{1},\tilde{\sigma}_{2},\tilde{\sigma}_{3})\tilde{\mathbf{V}}^{T}
E~=U~diag(σ~1,σ~2,σ~3)V~T
可令
E
∗
=
U
~
d
i
a
g
(
σ
~
1
+
σ
~
2
2
,
σ
~
1
+
σ
~
2
2
,
0
)
V
~
T
(19)
\mathbf{E}^{\ast}=\tilde{\mathbf{U}}\mathrm{diag}(\frac{\tilde{\sigma}_{1}+\tilde{\sigma}_{2}}{2},\frac{\tilde{\sigma}_{1}+\tilde{\sigma}_{2}}{2},0)\tilde{\mathbf{V}}^{T}\tag{19}
E∗=U~diag(2σ~1+σ~2,2σ~1+σ~2,0)V~T(19)
为最终所求的本质矩阵,
E
∗
\mathbf{E}^{\ast}
E∗满足成为本质矩阵的充要条件
2.3、基于约束矩阵的运动恢复
得到约束矩阵后,可通过分解约束矩阵来恢复运动
2.3.1、基于基础矩阵的运动恢复
得到基础矩阵 F \mathbf{F} F后,可以根据相机内参数矩阵转换为本质矩阵 E = K T F K \mathbf{E}=\mathbf{K}^{T}\mathbf{F}\mathbf{K} E=KTFK
对
E
\mathbf{E}
E进行奇异值分解
E
=
U
Σ
V
T
\mathbf{E}=\mathbf{U}\boldsymbol\Sigma\mathbf{V}^{T}
E=UΣVT
满足
E
=
t
∧
R
\mathbf{E}=\mathbf{t}^{\wedge}\mathbf{R}
E=t∧R的
t
\mathbf{t}
t和
R
\mathbf{R}
R各有两个可行解,具体形式如下
t
∧
=
{
U
W
Σ
U
T
U
W
T
Σ
U
T
R
=
{
U
W
′
V
T
U
W
′
W
′
T
V
T
(20)
\begin{align*} \mathbf{t}^{\wedge}=\left\{\begin{array}{ll}\mathbf{U}\mathbf{W}\boldsymbol\Sigma\mathbf{U}^{T}\\\mathbf{U}\mathbf{W}^{T}\boldsymbol\Sigma\mathbf{U}^{T}\end{array}\right.\quad \mathbf{R}=\left\{\begin{array}{ll}\mathbf{U}\mathbf{W}^{\prime}\mathbf{V}^{T}\\\mathbf{U}\mathbf{W}^{\prime}\vphantom{\mathbf{W}^{\prime}}^{T}\mathbf{V}^{T}\end{array}\right. \end{align*}\tag{20}
t∧={UWΣUTUWTΣUTR={UW′VTUW′W′TVT(20)
其中
W
=
[
0
−
1
0
1
0
0
0
0
1
]
\mathbf{W}=\begin{bmatrix}0&-1&0\\1&0&0\\0&0&1\end{bmatrix}
W=
010−100001
,
W
′
=
{
W
det
(
U
V
)
=
1
−
W
det
(
U
V
)
=
−
1
\mathbf{W}^{\prime}=\left\{\begin{array}{cl}\mathbf{W}&\det(\mathbf{U}\mathbf{V})=1\\-\mathbf{W}&\det(\mathbf{U}\mathbf{V})=-1\end{array}\right.
W′={W−Wdet(UV)=1det(UV)=−1以保证
det
(
R
)
=
1
\det(\mathbf{R})=1
det(R)=1。满足
E
=
t
∧
R
\mathbf{E}=\mathbf{t}^{\wedge}\mathbf{R}
E=t∧R的
(
R
,
t
)
(\mathbf{R},\mathbf{t})
(R,t)共有四个可行解,为
t
\mathbf{t}
t和
R
\mathbf{R}
R各自可行解的两两组合。
可以证明,若本质矩阵正确,则四个解中有且仅有一个解使得在两相机中都可见的空间中点在两个相机中的深度均为正值,实践中可以通过比较三角化成功的点的数量找到正确的解。
3、三角化
已知第一幅图像对应的世界坐标系下的相机位姿 ( R 1 , t 1 ) (\mathbf{R}_{1},\mathbf{t}_{1}) (R1,t1),得到两幅图像对应的相机相对运动 R , t \mathbf{R},\mathbf{t} R,t后,可以计算第二幅图像对应的世界坐标系下的相机位姿 ( R 2 , t 2 ) (\mathbf{R}_{2},\mathbf{t}_{2}) (R2,t2),知两幅图像的二维匹配点对 q 1 , q 2 \mathbf{q}_{1},\mathbf{q}_{2} q1,q2,可以计算从世界坐标系下的三维点到像素坐标的投影矩阵 Ψ 1 = K [ R 1 , t 1 ] , Ψ 2 = K [ R 2 , t 2 ] \boldsymbol\Psi_{1}=\mathbf{K}[\mathbf{R}_{1},\mathbf{t}_{1}],\boldsymbol\Psi_{2}=\mathbf{K}[\mathbf{R}_{2},\mathbf{t}_{2}] Ψ1=K[R1,t1],Ψ2=K[R2,t2]。三角化即根据 Ψ 1 , Ψ 2 , q 1 , q 2 \boldsymbol\Psi_{1},\boldsymbol\Psi_{2},\mathbf{q}_{1},\mathbf{q}_{2} Ψ1,Ψ2,q1,q2估计二维匹配点对应的世界坐标系下的齐次空间点 X = [ x 1 ] ∈ R 4 \mathbf{X}=\begin{bmatrix}\mathbf{x}\\1\end{bmatrix}\in\mathbb{R}^{4} X=[x1]∈R4,即恢复场景中点的真实三维位置的。因为从几何意义上看,如前图,三角化的过程即为寻找两条从相机光心 O 1 , O 2 O_{1},O_{2} O1,O2出发,穿过归一化平面上的投影点的射线在空间中的交点 P P P的过程,此时 O 1 , O 2 , P O_{1},O_{2},P O1,O2,P组成了一个三角形,故称为三角化。
暂忽略下标,根据上面的讨论可求出相机坐标系下的归一化坐标
q
=
1
Z
Ψ
X
(21)
\mathbf{q}=\frac{1}{Z}\boldsymbol\Psi\mathbf{X}\tag{21}
q=Z1ΨX(21)
其中
Z
Z
Z为
[
R
,
t
]
X
[\mathbf{R},\mathbf{t}]\mathbf{X}
[R,t]X的最后一维坐标
在上式等号两侧同时左乘
q
∧
\mathbf{q}^{\wedge}
q∧,得到
q
∧
Ψ
X
=
0
(22)
\mathbf{q}^{\wedge}\boldsymbol\Psi\mathbf{X}=\mathbf{0}\tag{22}
q∧ΨX=0(22)
不妨令
Ψ
=
[
Ψ
1
Ψ
2
Ψ
3
]
\boldsymbol\Psi=\begin{bmatrix}\boldsymbol\Psi^{1}\\\boldsymbol\Psi^{2}\\\boldsymbol\Psi^{3}\end{bmatrix}
Ψ=
Ψ1Ψ2Ψ3
,即
Ψ
1
,
Ψ
2
,
Ψ
3
\boldsymbol\Psi^{1},\boldsymbol\Psi^{2},\boldsymbol\Psi^{3}
Ψ1,Ψ2,Ψ3为
Ψ
\boldsymbol\Psi
Ψ的行向量,此时
(
22
)
(22)
(22)可以写成
[
0
−
1
V
1
0
−
U
−
V
U
0
]
[
Ψ
1
Ψ
2
Ψ
3
]
X
=
0
\begin{bmatrix} 0&-1&V\\ 1&0&-U\\ -V&U&0 \end{bmatrix} \begin{bmatrix}\boldsymbol\Psi^{1}\\\boldsymbol\Psi^{2}\\\boldsymbol\Psi^{3}\end{bmatrix} \mathbf{X}=\mathbf{0}
01−V−10UV−U0
Ψ1Ψ2Ψ3
X=0
进一步可写为
[
V
Ψ
3
−
Ψ
2
Ψ
1
−
U
Ψ
3
U
Ψ
2
−
V
Ψ
1
]
X
=
0
\begin{bmatrix} V\boldsymbol\Psi^{3}-\boldsymbol\Psi^{2}\\ \boldsymbol\Psi^{1}-U\boldsymbol\Psi^{3}\\ U\boldsymbol\Psi^{2}-V\boldsymbol\Psi^{1} \end{bmatrix} \mathbf{X}=\mathbf{0}
VΨ3−Ψ2Ψ1−UΨ3UΨ2−VΨ1
X=0
上式中系数矩阵的第三行可以通过前两行消去,即得到
[
V
Ψ
3
−
Ψ
2
Ψ
1
−
U
Ψ
3
]
X
=
0
\begin{bmatrix} V\boldsymbol\Psi^{3}-\boldsymbol\Psi^{2}\\ \boldsymbol\Psi^{1}-U\boldsymbol\Psi^{3}\\ \end{bmatrix} \mathbf{X}=\mathbf{0}
[VΨ3−Ψ2Ψ1−UΨ3]X=0
考虑到两个匹配点各自能产生一个上述方程组,故一对匹配点可以提供
4
4
4个约束方程
[
V
1
Ψ
1
3
−
Ψ
1
2
Ψ
1
1
−
U
1
Ψ
1
3
V
2
Ψ
2
3
−
Ψ
2
2
Ψ
2
1
−
U
2
Ψ
2
3
]
X
=
0
(23)
\begin{bmatrix} V_{1}\boldsymbol\Psi_{1}^{3}-\boldsymbol\Psi^{2}_{1}\\ \boldsymbol\Psi^{1}_{1}-U_{1}\boldsymbol\Psi^{3}_{1}\\ V_{2}\boldsymbol\Psi_{2}^{3}-\boldsymbol\Psi^{2}_{2}\\ \boldsymbol\Psi^{1}_{2}-U_{2}\boldsymbol\Psi^{3}_{2}\\ \end{bmatrix} \mathbf{X}=\mathbf{0}\tag{23}
V1Ψ13−Ψ12Ψ11−U1Ψ13V2Ψ23−Ψ22Ψ21−U2Ψ23
X=0(23)
设匹配点组成的系数矩阵为
A
∈
R
4
n
×
4
\mathbf{A}\in\mathbb{R}^{4n\times4}
A∈R4n×4,
n
n
n为匹配点对数,则空间坐标的约束方程
(
29
)
(29)
(29)可写为
A
X
=
0
(24)
\mathbf{A}\mathbf{X}=\mathbf{0}\tag{24}
AX=0(24)
当
r
a
n
k
(
A
)
<
4
\mathrm{rank}(\mathbf{A})<4
rank(A)<4时,
(
30
)
(30)
(30)为欠定问题,具有多个解;当
r
a
n
k
(
A
)
=
4
\mathrm{rank}(\mathbf{A})=4
rank(A)=4时,
(
30
)
(30)
(30)为适定问题,具有唯一解,可直接通过解线性方程组获得,也可等价地通过SVD分解进行求解,先构造如下优化问题求近似解
X
~
=
a
r
g
min
X
:
∥
X
∥
=
1
1
2
∥
A
X
∥
2
(25)
\begin{align*} \tilde{\mathbf{X}} &=\underset{\mathbf{X}:\|\mathbf{X}\|=1}{\mathrm{arg}\min}\,\frac{1}{2}\|\mathbf{A}\mathbf{X}\|^{2}\\ \end{align*}\tag{25}
X~=X:∥X∥=1argmin21∥AX∥2(25)
对
A
\mathbf{A}
A做奇异值分解
A
=
U
Σ
V
T
\mathbf{A}=\mathbf{U}\mathbf{\Sigma}\mathbf{V}^{T}
A=UΣVT
其中
V
=
[
v
1
,
⋯
,
v
4
]
\mathbf{V}=[\mathbf{v}_{1},\cdots,\mathbf{v}_{4}]
V=[v1,⋯,v4]按照特征值降序排列,容易知道
P
~
\tilde{\mathbf{P}}
P~可取为
X
~
=
±
v
4
(26)
\tilde{\mathbf{X}}=\pm\mathbf{v}_{4}\tag{26}
X~=±v4(26)
设
α
\alpha
α为
X
~
\tilde{\mathbf{X}}
X~在第四维上的分量,若
α
=
0
\alpha=0
α=0,则认为三角化失败,否则为保证所求结果为齐次坐标,即第四维度上值为
1
1
1,可令
X
∗
=
1
α
X
~
(27)
\mathbf{X}^{\ast}=\frac{1}{\alpha}\tilde{\mathbf{X}}\tag{27}
X∗=α1X~(27)
求出
X
∗
\mathbf{X}^{\ast}
X∗后应继续检验三角化是否失败,若对应的在三维点在两相机坐标系下的深度小于等于
0
0
0,即
[
R
1
,
t
1
]
X
∗
[\mathbf{R}_{1},\mathbf{t}_{1}]\mathbf{X}^{\ast}
[R1,t1]X∗,
[
R
2
,
t
2
]
X
∗
[\mathbf{R}_{2},\mathbf{t}_{2}]\mathbf{X}^{\ast}
[R2,t2]X∗在第三个维度上的数值小于等于
0
0
0,则认为三角化失败。
4、已知3D-2D匹配数据估算相机运动
已知世界坐标系下的3D空间点坐标和其在相机中投影的2D像素坐标,估计世界坐标系到相机坐标系的位姿变换的问题称为PnP(Perspective-n-Point)问题。
4.1、DLT
已知空间点在世界坐标系下的齐次坐标为 X ∈ R 4 \mathbf{X}\in\mathbb{R}^{4} X∈R4,和其对应的像素坐标 q = [ U , V , 1 ] T \mathbf{q}=[U,V,1]^{T} q=[U,V,1]T,现计算从世界坐标系下的齐次坐标到相机坐标系的位姿变换 R , t \mathbf{R},\mathbf{t} R,t
设从世界坐标系下的三维点到像素坐标的投影矩阵 Ψ = K [ R , t ] \boldsymbol\Psi=\mathbf{K}[\mathbf{R},\mathbf{t}] Ψ=K[R,t],并令
根据
(
21
)
(21)
(21)
Z
[
U
V
1
]
=
[
Ψ
1
Ψ
2
Ψ
3
]
X
(28)
Z\begin{bmatrix} U\\V\\1 \end{bmatrix} =\begin{bmatrix}\boldsymbol\Psi^{1}\\\boldsymbol\Psi^{2}\\\boldsymbol\Psi^{3}\end{bmatrix}\mathbf{X}\tag{28}
Z
UV1
=
Ψ1Ψ2Ψ3
X(28)
(
36
)
(36)
(36)可以化简为
Ψ
1
X
=
Z
U
Ψ
2
X
=
Z
V
Ψ
3
X
=
Z
\begin{align*} \boldsymbol\Psi^{1}\mathbf{X}&=ZU\\ \boldsymbol\Psi^{2}\mathbf{X}&=ZV\\ \boldsymbol\Psi^{3}\mathbf{X}&=Z \end{align*}
Ψ1XΨ2XΨ3X=ZU=ZV=Z
因此可以得到
Ψ
1
X
−
U
Ψ
3
X
=
0
Ψ
2
X
−
V
Ψ
3
X
=
0
\begin{align*} \boldsymbol\Psi^{1}\mathbf{X}-U\boldsymbol\Psi^{3}\mathbf{X}&=0\\ \boldsymbol\Psi^{2}\mathbf{X}-V\boldsymbol\Psi^{3}\mathbf{X}&=0\\ \end{align*}
Ψ1X−UΨ3XΨ2X−VΨ3X=0=0
不妨令
ψ
=
[
Ψ
1
1
T
Ψ
2
2
T
Ψ
3
3
T
]
\boldsymbol\psi=\begin{bmatrix}\boldsymbol\Psi^{1}\vphantom{^{1}}^{T}\\\boldsymbol\Psi^{2}\vphantom{^{2}}^{T}\\\boldsymbol\Psi^{3}\vphantom{^{3}}^{T}\end{bmatrix}
ψ=
Ψ11TΨ22TΨ33T
,写出关于
ψ
\boldsymbol\psi
ψ的方程组,有
[
X
T
0
T
−
U
X
T
0
T
X
T
−
V
X
T
]
ψ
=
0
(29)
\begin{bmatrix} \mathbf{X}^{T}&\mathbf{0}^{T}&-U\mathbf{X}^{T}\\ \mathbf{0}^{T}&\mathbf{X}^{T}&-V\mathbf{X}^{T}\\ \end{bmatrix}\boldsymbol\psi=\mathbf{0}\tag{29}
[XT0T0TXT−UXT−VXT]ψ=0(29)
可以看到,每对3D-2D匹配的特征点能提供两个关于
ψ
\boldsymbol\psi
ψ的约束
设匹配点组成的系数矩阵为
A
∈
R
2
n
×
12
\mathbf{A}\in\mathbb{R}^{2n\times12}
A∈R2n×12,
n
n
n为匹配点对数,则增广矩阵的约束方程可写为
A
ψ
=
0
(30)
\mathbf{A}\boldsymbol\psi=\mathbf{0}\tag{30}
Aψ=0(30)
当匹配点较少,
r
a
n
k
(
A
)
<
12
\mathrm{rank}(\mathbf{A})<12
rank(A)<12时,
(
38
)
(38)
(38)为欠定问题,具有多个解;当
r
a
n
k
(
A
)
=
12
\mathrm{rank}(\mathbf{A})=12
rank(A)=12时,
(
38
)
(38)
(38)为适定问题,具有唯一解,可直接通过解线性方程组获得;当匹配点较多时,
r
a
n
k
(
A
)
>
12
\mathrm{rank}(\mathbf{A})>12
rank(A)>12时,
(
38
)
(38)
(38)变为超定问题,线性方程组无解,故可以构造如下优化问题求近似解
ψ
~
=
a
r
g
min
ψ
:
∥
ψ
∥
=
1
1
2
∥
A
ψ
∥
2
(31)
\begin{align*} \tilde{\boldsymbol\psi} &=\underset{\boldsymbol\psi:\|\boldsymbol\psi\|=1}{\mathrm{arg}\min}\,\frac{1}{2}\|\mathbf{A}\boldsymbol\psi\|^{2}\\ \end{align*}\tag{31}
ψ~=ψ:∥ψ∥=1argmin21∥Aψ∥2(31)
对
A
\mathbf{A}
A做奇异值分解
A
=
U
Σ
V
T
\mathbf{A}=\mathbf{U}\mathbf{\Sigma}\mathbf{V}^{T}
A=UΣVT
其中
V
=
[
v
1
,
⋯
,
v
12
]
\mathbf{V}=[\mathbf{v}_{1},\cdots,\mathbf{v}_{12}]
V=[v1,⋯,v12]按照特征值降序排列,容易知道
ψ
~
\tilde{\boldsymbol\psi}
ψ~可取为
ψ
~
=
±
v
12
(32)
\tilde{\boldsymbol\psi}=\pm\mathbf{v}_{12}\tag{32}
ψ~=±v12(32)
将
ψ
~
\tilde{\boldsymbol\psi}
ψ~转变
Ψ
~
\tilde{\boldsymbol\Psi}
Ψ~为再转变为
[
R
~
,
t
~
]
=
K
−
1
Ψ
~
[\tilde{\mathbf{R}},\tilde{\mathbf{t}}]=\mathbf{K}^{-1}\tilde{\boldsymbol\Psi}
[R~,t~]=K−1Ψ~即得到所求增广矩阵的初步估计,但所求得的旋转矩阵
R
~
\tilde{\mathbf{R}}
R~不一定在
S
O
(
3
)
SO(3)
SO(3)中,可以构造如下优化问题
min
−
t
r
(
R
R
~
T
)
s
u
b
j
e
c
t
t
o
R
T
R
=
I
det
(
R
)
=
1
\begin{align*} \min\,\,\,&-\mathrm{tr}\left(\mathbf{R}\tilde{\mathbf{R}}^{T}\right)\\ \mathrm{subject\,to}\,\,\,&\mathbf{R}^T\mathbf{R}=\mathbf{I}\quad\det(\mathbf{R})=1\\ \end{align*}
minsubjectto−tr(RR~T)RTR=Idet(R)=1
首先对
R
~
\tilde{\mathbf{R}}
R~进行SVD分解
R
~
=
U
~
Σ
~
V
~
T
\tilde{\mathbf{R}}=\tilde{\mathbf{U}}\tilde{\boldsymbol{\Sigma}}\tilde{\mathbf{V}}^{T}
R~=U~Σ~V~T
根据§1中KKT条件,可以证明,在任何情况下,使
(
6
)
(6)
(6)中目标函数最优的旋转矩阵
R
∗
\mathbf{R}^{\ast}
R∗总可以取为下述值
R
∗
=
U
~
[
1
1
det
(
U
~
)
det
(
V
~
)
]
V
~
T
\begin{align*} \mathbf{R}^{\ast}=\tilde{\mathbf{U}} \begin{bmatrix} 1&&\\ &1&\\ &&\det(\tilde{\mathbf{U}})\det(\tilde{\mathbf{V}}) \end{bmatrix} \tilde{\mathbf{V}}^{T} \end{align*}
R∗=U~
11det(U~)det(V~)
V~T
4.2、最小重投影误差
求解PnP问题还可以将每个三维点坐标投影到像素平面得到的坐标与对应的实际观测到的像素坐标做差得到的重投影误差,再通过优化重投影误差得到最优的从世界坐标系到相机坐标系的位姿变换 T ∈ S E ( 3 ) \mathbf{T}\in SE(3) T∈SE(3),即
T
∗
=
arg
min
T
∑
i
=
1
n
∥
q
i
−
1
Z
i
K
(
T
X
i
)
1
:
3
∥
2
=
arg
min
T
∑
i
=
1
n
∥
e
i
(
T
)
∥
2
(33)
\begin{align*} \mathbf{T}^{\ast} &=\underset{\mathbf{T}}{\arg\min}\sum_{i=1}^{n}\left\|\mathbf{q}_{i}-\frac{1}{Z_{i}}\mathbf{K}(\mathbf{T}\mathbf{X}_{i})_{1:3}\right\|^{2}\\ &=\underset{\mathbf{T}}{\arg\min}\sum_{i=1}^{n}\left\|\mathbf{e}_{i}(\mathbf{T})\right\|^{2}\\ \end{align*} \tag{33}
T∗=Targmini=1∑n
qi−Zi1K(TXi)1:3
2=Targmini=1∑n∥ei(T)∥2(33)
下面暂时省略下标
i
i
i,世界坐标系下的三维点在相机坐标系下的表示为
p
=
(
T
X
)
1
:
3
=
[
X
,
Y
,
Z
]
T
(34)
\mathbf{p}=(\mathbf{T}\mathbf{X})_{1:3}=[X,Y,Z]^{T}\tag{34}
p=(TX)1:3=[X,Y,Z]T(34)
误差取两维
e
=
(
q
−
1
Z
K
p
)
1
:
2
=
[
U
V
]
−
1
Z
[
f
x
0
c
x
0
f
y
c
y
]
[
X
Y
Z
]
=
[
U
−
f
x
X
Z
+
c
y
V
−
f
y
Y
Z
+
c
y
]
(35)
\begin{align*} \mathbf{e}&= \left(\mathbf{q}-\frac{1}{Z}\mathbf{K}\mathbf{p}\right)_{1:2} =\begin{bmatrix} U\\ V\\ \end{bmatrix}-\frac{1}{Z}\begin{bmatrix} f_{x}&0&c_{x}\\ 0&f_{y}&c_{y}\\ \end{bmatrix}\begin{bmatrix} X\\ Y\\ Z \end{bmatrix} =\begin{bmatrix}U-f_{x}\frac{X}{Z}+c_{y}\\ V-f_{y}\frac{Y}{Z}+c_{y}\end{bmatrix} \end{align*}\tag{35}
e=(q−Z1Kp)1:2=[UV]−Z1[fx00fycxcy]
XYZ
=[U−fxZX+cyV−fyZY+cy](35)
根据链式法则得到
∂
e
∂
T
=
−
∂
q
′
∂
p
∂
p
∂
T
(36)
\begin{align*} \frac{\partial\mathbf{e}}{\partial\mathbf{T}}&=-\frac{\partial\mathbf{q}^{\prime}}{\partial\mathbf{p}}\frac{\partial\mathbf{p}}{\partial\mathbf{T}}\\ \end{align*}\tag{36}
∂T∂e=−∂p∂q′∂T∂p(36)
由
(
34
)
,
(
35
)
(34),(35)
(34),(35)知
∂
e
∂
p
=
[
−
f
x
Z
0
f
x
X
Z
2
0
−
f
y
Z
f
x
Y
Z
2
]
(37)
\frac{\partial\mathbf{e}}{\partial\mathbf{p}}= \begin{bmatrix} -\frac{f_{x}}{Z}&0&\frac{f_{x}X}{Z^{2}}\\ 0&-\frac{f_{y}}{Z}&\frac{f_{x}Y}{Z^{2}} \end{bmatrix}\tag{37}
∂p∂e=[−Zfx00−ZfyZ2fxXZ2fxY](37)
设位姿更新方式为
T
←
E
x
p
(
Δ
T
)
T
,
Δ
T
∈
R
6
\mathbf{T}\leftarrow\mathrm{Exp}(\Delta\mathbf{T})\mathbf{T},\Delta\mathbf{T}\in\mathbb{R}^{6}
T←Exp(ΔT)T,ΔT∈R6,则可以通过左乘扰动求导方法计算
∂
p
∂
T
=
(
∂
T
X
∂
T
)
1
:
3
=
[
I
,
−
p
∧
]
(38)
\frac{\partial\mathbf{p}}{\partial\mathbf{T}}=\left(\frac{\partial\mathbf{T}\mathbf{X}}{\partial\mathbf{T}}\right)_{1:3}=[\mathbf{I},-\mathbf{p}^{\wedge}]\tag{38}
∂T∂p=(∂T∂TX)1:3=[I,−p∧](38)
由
(
36
)
,
(
37
)
,
(
38
)
(36),(37),(38)
(36),(37),(38)可计算
∂
e
∂
T
=
[
−
f
x
Z
0
f
x
X
Z
2
f
x
X
Y
Z
2
−
f
x
−
f
x
X
2
Z
2
f
x
Y
Z
0
−
f
y
Z
f
x
Y
Z
2
f
y
+
f
y
Y
2
Z
2
−
f
x
X
Y
Z
2
−
f
x
X
Z
]
(39)
\frac{\partial\mathbf{e}}{\partial\mathbf{T}}=\begin{bmatrix} -\frac{f_{x}}{Z}&0&\frac{f_{x}X}{Z^{2}}&\frac{f_{x}XY}{Z^{2}}&-f_{x}-\frac{f_{x}X^{2}}{Z^{2}}&\frac{f_{x}Y}{Z}\\ 0&-\frac{f_{y}}{Z}&\frac{f_{x}Y}{Z^{2}}&f_{y}+\frac{f_{y}Y^{2}}{Z^{2}}&-\frac{f_{x}XY}{Z^{2}}&-\frac{f_{x}X}{Z} \end{bmatrix}\tag{39}
∂T∂e=[−Zfx00−ZfyZ2fxXZ2fxYZ2fxXYfy+Z2fyY2−fx−Z2fxX2−Z2fxXYZfxY−ZfxX](39)
问题
(
33
)
(33)
(33)的雅可比矩阵
J
i
=
∂
e
i
∂
T
(40)
\mathbf{J}_{i}=\frac{\partial\mathbf{e}_{i}}{\partial\mathbf{T}}\tag{40}
Ji=∂T∂ei(40)
得到
H
k
=
∑
i
=
1
n
J
i
T
J
i
b
k
=
∑
i
=
1
n
J
i
T
e
i
\begin{align*}\mathbf{H}_{k}=\sum_{i=1}^{n}\mathbf{J}_{i}^{T}\mathbf{J}_{i}\quad\quad\mathbf{b}_{k}&=\sum_{i=1}^{n}\mathbf{J}_{i}^{T}\mathbf{e}_{i}\end{align*}
Hk=i=1∑nJiTJibk=i=1∑nJiTei
则更新量可以通过下式计算
H
k
Δ
T
k
=
−
b
k
\mathbf{H}_{k}\Delta\mathbf{T}_{k}=-\mathbf{b}_{k}
HkΔTk=−bk
并通过下式更新
T
k
+
1
=
E
x
p
(
Δ
T
k
)
T
k
\mathbf{T}_{k+1}=\mathrm{Exp}(\Delta\mathbf{T}_{k})\mathbf{T}_{k}
Tk+1=Exp(ΔTk)Tk
最终得到最优的位姿变换
附录
§1、尺度意义下相等
设
x
1
,
x
2
\mathbf{x}_{1},\mathbf{x}_{2}
x1,x2为某种代数结构,若存在
s
∈
R
s\in\mathbb{R}
s∈R,使得
s
x
1
=
x
2
(A1)
s\mathbf{x}_{1}=\mathbf{x}_{2}\tag{A1}
sx1=x2(A1)
则称
x
1
\mathbf{x}_{1}
x1与
x
2
\mathbf{x}_{2}
x2在尺度意义下相等,记作
x
1
⋍
x
2
(A2)
\mathbf{x}_{1}\backsimeq\mathbf{x}_{2}\tag{A2}
x1⋍x2(A2)