假设有一组配对好的3D点(例如对两幅RGB-D图像进行了匹配):
P
s
=
{
p
s
1
,
⋯
,
p
s
n
}
,
P
t
=
{
t
p
t
1
,
⋯
,
p
t
n
}
\boldsymbol{P}_s=\{\boldsymbol{p}_{s_1},\cdots,\boldsymbol{p}_{s_n}\},\quad \boldsymbol{P}_t=\{{}^t\boldsymbol{p}_{t_1},\cdots,\boldsymbol{p}_{t_n}\}
Ps={ps1,⋯,psn},Pt={tpt1,⋯,ptn}
现在想要找一个欧式变换
R
,
t
\boldsymbol{R},\boldsymbol{t}
R,t,使得
∀
i
,
p
t
i
=
R
p
s
i
+
t
\forall i,\boldsymbol{p}_{t_i}=\boldsymbol{R}\boldsymbol{p}_{s_i}+\boldsymbol{t}
∀i,pti=Rpsi+t
由于噪声等的影响,一般上式无法全部同时成立,因此转化为最小二乘优化问题求解
SVD分解求解
首先定义第
i
i
i对点的误差项:
e
i
=
p
t
i
−
(
R
p
s
i
+
t
)
\boldsymbol{e}_{i}=\boldsymbol{p}_{t_i}-\left( \boldsymbol{R} \boldsymbol{p}_{s_i}+\boldsymbol{t}\right)
ei=pti−(Rpsi+t)
然后,构建最小二乘问题,求使误差平方和达到极小的
R
,
t
\boldsymbol{R},\boldsymbol{t}
R,t:
min
R
,
t
1
2
∑
i
=
1
n
∥
p
t
i
−
(
R
p
s
i
+
t
)
∥
2
2
\min _{\boldsymbol{R},\boldsymbol{t}}\dfrac{1}{2}\sum ^{n}_{i=1}\| \boldsymbol{p} _{t_i}-\left( \boldsymbol{R} \boldsymbol{p} _{s_i}+\boldsymbol{t}\right)\| _{2}^{2}
R,tmin21i=1∑n∥pti−(Rpsi+t)∥22
定义两组点的质心:
p
s
=
1
n
∑
i
=
1
n
p
s
i
p
t
=
1
n
∑
i
=
1
n
p
t
i
\boldsymbol{p}_s=\dfrac{1}{n}\sum ^{n}_{i=1}\boldsymbol{p}_{s_i}\quad \boldsymbol{p}_t=\dfrac{1}{n}\sum ^{n}_{i=1}\boldsymbol{p}_{t_i}
ps=n1i=1∑npsipt=n1i=1∑npti
对误差函数做如下处理:
1
2
∑
i
=
1
n
∥
p
t
i
−
(
R
p
s
i
+
t
)
∥
=
1
2
∑
i
=
1
n
∥
p
t
i
−
R
p
s
i
−
t
+
(
R
p
s
−
p
t
)
−
(
R
p
s
−
p
t
)
∥
2
=
1
2
∑
i
=
1
n
∥
[
p
t
i
−
p
t
−
R
(
p
s
i
−
p
s
)
]
+
(
p
t
−
R
p
s
−
t
)
∥
2
=
1
2
∑
i
=
1
n
{
∥
p
t
i
−
p
t
−
R
(
p
s
i
−
p
s
)
∥
2
+
∥
p
t
−
R
p
s
−
t
∥
2
+
2
[
p
t
i
−
p
t
−
R
(
p
s
i
−
p
s
)
]
T
(
p
t
−
R
p
s
−
t
)
}
\begin{aligned} \dfrac{1}{2}\sum ^{n}_{i=1}\left\| \boldsymbol{p}_{t_i}-\left( \boldsymbol{R} \boldsymbol{p} _{s_i}+\boldsymbol{t}\right) \right\| &=\dfrac{1}{2}\sum ^{n}_{i=1}\left\| \boldsymbol{p} _{t_i}-\boldsymbol{R} \boldsymbol{p} _{s_i}-\boldsymbol{t}+(\boldsymbol{R}\boldsymbol{p}_s- \boldsymbol{p}_t)-(\boldsymbol{R}\boldsymbol{p}_s- \boldsymbol{p}_t)\right\| ^{2}\\ &=\dfrac{1}{2}\sum ^{n}_{i=1}\left\| \left[ \boldsymbol{p} _{t_i}-\boldsymbol{p}_t-\boldsymbol{R}\left( \boldsymbol{p} _{s_i}-\boldsymbol{p}_s\right) \right] +\left( \boldsymbol{p}_t-\boldsymbol{R} \boldsymbol{p}_s-\boldsymbol{t}\right) \right\| ^{2}\\ &=\dfrac{1}{2}\sum ^{n}_{i=1}\left\{ \left\| \boldsymbol{p} _{t_i}-\boldsymbol{p}_t-\boldsymbol{R}\left( \boldsymbol{p} _{s_i}-\boldsymbol{p}_s\right) \right\| ^{2}+\left\| \boldsymbol{p}_t-\boldsymbol{R} \boldsymbol{p}_s-\boldsymbol{t}\right\| ^{2}+ 2\left[ \boldsymbol{p} _{t_i}-\boldsymbol{p}_t-\boldsymbol{R}\left( \boldsymbol{p} _{s_i}-\boldsymbol{p}_s\right) \right] ^{T}\left( \boldsymbol{p}_t-\boldsymbol{R} \boldsymbol{p}_s-\boldsymbol{t}\right) \right\} \end{aligned}
21i=1∑n
pti−(Rpsi+t)
=21i=1∑n
pti−Rpsi−t+(Rps−pt)−(Rps−pt)
2=21i=1∑n
[pti−pt−R(psi−ps)]+(pt−Rps−t)
2=21i=1∑n{
pti−pt−R(psi−ps)
2+∥pt−Rps−t∥2+2[pti−pt−R(psi−ps)]T(pt−Rps−t)}
注意交叉项部分中
[
p
t
i
−
p
t
−
R
(
p
s
i
−
p
s
)
]
\left[ \boldsymbol{p} _{t_i}-\boldsymbol{p}_t-\boldsymbol{R}\left( \boldsymbol{p} _{s_i}-\boldsymbol{p}_s\right) \right]
[pti−pt−R(psi−ps)]在求和后为零,因此目标函数可以简化为:
min
R
,
t
J
=
1
2
∑
i
=
1
n
[
∥
p
t
i
−
p
t
−
R
(
p
s
i
−
p
s
)
∥
2
+
∥
p
t
−
R
p
s
−
t
∥
2
]
\min _{\boldsymbol{R},\boldsymbol{t}}J=\dfrac{1}{2}\sum ^{n}_{i=1}\left[ \left\| \boldsymbol{p} _{t_i}-\boldsymbol{p}_t-\boldsymbol{R}\left( \boldsymbol{p} _{s_i}-\boldsymbol{p}_s\right) \right\| ^{2}+\left\| \boldsymbol{p}_t-\boldsymbol{R} \boldsymbol{p}_s-\boldsymbol{t}\right\| ^{2}\right]
R,tminJ=21i=1∑n[
pti−pt−R(psi−ps)
2+∥pt−Rps−t∥2]
仔细观察左右两项,发现左边只与旋转矩阵
R
\boldsymbol{R}
R有关,而右边既有
R
\boldsymbol{R}
R又有
t
\boldsymbol{t}
t,但只与质心相关,只要求得最优的
R
∗
\boldsymbol{R}^{\ast}
R∗,令第二项为零就能得到
t
\boldsymbol{t}
t。
- 计算两组点的质心位置
p
s
,
p
t
\boldsymbol{p}_s,\boldsymbol{p}_t
ps,pt,然后计算每个点的去质心坐标:
q s i = p s i − p s q t i = p t i − p t \boldsymbol{q}_{s_i}=\boldsymbol{p}_{s_i}-\boldsymbol{p}_s\quad \boldsymbol{q}_{t_i}=\boldsymbol{p} _{t_i}-\boldsymbol{p}_t qsi=psi−psqti=pti−pt - 根据以下优化问题计算旋转矩阵:
R ∗ = arg min R 1 2 ∑ i = 1 n ∥ q t i − R q s i ∥ 2 \boldsymbol{R}^{\ast }=\arg \min _{\boldsymbol{R}}\dfrac{1}{2}\sum ^{n}_{i=1}\left\| \boldsymbol{q}_{t_i}-\boldsymbol{R} \boldsymbol{q}_{s_i}\right\| ^{2} R∗=argRmin21i=1∑n qti−Rqsi 2 - 令第二项为零计算出
t
\boldsymbol{t}
t:
t ∗ = p t − R p s \boldsymbol{t}^{\ast}=\boldsymbol{p}_t-\boldsymbol{R}\boldsymbol{p}_s t∗=pt−Rps
展开关于
R
\boldsymbol{R}
R的误差项,得
1
2
∑
i
=
1
n
∥
q
t
i
−
R
q
s
i
∥
2
=
1
2
∑
i
=
1
n
(
q
t
i
T
q
t
i
+
q
s
i
T
R
T
R
q
s
i
−
2
q
t
i
T
R
q
s
i
)
∑
i
=
1
n
−
q
t
i
T
R
q
s
i
=
∑
i
=
1
n
−
t
r
(
R
q
s
i
q
t
i
T
)
=
−
t
r
(
R
∑
i
=
1
n
q
s
i
q
t
i
T
)
=
−
t
r
(
R
W
T
)
\begin{aligned} \dfrac{1}{2}\sum ^{n}_{i=1}\left\| \boldsymbol{q}_{t_i}-\boldsymbol{Rq}_{s_i}\right\| ^{2}&=\dfrac{1}{2}\sum ^{n}_{i=1}\left( \boldsymbol{q}_{t_i}^{T}\boldsymbol{q}_{t_i}+\boldsymbol{q}_{s_i}^{T}\boldsymbol{R}^{T}\boldsymbol{R}\boldsymbol{q}_{s_i}-2\boldsymbol{q}_{t_i}^{T}\boldsymbol{R}\boldsymbol{q}_{s_i}\right)\\ \sum ^{n}_{i=1}-\boldsymbol{q}_{t_i}^T \boldsymbol{R} \boldsymbol{q}_{s_i}&=\sum ^{n}_{i=1}-{\rm tr}\left( \boldsymbol{Rq}_{s_i}\boldsymbol{q}_{t_i}^{T}\right) =-{\rm tr}\left( \boldsymbol{R}\sum ^{n}_{i=1}\boldsymbol{q}_{s_i}\boldsymbol{q}_{t_i}^T\right) =-{\rm tr}\left( \boldsymbol{RW}^{T}\right) \end{aligned}
21i=1∑n
qti−Rqsi
2i=1∑n−qtiTRqsi=21i=1∑n(qtiTqti+qsiTRTRqsi−2qtiTRqsi)=i=1∑n−tr(RqsiqtiT)=−tr(Ri=1∑nqsiqtiT)=−tr(RWT)
定义矩阵
W
=
∑
i
=
1
n
q
s
i
q
t
i
T
\boldsymbol{W}=\sum ^{n}_{i=1}\boldsymbol{q}_{s_i}\boldsymbol{q}_{t_i}^T
W=∑i=1nqsiqtiT,对
W
\boldsymbol{W}
W进行SVD分解,得
W
=
U
Σ
V
T
\boldsymbol{W}=\boldsymbol{U\Sigma V}^T
W=UΣVT
由最优性定理1可得:
max
R
t
r
(
R
W
T
)
=
max
R
t
r
(
R
V
Σ
U
T
)
=
max
R
t
r
[
(
R
V
U
T
)
⏟
正交矩阵
(
U
Σ
U
T
)
⏟
正半定矩阵
]
=
t
r
(
U
Σ
U
T
)
\begin{aligned} \max _{\boldsymbol{R}}{\rm tr}\left( \boldsymbol{RW}^{T}\right) &=\max _{\boldsymbol{R}}{\rm tr}\left( \boldsymbol{RV\Sigma U}^{T }\right) \\ &=\max _{\boldsymbol{R}}{\rm tr}\left[\underbrace{ \left( \boldsymbol{RVU}^{T}\right)}_{正交矩阵} \underbrace{\left( \boldsymbol{U\Sigma U}^{T}\right)}_{正半定矩阵} \right] ={\rm tr} \left( \boldsymbol{U\Sigma U}^{T}\right) \end{aligned}
Rmaxtr(RWT)=Rmaxtr(RVΣUT)=Rmaxtr
正交矩阵
(RVUT)正半定矩阵
(UΣUT)
=tr(UΣUT)
只有当
R
V
U
T
=
I
\boldsymbol{RVU}^{T}=\bf{I}
RVUT=I,即
R
=
U
V
T
\boldsymbol{R}=\boldsymbol{UV}^T
R=UVT时,括号内变为正半定矩阵,取得最大值。如果此时
R
\boldsymbol{R}
R的行列式为负,则取
−
R
-\boldsymbol{R}
−R作为最优值。
另一种更简单的证明方法:
max
R
t
r
(
R
W
T
)
=
max
R
t
r
(
R
V
Σ
U
T
)
a
s
s
u
m
e
S
=
R
V
=
max
R
t
r
(
S
Σ
U
T
)
\begin{aligned} \max _{\boldsymbol{R}}{\rm tr}\left( \boldsymbol{RW}^{T}\right) &=\max _{\boldsymbol{R}}{\rm tr}\left( \boldsymbol{RV\Sigma U}^{T }\right) \quad \rm{assume}\ \boldsymbol{S}=\boldsymbol{RV}\\ &=\max _{\boldsymbol{R}}{\rm tr}\left(\boldsymbol{S}\boldsymbol{\Sigma}\boldsymbol{U}^T\right) \end{aligned}
Rmaxtr(RWT)=Rmaxtr(RVΣUT)assume S=RV=Rmaxtr(SΣUT)
t
r
(
S
Σ
U
T
)
=
t
r
(
[
s
1
s
2
s
3
]
[
σ
1
σ
2
σ
3
]
[
u
1
T
u
2
T
u
3
T
]
)
=
t
r
(
σ
1
s
1
u
1
T
+
σ
2
s
2
u
2
T
+
σ
3
s
3
u
3
T
)
=
σ
1
u
1
T
s
1
+
σ
2
u
2
T
s
2
+
σ
3
u
3
T
s
3
\begin{aligned} {\rm tr}(\boldsymbol{S\Sigma U}^T) &={\rm tr}(\begin{bmatrix}\boldsymbol{s}_1&\boldsymbol{s}_2&\boldsymbol{s}_3\end{bmatrix}\begin{bmatrix}\sigma_1&&\\&\sigma_2&\\&&\sigma_3\end{bmatrix}\begin{bmatrix}\boldsymbol{u}_1^T\\\boldsymbol{u}_2^T\\\boldsymbol{u}_3^T\end{bmatrix}) \\ &={\rm tr}(\sigma_1\boldsymbol{s}_1\boldsymbol{u}_1^T+\sigma_2\boldsymbol{s}_2\boldsymbol{u}_2^T+\sigma_3\boldsymbol{s}_3\boldsymbol{u}_3^T) \\ &=\sigma_1\boldsymbol{u}_1^T\boldsymbol{s}_1+\sigma_2\boldsymbol{u}_2^T\boldsymbol{s}_2+\sigma_3\boldsymbol{u}_3^T\boldsymbol{s}_3 \end{aligned}
tr(SΣUT)=tr([s1s2s3]
σ1σ2σ3
u1Tu2Tu3T
)=tr(σ1s1u1T+σ2s2u2T+σ3s3u3T)=σ1u1Ts1+σ2u2Ts2+σ3u3Ts3
由于
S
\boldsymbol{S}
S和
U
\boldsymbol{U}
U 都是
3
×
3
3\times 3
3×3的正交矩阵,因此
∥
s
1
∥
=
∥
s
2
∥
=
∥
s
3
∥
=
∥
u
1
∥
=
∥
u
2
∥
=
∥
u
3
∥
=
1
\|\bm s_1\|=\|\bm s_2\|=\|\bm s_3\|=\|\bm u_1\|=\|\bm u_2\|=\|\bm u_3\|=1
∥s1∥=∥s2∥=∥s3∥=∥u1∥=∥u2∥=∥u3∥=1
进而
σ
1
u
1
T
s
1
+
σ
2
u
2
T
s
2
+
σ
3
u
3
T
s
3
⩽
σ
1
+
σ
2
+
σ
3
\sigma_1\boldsymbol{u}_1^T\boldsymbol{s}_1+\sigma_2\boldsymbol{u}_2^T\boldsymbol{s}_2+\sigma_3\boldsymbol{u}_3^T\boldsymbol{s}_3\leqslant\sigma_1+\sigma_2+\sigma_3
σ1u1Ts1+σ2u2Ts2+σ3u3Ts3⩽σ1+σ2+σ3
当且仅当
s
1
\boldsymbol{s}_1
s1与
u
1
\boldsymbol{u}_1
u1 同方向、
s
2
\boldsymbol{s}_2
s2与
u
2
\boldsymbol{u}_2
u2 同方向、
s
3
\boldsymbol{s}_3
s3与
u
3
\boldsymbol{u}_3
u3 同方向时等号成立,此时
S
=
U
\boldsymbol{S}=\boldsymbol{U}
S=U ,即
R
V
=
U
\boldsymbol{RV}=\boldsymbol{U}
RV=U ,
R
=
U
V
T
\boldsymbol{R}=\boldsymbol{UV}^T
R=UVT
非线性优化求解
min
ξ
1
2
∑
i
=
1
n
∥
(
p
t
i
−
exp
(
ξ
∧
)
p
s
i
∥
2
2
\min _{\bm \xi }\dfrac{1}{2}\sum ^{n}_{i=1}\| ( \boldsymbol{p}_{t_i}-\exp \left( \boldsymbol{\xi} ^{\wedge}\right) \boldsymbol{p}_{s_i}\| _{2}^{2}
ξmin21i=1∑n∥(pti−exp(ξ∧)psi∥22
单个误差项关于位姿的求导参考2,使用李代数扰动模型:
∂
e
∂
δ
ξ
=
−
(
exp
(
ξ
∧
)
p
s
i
)
⊙
\dfrac{\partial \boldsymbol{e}}{\partial \delta \boldsymbol{\xi} }=-\left( \exp \left( \boldsymbol{\xi} ^{\wedge}\right) \boldsymbol{p}_{s_i}\right) ^{\odot}
∂δξ∂e=−(exp(ξ∧)psi)⊙
定理:一个正交矩阵 B \boldsymbol{B} B乘以一个正半定矩阵 A A T \boldsymbol{AA}^T AAT的迹小于等于正半定矩阵 A A T \boldsymbol{AA}^T AAT的迹
t r ( A A T ) ⩾ t r ( B A A T ) ∀ B ∈ U 3 × 3 t r ( B A A T ) = t r ( A T B A ) = ∑ i a i T B a i ⩽ ∑ i ( a i T a i ) ( a i T B T B a i ) = ∑ i a i T a i = t r ( A T A ) = t r ( A A T ) {\rm tr}\left( \boldsymbol{AA}^{T}\right) \geqslant {\rm tr}\left( \boldsymbol{BAA}^{T}\right) \quad \forall \boldsymbol{B}\in \mathbb{U}^{3\times 3}\\ {\rm tr}\left( \boldsymbol{BAA}^{T}\right) = {\rm tr}\left( \boldsymbol{A}^{T}\boldsymbol{BA}\right) =\sum _{i} \boldsymbol{a}_i^{T}\boldsymbol{Ba}_{i}\leqslant \sum _{i}\sqrt{\left( \boldsymbol{a}_i^{T}\boldsymbol{a}_{i}\right) \left( \boldsymbol{a}_i^{T}\boldsymbol{B}^{T}\boldsymbol{Ba}_{i}\right) }\\ =\sum _{i} \boldsymbol{a}_i^{T}\boldsymbol{a}_{i} = {\rm tr}\left( \boldsymbol{A}^{T}\boldsymbol{A}\right) ={\rm tr}\left( \boldsymbol{AA}^{T}\right) tr(AAT)⩾tr(BAAT)∀B∈U3×3tr(BAAT)=tr(ATBA)=i∑aiTBai⩽i∑(aiTai)(aiTBTBai)=i∑aiTai=tr(ATA)=tr(AAT) ↩︎