Bundle Adjustment
文章目录
反对称符号的定义
两个向量的內积,內积可以描述向量间的投影关系:
a
⋅
b
=
a
T
b
=
∑
i
=
1
3
a
i
b
i
=
∣
a
∣
∣
b
∣
cos
⟨
a
,
b
⟩
a
,
b
∈
R
3
a \cdot b = a^T b=\sum^3_{i=1} a_i b_i= \left| a \right| \left| b \right| \cos \langle a, b\rangle \qquad a, b \in \mathbb{R}^3
a⋅b=aTb=i=1∑3aibi=∣a∣∣b∣cos⟨a,b⟩a,b∈R3
两个向量的外积,外积的方向垂直于这两个向量,大小为
∣
a
∣
∣
b
∣
sin
⟨
a
,
b
⟩
\left| a \right| \left| b \right| \sin \langle a, b \rangle
∣a∣∣b∣sin⟨a,b⟩,是两个向量张成的四边形的有向面积。外积只对三维向量存在定义,还能用外积表示向量的旋转。
a
×
b
=
[
i
j
k
a
1
a
2
a
3
b
1
b
2
b
3
]
=
[
a
2
b
3
−
a
3
b
2
a
3
b
1
−
a
1
b
3
a
1
b
2
−
a
2
b
1
]
=
[
0
−
a
3
a
2
a
3
0
−
a
1
−
a
2
a
1
0
]
b
≜
a
∧
b
a \times b = \begin{bmatrix} i & j & k \\ a_1 & a_2 & a_3 \\ b_1 & b_2 & b_3 \end{bmatrix} = \begin{bmatrix} a_2 b_3 - a_3 b_2 \\ a_3 b_1 - a_1 b_3 \\ a_1 b_2 - a_2 b_1 \end{bmatrix} = \begin{bmatrix} 0 & -a_3 & a_2 \\ a_3 & 0 & -a_1 \\ -a_2 & a_1 & 0 \end{bmatrix} b \triangleq a ^{\wedge} b
a×b=⎣⎡ia1b1ja2b2ka3b3⎦⎤=⎣⎡a2b3−a3b2a3b1−a1b3a1b2−a2b1⎦⎤=⎣⎡0a3−a2−a30a1a2−a10⎦⎤b≜a∧b
可以将
∧
^\wedge
∧符号记成反对称符号。这样就把外积写成了矩阵与向量的乘法,把外积运算变成了线性运算。还可以用外积表示向量的旋转。同理,对于任意反对称矩阵,亦能找到一个与之对应的向量。把这个运算用符号
∨
^\vee
∨表示。
[
0
−
a
3
a
2
a
3
0
−
a
1
−
a
2
a
1
0
]
=
A
\begin{bmatrix} 0 & -a_3 & a_2 \\ a_3 & 0 & -a_1 \\ -a_2 & a_1 & 0 \end{bmatrix} = A
⎣⎡0a3−a2−a30a1a2−a10⎦⎤=A
A
∨
=
a
A^{\vee} = a
A∨=a
考虑两个不平行的向量
a
,
b
a, b
a,b,要描述从
a
a
a到
b
b
b之间是如何旋转的?可以用一个向量描述三维空间中两个向量的旋转关系。在右手法则下,右手的4个手指从
a
a
a转向
b
b
b,大拇指朝向就是旋转向量的方向,也是
a
×
b
a \times b
a×b的方向,大小则由
a
a
a和
b
b
b的夹角决定。通过这种方式,构造了从
a
a
a到
b
b
b的一个旋转向量,这个向量同样位于三维空间中,在此坐标系下可以用3个实数来描述。
李代数 s o ( 3 ) \mathfrak{so}\left(3\right) so(3)
任意旋转矩阵
R
R
R满足(旋转矩阵为正交矩阵,
R
T
=
R
−
1
R^T=R^{-1}
RT=R−1):
R
R
T
=
I
R R^T=I
RRT=I
R
R
R是某个相机的旋转,会随时间连续地变化,即为时间的函数:
R
(
t
)
R
(
t
)
T
=
I
R\left( t \right) {R\left( t \right)}^T = I
R(t)R(t)T=I
两边同时对时间求导:
R
˙
(
t
)
R
(
t
)
T
+
R
(
t
)
R
˙
(
t
)
T
=
0
\dot R \left( t \right) {R \left( t \right)}^T + R \left( t \right) {\dot R \left( t \right)}^T = 0
R˙(t)R(t)T+R(t)R˙(t)T=0
整理得:
R
˙
(
t
)
R
(
t
)
T
=
−
(
R
˙
(
t
)
R
(
t
)
T
)
T
\dot R \left( t \right) {R \left( t \right)}^T = -\left( \dot R \left( t \right) {R \left( t \right)}^T \right)^T
R˙(t)R(t)T=−(R˙(t)R(t)T)T
根据上式可以看出
R
˙
(
t
)
R
(
t
)
T
\dot R \left( t \right) {R \left( t \right)}^T
R˙(t)R(t)T是一个反对称矩阵。因此可以找到一个三维向量
ϕ
(
t
)
∈
R
3
\phi \left( t \right) \in \mathbb{R}^3
ϕ(t)∈R3与之对应。于是有:
R
˙
(
t
)
R
(
t
)
T
=
ϕ
(
t
)
∧
\dot R \left( t \right) {R \left( t \right)}^T = \phi \left( t \right)^{\wedge}
R˙(t)R(t)T=ϕ(t)∧
等式两边右乘
R
(
t
)
R\left( t \right)
R(t),由于
R
R
R为正交阵,有:
R
˙
(
t
)
=
ϕ
(
t
)
∧
R
(
t
)
=
[
0
−
ϕ
3
ϕ
2
ϕ
3
0
−
ϕ
1
−
ϕ
2
ϕ
1
0
]
R
(
t
)
\dot R \left( t \right) = \phi \left( t \right)^{\wedge} R \left( t \right)= \begin{bmatrix} 0 & -\phi_3 & \phi_2 \\ \phi_3 & 0 & -\phi_1 \\ -\phi_2 & \phi_1 & 0 \end{bmatrix} R\left( t \right)
R˙(t)=ϕ(t)∧R(t)=⎣⎡0ϕ3−ϕ2−ϕ30ϕ1ϕ2−ϕ10⎦⎤R(t)
根据上式可以看出,每对旋转矩阵求一次导数,只需要左乘一个
ϕ
∧
(
t
)
\phi^{\wedge}\left( t \right)
ϕ∧(t)矩阵即可。设
t
0
=
0
t_0 = 0
t0=0,同时设此时的旋转矩阵为
R
(
0
)
=
I
R\left( 0 \right) = I
R(0)=I,按照导数的定义,可以把
R
(
t
)
R\left( t \right)
R(t)在
0
0
0附近进行一阶泰勒展开:
R
(
t
)
≈
R
(
t
0
)
+
R
˙
(
t
0
)
(
t
−
t
0
)
=
I
+
ϕ
(
t
0
)
∧
(
t
)
R\left( t \right) \approx R\left( t_0 \right) + \dot R \left( t_0 \right)\left( t - t_0 \right) = I + \phi \left(t_0 \right)^{\wedge} \left( t \right)
R(t)≈R(t0)+R˙(t0)(t−t0)=I+ϕ(t0)∧(t)
根据上式可以看到
ϕ
\phi
ϕ反映了
R
R
R的导数性质,同时在
t
0
t_0
t0附近,设
ϕ
\phi
ϕ保持为常数
ϕ
(
t
0
)
=
ϕ
0
\phi \left( t_0 \right) = \phi_0
ϕ(t0)=ϕ0有:
R
˙
(
t
)
=
ϕ
(
t
0
)
∧
R
(
t
)
=
ϕ
0
∧
R
(
t
)
\dot R \left( t \right) = \phi \left( t_0 \right)^{\wedge} R \left( t \right)=\phi_0^{\wedge}R\left( t \right)
R˙(t)=ϕ(t0)∧R(t)=ϕ0∧R(t)
上式是一个关于
R
R
R的微分方程,而且知道初始值
R
(
t
0
)
=
I
R\left( t_0 \right) = I
R(t0)=I,解之得:
d
R
(
t
)
d
t
=
ϕ
0
∧
R
(
t
)
\frac{d R\left( t \right)}{d t}=\phi_0^{\wedge} R \left( t \right)
dtdR(t)=ϕ0∧R(t)
d
R
(
t
)
R
(
t
)
=
ϕ
0
∧
d
t
\frac{d R\left( t \right)}{R\left( t \right)} = \phi_0^{\wedge} dt
R(t)dR(t)=ϕ0∧dt
两边积分:
l
n
(
R
(
t
)
)
=
ϕ
0
∧
t
ln\left(R \left( t \right) \right) = \phi_0^{\wedge} t
ln(R(t))=ϕ0∧t
R
(
t
)
=
e
x
p
(
ϕ
0
∧
t
)
R\left( t \right) = exp\left( \phi_0^{\wedge}t \right)
R(t)=exp(ϕ0∧t)
之前提到的
ϕ
\phi
ϕ,是
S
O
(
3
)
SO\left( 3 \right)
SO(3)对应的李代数
s
o
(
3
)
\mathfrak{so} \left( 3 \right)
so(3),
s
o
(
3
)
\mathfrak{so} \left( 3 \right)
so(3)定义在
R
3
\mathbb{R}^3
R3上的向量,记作
ϕ
\phi
ϕ,每一个
ϕ
\phi
ϕ都可以生成一个反对称矩阵:
Φ
=
ϕ
∧
=
[
0
−
ϕ
3
ϕ
2
ϕ
3
0
−
ϕ
1
−
ϕ
2
ϕ
1
0
]
∈
R
3
×
3
\Phi = \phi^{\wedge}= \begin{bmatrix} 0 & -\phi_3 & \phi_2 \\ \phi_3 & 0 & -\phi_1 \\ -\phi_2 & \phi_1 & 0 \end{bmatrix} \in \mathbb{R}^{3 \times 3}
Φ=ϕ∧=⎣⎡0ϕ3−ϕ2−ϕ30ϕ1ϕ2−ϕ10⎦⎤∈R3×3
由于
ϕ
\phi
ϕ与反对称矩阵关系很紧密,在不引起歧义的情况系,就说
s
o
(
3
)
\mathfrak{so}\left( 3 \right)
so(3)的元素是三维向量或者三维反对称矩阵:
s
o
(
3
)
=
{
ϕ
∈
R
3
,
Φ
=
ϕ
∧
∈
R
3
×
3
}
\mathfrak{so}\left( 3 \right) = \left \{ \phi \in \mathbb{R}^3, \Phi = \phi^{\wedge} \in \mathbb{R}^{3 \times 3}\right\}
so(3)={ϕ∈R3,Φ=ϕ∧∈R3×3}
S O ( 3 ) SO\left( 3 \right) SO(3)上的指数映射
由于
ϕ
\phi
ϕ是三维向量,可以定义它的模长和它的方向,分别记作
θ
\theta
θ和
a
a
a,于是有
ϕ
=
θ
a
\phi=\theta a
ϕ=θa,这里的
a
a
a是一个长度为
1
1
1的向量,首先对于
a
∧
a^{\wedge}
a∧,有以下两条性质:
a
∧
a
∧
=
a
a
T
−
I
a^{\wedge}a^{\wedge}=aa^T - I
a∧a∧=aaT−I
a
∧
a
∧
a
∧
=
−
a
∧
a^{\wedge}a^{\wedge}a^{\wedge} = -a^{\wedge}
a∧a∧a∧=−a∧
任意矩阵的指数映射可以写成一个泰勒展开,只有在收敛的情况下才会有结果,其结果仍是一个矩阵。
e
x
p
(
A
)
=
∑
n
=
0
∞
1
n
!
A
n
exp\left( A \right) = \sum_{n=0}^{\infty}\frac{1}{n!}A^n
exp(A)=n=0∑∞n!1An
同样的,对
s
o
(
3
)
\mathfrak{so}\left( 3 \right)
so(3)中的任意元素
ϕ
\phi
ϕ,也可以用此方式定义它的指数映射:
e
x
p
(
ϕ
∧
)
=
∑
n
=
0
∞
1
n
!
(
ϕ
∧
)
n
exp\left( \phi^{\wedge} \right) = \sum_{n=0}^{\infty}\frac{1}{n!}\left(\phi^{\wedge} \right)^n
exp(ϕ∧)=n=0∑∞n!1(ϕ∧)n
可以把指数映射写成:
e
x
p
(
ϕ
∧
)
=
e
x
p
(
θ
a
∧
)
=
∑
n
=
0
∞
1
n
!
(
θ
a
∧
)
n
exp\left( \phi^{\wedge} \right)=exp\left( \theta a^{\wedge} \right)=\sum_{n=0}^{\infty}\frac{1}{n!}\left( \theta a^{\wedge} \right)^n
exp(ϕ∧)=exp(θa∧)=n=0∑∞n!1(θa∧)n
=
I
+
θ
a
∧
+
1
2
!
θ
2
a
∧
a
∧
+
1
3
!
θ
3
a
∧
a
∧
a
∧
+
1
4
!
θ
4
(
a
∧
)
4
+
⋯
=I + \theta a^{\wedge} + \frac{1}{2!} \theta^2 a^{\wedge} a^{\wedge} + \frac{1}{3!} \theta^3 a^{\wedge} a^{\wedge} a^{\wedge} + \frac{1}{4!} \theta^4 \left(a^{\wedge}\right)^4 + \cdots
=I+θa∧+2!1θ2a∧a∧+3!1θ3a∧a∧a∧+4!1θ4(a∧)4+⋯
=
a
a
T
−
a
∧
a
∧
+
θ
a
∧
+
1
2
!
θ
2
a
∧
a
∧
−
1
3
!
θ
3
a
∧
−
1
4
!
θ
4
(
a
∧
)
2
+
⋯
=aa^T - a^{\wedge} a^{\wedge} + \theta a^{\wedge} + \frac{1}{2!} \theta^2 a^{\wedge} a^{\wedge} - \frac{1}{3!} \theta^3 a^{\wedge} - \frac{1}{4!} \theta^4 \left(a^{\wedge}\right)^2 + \cdots
=aaT−a∧a∧+θa∧+2!1θ2a∧a∧−3!1θ3a∧−4!1θ4(a∧)2+⋯
=
a
a
T
+
(
θ
−
1
3
!
θ
3
+
1
5
!
θ
5
−
⋯
 
)
a
∧
−
(
1
−
1
2
!
θ
2
+
1
4
!
θ
4
−
⋯
 
)
a
∧
a
∧
=aa^T + \left( \theta - \frac{1}{3!} \theta^3 + \frac{1}{5!} \theta^5 - \cdots\right)a^{\wedge} - \left( 1 - \frac{1}{2!} \theta^2 + \frac{1}{4!} \theta^4 - \cdots\right)a^{\wedge} a^{\wedge}
=aaT+(θ−3!1θ3+5!1θ5−⋯)a∧−(1−2!1θ2+4!1θ4−⋯)a∧a∧
=
a
∧
a
∧
+
I
+
sin
θ
a
∧
−
cos
θ
a
∧
a
∧
=a^{\wedge}a^{\wedge} + I + \sin \theta a^{\wedge} - \cos \theta a^{\wedge}a^{\wedge}
=a∧a∧+I+sinθa∧−cosθa∧a∧
=
(
1
−
cos
θ
)
a
∧
a
∧
+
I
+
sin
θ
a
∧
=\left( 1 - \cos \theta \right)a^{\wedge}a^{\wedge} + I + \sin \theta a^{\wedge}
=(1−cosθ)a∧a∧+I+sinθa∧
=
cos
θ
I
+
(
1
−
cos
θ
)
a
a
T
+
sin
θ
a
∧
=\cos \theta I + \left( 1 - \cos \theta \right)aa^T + \sin \theta a^{\wedge}
=cosθI+(1−cosθ)aaT+sinθa∧
罗德里格斯公式:
R
=
cos
θ
I
+
(
1
−
cos
θ
)
n
n
T
+
sin
θ
n
∧
R=\cos \theta I + \left( 1 - \cos \theta \right)nn^T + \sin \theta n^{\wedge}
R=cosθI+(1−cosθ)nnT+sinθn∧
表明
s
o
(
3
)
\mathfrak{so}\left( 3\right)
so(3) 实际上就是由旋转向量组成的空间,指数映射即罗德里格斯公式。通过它们我们把
s
o
(
3
)
\mathfrak{so}\left(3\right)
so(3)中任意一个向量对应到一个位于
S
O
(
3
)
SO\left(3\right)
SO(3)中的旋转矩阵。反之,如果定义对数映射,也能把
S
O
(
3
)
SO\left(3\right)
SO(3)中的元素对应到
s
o
(
3
)
\mathfrak{so}\left(3\right)
so(3)中:
ϕ
=
ln
(
R
)
∨
=
(
∑
n
=
0
∞
(
−
1
)
n
n
+
1
(
R
−
I
)
n
+
1
)
∨
\phi = \ln \left( R \right)^{\vee} = \left( \sum_{n=0}^{\infty} \frac{\left( -1 \right)^n}{n+1}\left(R - I \right)^{n+1}\right)^{\vee}
ϕ=ln(R)∨=(n=0∑∞n+1(−1)n(R−I)n+1)∨
由以上可得,它与
S
O
(
3
)
SO\left(3\right)
SO(3)(特殊正交群—旋转矩阵群)的关系由指数映射给定:
R
=
e
x
p
(
ϕ
∧
)
R = exp\left( \phi^{\wedge} \right)
R=exp(ϕ∧)
李代数 s e ( 3 ) \mathfrak{se}\left( 3 \right) se(3)
与
s
o
(
3
)
\mathfrak{so}\left(3\right)
so(3)相似,
s
e
(
3
)
\mathfrak{se}\left(3\right)
se(3)位于
R
6
\mathbb{R}^6
R6空间中:
s
e
(
3
)
=
{
ξ
=
[
ρ
ϕ
]
∈
R
6
,
ρ
∈
R
3
,
ϕ
∈
s
o
(
3
)
,
ξ
∧
=
[
ϕ
∧
ρ
0
T
0
]
∈
R
4
×
4
}
\mathfrak{se}\left(3\right)=\left \{ \xi = \begin{bmatrix} \rho \\ \phi \end{bmatrix} \in \mathbb{R}^6, \rho \in \mathbb{R}^3 , \phi \in \mathfrak{so}\left(3 \right), \xi^{\wedge}= \begin{bmatrix} \phi^{\wedge} & \rho \\ 0^T & 0 \end{bmatrix} \in \mathbb{R}^{4 \times 4} \right\}
se(3)={ξ=[ρϕ]∈R6,ρ∈R3,ϕ∈so(3),ξ∧=[ϕ∧0Tρ0]∈R4×4}
在
s
e
(
3
)
\mathfrak{se}\left(3\right)
se(3)中扩展了
∧
^{\wedge}
∧符号的含义,将一个6维向量转换成四维矩阵,但这里不再表示反对称:
ξ
∧
=
[
ϕ
∧
ρ
0
T
0
]
∈
R
4
×
4
\xi^{\wedge}= \begin{bmatrix} \phi^{\wedge} & \rho \\ 0^T & 0 \end{bmatrix} \in \mathbb{R}^{4 \times 4}
ξ∧=[ϕ∧0Tρ0]∈R4×4
S E ( 3 ) SE\left( 3 \right) SE(3)上的指数映射
exp
(
ξ
∧
)
=
[
∑
n
=
0
∞
1
n
!
(
ϕ
∧
)
n
∑
n
=
0
∞
1
(
n
+
1
)
!
(
ϕ
∧
)
n
ρ
0
T
1
]
≜
[
R
J
ρ
0
T
1
]
=
T
\exp \left( \xi^{\wedge} \right) = \begin{bmatrix} \sum_{n=0}^{\infty}\frac{1}{n!}\left( \phi^{\wedge} \right)^n & \sum_{n=0}^{\infty}\frac{1}{\left( n + 1 \right)! }\left( \phi^{\wedge} \right)^n \rho \\ 0^T & 1 \end{bmatrix} \triangleq \begin{bmatrix} R & J\rho \\ 0^T & 1 \end{bmatrix} = T
exp(ξ∧)=[∑n=0∞n!1(ϕ∧)n0T∑n=0∞(n+1)!1(ϕ∧)nρ1]≜[R0TJρ1]=T
右上角的
J
J
J可以整理为(设
ϕ
=
θ
a
\phi=\theta a
ϕ=θa)
J
=
sin
θ
θ
I
+
(
1
−
sin
θ
θ
)
a
a
T
+
1
−
cos
θ
θ
a
∧
J = \frac{\sin \theta}{\theta}I + \left( 1 - \frac{\sin \theta}{\theta}\right)aa^T + \frac{1 - \cos \theta}{\theta}a^{\wedge}
J=θsinθI+(1−θsinθ)aaT+θ1−cosθa∧
S E ( 3 ) SE\left( 3 \right) SE(3)上的李代数求导
假设某空间点
p
W
p^W
pW经过一次变换
T
T
T(对应李代数为
ξ
\xi
ξ),得到
T
P
W
TP^W
TPW,现在给
T
T
T左乘一个扰动
Δ
T
=
exp
(
δ
ξ
∧
)
\Delta T = \exp \left( \delta \xi^{\wedge}\right)
ΔT=exp(δξ∧),设扰动项的李代数为
δ
ξ
=
[
δ
ρ
,
δ
ϕ
]
T
\delta \xi = \left[\delta \rho, \delta \phi \right]^T
δξ=[δρ,δϕ]T,有:
∂
(
T
P
W
)
∂
δ
ξ
=
lim
∂
ξ
→
0
exp
(
δ
ξ
∧
)
exp
(
ξ
∧
)
P
W
−
exp
(
ξ
∧
)
P
W
δ
ξ
\frac{\partial \left(T P^W\right)}{\partial \delta \xi}=\lim_{\partial \xi \rightarrow 0}\frac{\exp\left(\delta \xi^{\wedge}\right)\exp\left(\xi^{\wedge}\right)P^W - \exp\left( \xi ^ {\wedge}\right)P^W}{\delta \xi}
∂δξ∂(TPW)=∂ξ→0limδξexp(δξ∧)exp(ξ∧)PW−exp(ξ∧)PW
≈
lim
∂
ξ
→
0
(
I
+
δ
ξ
∧
)
exp
(
ξ
∧
)
P
W
−
exp
(
ξ
∧
)
P
W
δ
ξ
\approx \lim_{\partial \xi \rightarrow 0}\frac{\left(I + \delta \xi^{\wedge}\right)\exp\left(\xi^{\wedge}\right)P^W - \exp\left(\xi^{\wedge}\right)P^W}{\delta \xi}
≈∂ξ→0limδξ(I+δξ∧)exp(ξ∧)PW−exp(ξ∧)PW
=
lim
∂
ξ
→
0
δ
ξ
∧
exp
(
ξ
∧
)
P
W
δ
ξ
=\lim_{\partial \xi \rightarrow 0}\frac{\delta \xi ^{\wedge}\exp\left(\xi^{\wedge}\right)P^W}{\delta \xi}
=∂ξ→0limδξδξ∧exp(ξ∧)PW
=
lim
∂
ξ
→
0
[
δ
ϕ
∧
δ
ρ
0
T
0
]
[
R
P
W
+
t
1
]
δ
ξ
=\lim_{\partial \xi \rightarrow 0}\frac{ \begin{bmatrix} \delta \phi^{\wedge} & \delta \rho \\ 0^T & 0 \end{bmatrix} \begin{bmatrix} RP^W + t \\ 1 \end{bmatrix} }{\delta \xi}
=∂ξ→0limδξ[δϕ∧0Tδρ0][RPW+t1]
=
lim
∂
ξ
→
0
[
δ
ϕ
∧
(
R
P
W
+
t
)
+
δ
ρ
0
]
δ
ξ
=
[
I
−
(
R
P
W
+
t
)
∧
0
T
0
T
]
≜
(
T
P
W
)
=\lim_{\partial \xi \rightarrow 0}\frac{ \begin{bmatrix} \delta \phi^{\wedge}\left(RP^W + t\right) + \delta \rho \\ 0 \end{bmatrix} }{\delta \xi}= \begin{bmatrix} I & -\left(RP^W + t\right)^{\wedge} \\ 0^T & 0^T \end{bmatrix}\triangleq\left(TP^W\right)
=∂ξ→0limδξ[δϕ∧(RPW+t)+δρ0]=[I0T−(RPW+t)∧0T]≜(TPW)
观察上式其中
P
C
=
R
P
W
+
t
P^C = RP^W + t
PC=RPW+t
BA
有
n
n
n个三维空间点
P
W
P^W
PW及其投影
p
p
p(像素坐标),和对应通过匹配得到像素坐标
P
i
x
e
l
=
[
U
,
V
]
Pixel=\left[U, V\right]
Pixel=[U,V], 希望计算相机的位姿
R
,
t
R, t
R,t,它的李代数表示为
ξ
\xi
ξ。
相机内参:
K
=
[
f
x
0
c
x
0
f
y
c
y
0
0
1
]
K= \begin{bmatrix} f_x & 0 & c_x \\ 0 & f_y & c_y \\ 0 & 0 & 1 \end{bmatrix}
K=⎣⎡fx000fy0cxcy1⎦⎤
由以上信息可得,世界坐标系下三维点转到相机坐标系下
P
C
P^C
PC:
[
P
C
1
]
=
e
x
p
(
ξ
∧
)
[
P
W
1
]
\begin{bmatrix} P^C \\ 1 \end{bmatrix} = exp\left( \xi ^{\wedge} \right) \begin{bmatrix} P^W \\ 1 \end{bmatrix}
[PC1]=exp(ξ∧)[PW1]
相机坐标系
P
C
P^C
PC到相机坐标系归一化平面
P
n
o
r
m
a
l
C
P^C_{normal}
PnormalC:
P
n
o
r
m
a
l
C
=
[
P
x
C
P
z
C
P
y
C
P
z
C
1
]
P^C_{normal} = \begin{bmatrix} \frac{P^C_x}{P^C_z} \\ \frac{P^C_y}{P^C_z} \\ 1 \end{bmatrix}
PnormalC=⎣⎢⎢⎡PzCPxCPzCPyC1⎦⎥⎥⎤
相机坐标系归一化平面到图像
p
p
p
[
p
1
]
=
K
P
n
o
r
m
a
l
C
=
[
f
x
P
n
o
r
m
a
l
C
x
+
c
x
f
y
P
n
o
r
m
a
l
C
y
+
c
y
1
]
\begin{bmatrix} p \\ 1 \end{bmatrix}=KP^C_{normal}= \begin{bmatrix} f_x {P^C_{normal}}_{x} + c_x \\ f_y {P^C_{normal}}_{y} + c_y \\ 1 \end{bmatrix}
[p1]=KPnormalC=⎣⎡fxPnormalCx+cxfyPnormalCy+cy1⎦⎤
由于相机位姿未知和观测点的噪声,
P
i
x
e
l
−
p
Pixel - p
Pixel−p存在一个误差。为了使的误差最小化,我们把每个点的误差求和,构建最小二乘问题(列文伯格—马夸尔特方法),然后调整相机位姿和世界点的坐标使得误差尽量的小:
h
(
ξ
,
P
W
)
h\left( \xi, P^W\right)
h(ξ,PW)为世界点到投影点
p
p
p的过程,需要解决的问题,使得下式最小 (误差为
2
×
1
2 \times 1
2×1矩阵):
f
(
ξ
,
P
W
)
=
∑
i
=
0
m
∑
j
=
0
n
h
(
ξ
i
,
P
j
W
)
−
P
i
x
e
l
i
,
j
f\left( \xi, P^W \right) = \sum_{i=0}^m \sum_{j=0}^n h\left( \xi_i, P^W_j\right) - Pixel_{i,j}
f(ξ,PW)=i=0∑mj=0∑nh(ξi,PjW)−Pixeli,j
列文伯格—马夸尔特方法公式,令
D
=
I
D=I
D=I:
(
J
T
J
(
x
)
+
λ
D
T
D
)
Δ
x
=
−
J
(
x
)
T
f
(
x
)
\left( J^TJ\left(x\right) + \lambda D^TD\right)\Delta x = -{J\left(x\right)}^Tf\left(x\right)
(JTJ(x)+λDTD)Δx=−J(x)Tf(x)
(
J
T
J
(
x
)
+
λ
d
i
a
g
(
J
T
J
)
)
Δ
x
=
−
J
(
x
)
T
f
(
x
)
\left( J^TJ\left(x\right) + \lambda diag\left( J^TJ\right)\right)\Delta x = -{J\left(x\right)}^Tf\left(x\right)
(JTJ(x)+λdiag(JTJ))Δx=−J(x)Tf(x)
像素误差值
e
=
f
(
ξ
,
P
W
)
e=f\left( \xi, P^W \right)
e=f(ξ,PW) 对相机姿态的偏导矩阵
F
i
j
F_{ij}
Fij
∂
e
∂
δ
ξ
=
∂
e
∂
p
∂
p
∂
P
C
∂
P
C
∂
δ
ξ
\frac{\partial e}{\partial \delta \xi}=\frac{\partial e}{\partial p} \frac{\partial p}{\partial P^C}\frac{\partial P^C}{\partial \delta \xi}
∂δξ∂e=∂p∂e∂PC∂p∂δξ∂PC
=
[
f
x
0
0
f
y
]
[
1
P
z
C
0
−
P
x
C
P
z
C
2
0
1
P
z
C
−
P
y
C
P
z
C
2
]
[
1
0
0
0
P
z
C
−
P
y
C
0
1
0
−
P
z
C
0
P
x
C
0
0
1
P
y
C
−
P
x
C
0
]
= \begin{bmatrix} f_x & 0 \\ 0 & f_y \end{bmatrix} \begin{bmatrix} \frac{1}{P^C_z} & 0 & -\frac{P^C_x}{{P^C_z}^2} \\ 0 & \frac{1}{P^C_z} & -\frac{P^C_y}{{P^C_z}^2} \end{bmatrix} \begin{bmatrix} 1 & 0 & 0 & 0 & P^C_z & -P^C_y \\ 0 & 1 & 0 & -P^C_z & 0 & P^C_x \\ 0 & 0 & 1 & P^C_y & -P^C_x & 0 \end{bmatrix}
=[fx00fy]⎣⎡PzC100PzC1−PzC2PxC−PzC2PyC⎦⎤⎣⎡1000100010−PzCPyCPzC0−PxC−PyCPxC0⎦⎤
像素误差值
e
=
f
(
ξ
,
P
W
)
e=f\left( \xi, P^W \right)
e=f(ξ,PW)对世界点的偏导矩阵
E
i
j
E_{ij}
Eij
∂
e
∂
P
W
=
∂
e
∂
p
∂
p
∂
P
C
∂
P
C
∂
P
W
\frac{\partial e}{\partial P^W}=\frac{\partial e}{\partial p}\frac{\partial p}{\partial P^C}\frac{\partial P^C}{\partial P^W}
∂PW∂e=∂p∂e∂PC∂p∂PW∂PC
=
[
f
x
0
0
f
y
]
[
1
P
z
C
0
−
P
x
C
P
z
C
2
0
1
P
z
C
−
P
y
C
P
z
C
2
]
R
=\begin{bmatrix} f_x & 0 \\ 0 & f_y \end{bmatrix} \begin{bmatrix} \frac{1}{P^C_z} & 0 & -\frac{P^C_x}{{P^C_z}^2} \\ 0 & \frac{1}{P^C_z} & -\frac{P^C_y}{{P^C_z}^2} \end{bmatrix}R
=[fx00fy]⎣⎡PzC100PzC1−PzC2PxC−PzC2PyC⎦⎤R
待优化的相机位姿集合:
Ξ
=
[
ξ
1
,
ξ
2
,
ξ
3
,
⋯
 
,
ξ
m
]
\Xi=\left[\xi_1,\xi_2,\xi_3,\cdots, \xi_m\right]
Ξ=[ξ1,ξ2,ξ3,⋯,ξm]
待优化的世界点集合:
P
W
=
(
P
1
W
,
P
2
W
,
P
3
W
,
⋯
 
,
P
n
W
)
P^W = \left( P^W_1, P^W_2, P^W_3, \cdots, P^W_n\right)
PW=(P1W,P2W,P3W,⋯,PnW)
带入列文伯格—马夸尔特方法公式:
(
J
T
J
+
λ
∗
d
i
a
g
(
J
T
J
)
)
[
Δ
Ξ
Δ
P
W
]
=
−
J
T
e
\left(J^TJ + \lambda * diag\left(J^TJ\right)\right) \begin{bmatrix} \Delta \Xi \\ \Delta P^W \end{bmatrix} = -J^T e
(JTJ+λ∗diag(JTJ))[ΔΞΔPW]=−JTe
令
G
=
(
J
T
J
+
λ
∗
d
i
a
g
(
J
T
J
)
)
G=\left(J^TJ + \lambda * diag\left(J^TJ\right)\right)
G=(JTJ+λ∗diag(JTJ)),
G
G
G为:
G
=
[
F
T
F
F
T
E
E
T
F
E
T
E
]
G= \begin{bmatrix} F^TF & F^TE \\ E^TF& E^TE \end{bmatrix}
G=[FTFETFFTEETE]
−
J
T
e
=
[
−
F
T
e
−
E
T
e
]
=
[
e
c
e
p
]
-J^Te= \begin{bmatrix} -F^T e \\ -E^T e \end{bmatrix}= \begin{bmatrix} e_c \\ e_p \end{bmatrix}
−JTe=[−FTe−ETe]=[ecep]
Δ
Ξ
=
(
F
T
F
−
F
T
E
(
E
T
E
)
−
1
E
T
F
)
−
1
(
e
c
−
F
T
E
(
E
T
E
)
−
1
e
p
)
\Delta \Xi = \left(F^TF - F^TE \left(E^TE\right)^{-1}E^TF\right)^{-1}\left(e_c - F^TE\left(E^TE\right)^{-1}e_p\right)
ΔΞ=(FTF−FTE(ETE)−1ETF)−1(ec−FTE(ETE)−1ep)
Δ
P
W
=
(
E
T
E
)
−
1
(
e
p
−
E
T
F
Δ
Ξ
)
\Delta P^W = \left(E^TE\right)^{-1}\left(e_p-E^TF\Delta \Xi\right)
ΔPW=(ETE)−1(ep−ETFΔΞ)
注意:此时
Δ
Ξ
\Delta \Xi
ΔΞ为李代数形式,需要使用指数映射转换到
S
E
(
3
)
SE\left(3\right)
SE(3)