本文转载于B站UP主
摆烂世家的视频ICP算法概述及使用SVD推导(组会录像)
作者:苏浩田
(注:如有侵权,私信我下立马删咯)
1 ICP 算法
三维点云拼接技术在不同场合亦被称为重定位、配准或拼合技术,其实质是把不同的坐标系下测得的数据点云进行坐标变换,问题的关键是坐标变换参数𝑅(旋转矩阵)和𝒕(平移矢量)的求取。目前国内外的拼接技术一般分两步:粗拼接和精确拼接。
粗拼接大致将不同坐标系下点云对准到同一坐标系下,一般粗拼接很难满足精度要求,需在粗拼接的基础上使用迭代算法进行精确拼接,使点云之间的拼接误差达到最小。
目前国内外最常用的精确拼接方法为迭代最近点(Iterative Closest Point, ICP)算法,本文基于目前ICP及其改进算法的发展现状,将其分为4个主要阶段:
(1)对原始点云数据进行采样;
(2)确定初始对应点集;
(3)去除错误对应点对;
(4)坐标变换的求解。
1.1 ICP 算法的问题概述
ICP 算法对待拼接的 2 片点云, 首先根据一定的准则确立对应点集
P
=
{
p
1
,
p
2
,
.
.
.
,
p
n
}
P = \{p_1,p_2,...,p_n\}
P={p1,p2,...,pn}与
Q
=
{
q
1
,
q
2
,
.
.
.
,
q
n
}
Q = \{q_1,q_2,...,q_n\}
Q={q1,q2,...,qn},其中对应点对的个数为n。然后通过最小二乘法迭代计算最优的坐标变换, 即旋转矩阵𝑅和平移矢量𝒕,即问题可描述为
(
R
,
t
)
=
argmin
R
∈
S
O
(
d
)
,
t
∈
R
d
∑
i
=
1
n
w
i
∥
R
p
i
+
t
−
q
i
∥
2
\begin{array}{c} (R, \boldsymbol{t})=\underset{R \in S O(d), \boldsymbol{t} \in \mathbb{R}^{d}}{\operatorname{argmin}} \sum\limits_{i=1}^{n} w_{i}\left\|R \boldsymbol{p}_{i}+\boldsymbol{t}-\boldsymbol{q}_{i}\right\|^{2} \end{array}
(R,t)=R∈SO(d),t∈Rdargmini=1∑nwi∥Rpi+t−qi∥2
ICP 算法计算简便直观且可使拼接具有较好的精度, 但是算法的运行速度以及向全局最优的收敛性却在很大程度上依赖于给定的初始变换估计以及在迭代过程中对应关系的确立。各种粗拼接技术可为 ICP 算法提供较好的初始位置, 所以迭代过程中确立正确对应点集以避免迭代陷入局部极值成为各种改进算法的关键, 决定了算法的收敛速度与最终的拼接精度。
1.2 ICP 算法步骤
1.2.1 对原始点云数据进行采样
目前常用的采样方法有均匀采样、随机采样和法矢采样等。其中均匀采样与随机采样简便易行, 但由于未考虑待拼接物体的形貌等因素, 采样时可能会丢失物体的关键特征, 故限制了其应用场合。法矢采样以待拼物体表面点的法矢分布为基础, 使每个法矢方向上都有差不多个数的点, 此方法可尽可能地保留点云的细微特征。
1.2.2 确定初始对应点集
根据确立对应点集的方法,可将ICP及其各种改进算法分为 3 类:点到点(point-to-point)、点到投影(point-to-projection)和点到面(point-to-surface)。
( 1 )点到点
此方法通过直接搜索一片点云中的点在另一片点云中的最近点来确定对应点集。这种以最近点为标准的方法虽然计算简便直观,但其所确立的对应点集中存在大量错误对应点对,算法迭代易陷入局部极值。
( 2 )点到投影
对于点云𝑃上一点𝑝 ,其对应点𝑞为𝑝过点云𝑄的视点方向 O Q O_Q OQ在点云𝑄上的投影。由于省去了搜索对应点的步骤,此方法可极大地缩短计算时间,但其缺点是无法达到较高的拼接精度。
( 3 )点到平面
点到面算法在三类方法中精度最高,这种方法将点点距离用点面距离代替,迭代次数少,且不易陷入局部极值。应用最为广泛的点到面算法为点到切平面算法。
1.2.3 去除错误对应点对
采用上述方法确立的对应点集中会存在错误对应点对(或称为不可靠、不兼容点对),这种情况在算法迭代初期尤为明显。严格来说,使用ICP算法所确立的对应点集中可能没有一对是真正的“正确”点对,为此,需要引入 1 种评价标准或约束以去除错误对应点对,这是许多ICP改进算法的关键,也是国内外诸多学者研究的重点。
( 1 )基于曲面几何特征的约束方法
此类方法基于的原理是:在不同视角下,被测物体同一位置的曲面几何特征应该保持不变。此类约束中常用的几何特征有曲率、法矢等。使用此类约束方法确立的对应点对一般正确率较高,故可达到较高的精度,但此类方法要求被测物体有较明显的特征,且由于存在提取曲面特征的过程,一般计算较为耗时,特别是点云点数较多时。
代表算法有:
- ICCP(Iterative Closest Compatible Point) 此算法中使用候选对应点间的曲率和法矢的夹角判断点对的兼容性。
- ICPIF (Iterative Closest Points using Invariant Features) 此算法中使用被测物体的欧氏空间不变量(曲率、矩不变量、球谐函数不变量等) 确立对应点对。
- GP-ICPR( Geometric Primitive ICP with the RANSAC) 此算法中利用曲面上 1 点的曲率变化与对应点间的法矢的夹角确立对应点对。
- ICL( Iterative Closest Line)、ICT( Iterative Closest Triangle Patch)…
( 2 )基于刚性运动一致性的约束方法
此类方法直接利用了刚性运动应保持被测物体重叠区域对应点不变的原理。此类约束常用的一致性准则有对应点间的距离、对应点对间的相邻关系等。此类方法简便易行,计算效率较高,但确立的对应点集错误率较高。
代表算法有:
-
ICRP(Iterative Closest Reciprocal Point) 对于点云𝑃上 1 点𝒑,其在𝑄上的最近点为𝒒,找到𝒒在𝑃上的最近点𝒑′,若‖𝒑−𝒑′‖>𝜀(𝜀为给定的阈值),则点对(𝒑,𝒒)被去除。
-
PICP(Picky ICP) 此算法对使用最近点对点方法找到的对应点集中的点对(𝒑,𝒒) ,若‖𝒑−𝒒‖>𝜀𝜎,则点对(𝒑,𝒒)被去除。其中𝜎为所有对应点对间距离的均值,𝜀为给定的阈值。
-
…
1.2.4 坐标变换的求解
ICP 算法对最终确立的对应点集,一般采用最小二乘法迭代求解 2 片点云间的最优坐标变换。对于旋转矩阵和平移矢量的求值,通常可采用以下 4 种方法:单位四元数法、奇异值分解法(SVD)、正交矩阵法和对偶四元数法。
1 .2.5 算法具体步骤
步骤 1. 点云预处理,即第一阶段对原始点云数据进行采样;
步骤 2. 确定初始对应点集𝑃、𝑄;
步骤 3. 去除不合理的对应点对;
步骤 4. 坐标变换的求解。即计算平移向量和旋转矩阵,获得点集𝑄计算旋转后的点集𝑄′。通过𝑃与𝑄′计算平均距离平方。以平均距离平方之差绝对值作为迭代判断数值;若该数值小于设定阈值,则算法结束。否则,返回步骤 2 。
2 使用 SVD 方法求解 ICP 问题
2.1 问题回顾
我们通过 1.2.2和 1.2.3获得了对应点集其中
P
=
{
p
1
,
p
2
,
.
.
.
,
p
n
}
P = \{p_1,p_2,...,p_n\}
P={p1,p2,...,pn}与
Q
=
{
q
1
,
q
2
,
.
.
.
,
q
n
}
Q = \{q_1,q_2,...,q_n\}
Q={q1,q2,...,qn},其中对应点对的个数为 n。然后通过最小二乘法迭代计算最优的坐标变换, 即旋转矩阵𝑅和平移矢量𝒕,即问题可描述为
(
R
,
t
)
=
argmin
R
∈
S
O
(
d
)
,
t
∈
R
d
∑
i
=
1
n
w
i
∥
R
p
i
+
t
−
q
i
∥
2
(1)
\begin{array}{c} (R, \boldsymbol{t})=\underset{R \in S O(d), \boldsymbol{t} \in \mathbb{R}^{d}}{\operatorname{argmin}} \sum\limits_{i=1}^{n} w_{i}\left\|R \boldsymbol{p}_{i}+\boldsymbol{t}-\boldsymbol{q}_{i}\right\|^{2} \end{array}\tag1
(R,t)=R∈SO(d),t∈Rdargmini=1∑nwi∥Rpi+t−qi∥2(1)
其中
w
i
w_i
wi代表每个点的权重。𝑅和𝒕是我们所要求的旋转矩阵和平移向量。
2.2 计算平移
我们分两步求解旋转和平移,首先求解𝒕。固定𝑅,我们要优化的误差函数(目标函数)如下:
F
(
t
)
=
∑
i
=
1
n
w
i
∥
(
R
p
i
+
t
)
−
q
i
∥
2
\begin{array}{c} F(t)=\sum\limits_{i=1}^{n} w_{i}\left\|\left(R \boldsymbol{p}_{i}+\boldsymbol{t}\right)-\boldsymbol{q}_{i}\right\|^{2} \end{array}
F(t)=i=1∑nwi∥(Rpi+t)−qi∥2
为求𝐹最小值我们可以对𝒕求偏导得:
∂
F
∂
t
=
∑
i
=
1
n
2
w
i
(
R
p
i
+
t
−
q
i
)
=
2
t
(
∑
i
=
1
n
w
i
)
+
2
R
(
∑
i
=
1
n
w
i
p
i
)
−
2
(
∑
i
=
1
n
w
i
q
i
)
=
0
(2)
\begin{array}{c} \frac{\partial F}{\partial \boldsymbol{t}}=\sum\limits_{i=1}^{n} 2 w_{i}\left(R \boldsymbol{p}_{i}+\boldsymbol{t}-\boldsymbol{q}_{i}\right)=2 \boldsymbol{t}\left(\sum\limits_{i=1}^{n} w_{i}\right)+2 R\left(\sum\limits_{i=1}^{n} w_{i} \boldsymbol{p}_{i}\right)-2\left(\sum\limits_{i=1}^{n} w_{i} \boldsymbol{q}_{i}\right)=0 \end{array}\tag2
∂t∂F=i=1∑n2wi(Rpi+t−qi)=2t(i=1∑nwi)+2R(i=1∑nwipi)−2(i=1∑nwiqi)=0(2)
我们记:
p
‾
=
∑
i
=
1
n
w
i
p
i
∑
i
=
1
n
w
i
,
q
‾
=
∑
i
=
1
n
w
i
q
i
∑
i
=
1
n
w
i
(3)
\begin{array}{c} \overline{\boldsymbol{p}}=\frac{\sum\limits_{i=1}^{n} w_{i} \boldsymbol{p}_{i}}{\sum\limits_{i=1}^{n} w_{i}}, \quad \overline{\boldsymbol{q}}=\frac{\sum\limits_{i=1}^{n} w_{i} \boldsymbol{q}_{i}}{\sum\limits_{i=1}^{n} w_{i}} \end{array}\tag3
p=i=1∑nwii=1∑nwipi,q=i=1∑nwii=1∑nwiqi(3)
也就是加权平均的质心,将其带回(2)式中得:
t
=
q
‾
−
R
p
‾
(4)
\begin{array}{c} \boldsymbol{t}=\overline{\boldsymbol{q}}-R \overline{\boldsymbol{p}} \end{array}\tag4
t=q−Rp(4)
这样我们可以知道,平移向量𝒕可由加权后的质心得到。我们再将𝒕带回到目标函数𝐹中得:
c
F
(
t
)
=
∑
i
=
1
n
w
i
∥
(
R
p
i
+
t
)
−
q
i
∥
2
=
∑
i
=
1
n
w
i
∥
R
p
i
+
q
‾
−
R
p
‾
−
q
i
∥
2
=
=
∑
i
=
1
n
w
i
∥
R
(
p
i
−
p
‾
)
−
(
q
i
−
q
‾
)
∥
2
(5)
\begin{align}{c} F(t) & =\sum_{i=1}^{n} w_{i}\left\|\left(R \boldsymbol{p}_{i}+\boldsymbol{t}\right)-\boldsymbol{q}_{i}\right\|^{2}=\sum_{i=1}^{n} w_{i}\left\|R \boldsymbol{p}_{i}+\overline{\boldsymbol{q}}-R \overline{\boldsymbol{p}}-\boldsymbol{q}_{i}\right\|^{2}= \\ & =\sum_{i=1}^{n} w_{i}\left\|R\left(\boldsymbol{p}_{i}-\overline{\boldsymbol{p}}\right)-\left(\boldsymbol{q}_{i}-\overline{\boldsymbol{q}}\right)\right\|^{2} \end{align}\tag5
cF(t)=i=1∑nwi∥(Rpi+t)−qi∥2=i=1∑nwi∥Rpi+q−Rp−qi∥2==i=1∑nwi∥R(pi−p)−(qi−q)∥2(5)
再记:
x
i
:
=
p
i
−
p
‾
,
y
i
:
=
q
i
−
q
‾
(6)
\begin{align} \boldsymbol{x}_{i}:= \boldsymbol{p}_{i}-\overline{\boldsymbol{p}}, \quad \boldsymbol{y}_{i}:= \boldsymbol{q}_{i}-\overline{\boldsymbol{q}} \end{align}\tag6
xi:=pi−p,yi:=qi−q(6)
我们可以直接求质心后对每个点进行归一化再求解。有了𝒕之后,我们要求解的𝑅如下:
R
=
argmin
R
∈
SO
(
d
)
∑
i
=
1
n
w
i
∥
R
x
i
−
y
i
∥
2
(7)
\begin{array}{c} R=\underset{R \in \operatorname{SO}(d)}{\operatorname{argmin}} \sum\limits_{i=1}^{n} w_{i}\left\|R \boldsymbol{x}_{i}-\boldsymbol{y}_{i}\right\|^{2} \end{array}\tag7
R=R∈SO(d)argmini=1∑nwi∥Rxi−yi∥2(7)
2.3 计算旋转
首先简化下(7)式,先看权重后面的部分,则公式推导如下:
∥
R
x
i
−
y
i
∥
2
=
(
R
x
i
−
y
i
)
T
(
R
x
i
−
y
i
)
=
(
x
i
T
R
T
−
y
i
T
)
(
R
x
i
−
y
i
)
=
=
x
i
T
R
T
R
x
i
−
y
i
T
R
x
i
−
x
i
T
R
T
y
i
+
y
i
T
y
i
=
=
x
i
T
x
i
−
y
i
T
R
x
i
−
x
i
T
R
T
y
i
+
y
i
T
y
i
(8)
\begin{aligned} \left\|R \boldsymbol{x}_{i}-\boldsymbol{y}_{i}\right\|^{2} & =\left(R \boldsymbol{x}_{i}-\boldsymbol{y}_{i}\right)^{T}\left(R \boldsymbol{x}_{i}-\boldsymbol{y}_{i}\right)=\left(\boldsymbol{x}_{i}^{T} R^{T}-\boldsymbol{y}_{i}^{T}\right)\left(R \boldsymbol{x}_{i}-\boldsymbol{y}_{i}\right)= \\ & =\boldsymbol{x}_{i}^{T} R^{T} R \boldsymbol{x}_{i}-\boldsymbol{y}_{i}^{T} R \boldsymbol{x}_{i}-\boldsymbol{x}_{i}^{T} R^{T} \boldsymbol{y}_{i}+\boldsymbol{y}_{i}^{T} \boldsymbol{y}_{i}= \\ & =\boldsymbol{x}_{i}^{T} \boldsymbol{x}_{i}-\boldsymbol{y}_{i}^{T} R \boldsymbol{x}_{i}-\boldsymbol{x}_{i}^{T} R^{T} \boldsymbol{y}_{i}+\boldsymbol{y}_{i}^{T} \boldsymbol{y}_{i} \end{aligned}\tag8
∥Rxi−yi∥2=(Rxi−yi)T(Rxi−yi)=(xiTRT−yiT)(Rxi−yi)==xiTRTRxi−yiTRxi−xiTRTyi+yiTyi==xiTxi−yiTRxi−xiTRTyi+yiTyi(8)
其次,由于
x
i
T
R
T
y
i
x_i^TR^Ty_i
xiTRTyi是一个标量,对于标量,我们有性质
a
=
a
T
a = a^T
a=aT因此有:
x
i
T
R
T
y
i
=
(
x
i
T
R
T
y
i
)
T
=
y
i
T
R
x
i
(9)
\begin{align} \boldsymbol{x}_{i}{ }^{T} R^{T} \boldsymbol{y}_{i} & = \left(\boldsymbol{x}_{i}{ }^{T} R^{T} \boldsymbol{y}_{i}\right)^{T} & = \boldsymbol{y}_{i}{ }^{T} R \boldsymbol{x}_{i} \end{align}\tag9
xiTRTyi=(xiTRTyi)T=yiTRxi(9)
因次,我们可以继续将(8)式简化:
∥
R
x
i
−
y
i
∥
2
=
x
i
T
x
i
−
2
y
i
T
R
x
i
+
y
i
T
y
i
(10)
\left\|R \boldsymbol{x}_{i}-\boldsymbol{y}_{i}\right\|^{2}=\boldsymbol{x}_{i}^{T} \boldsymbol{x}_{i}-2 \boldsymbol{y}_{i}^{T} R \boldsymbol{x}_{i}+\boldsymbol{y}_{i}^{T} \boldsymbol{y}_{i}\tag{10}
∥Rxi−yi∥2=xiTxi−2yiTRxi+yiTyi(10)
代回(7)式得:
R
=
argmin
R
∈
S
O
(
d
)
∑
i
=
1
n
w
i
∥
R
x
i
−
y
i
∥
2
=
argmin
R
∈
S
O
(
d
)
∑
i
=
1
n
w
i
(
x
i
T
x
i
−
2
y
i
T
R
x
i
+
y
i
T
y
i
)
=
=
argmin
R
∈
S
O
(
d
)
(
∑
i
=
1
n
w
i
x
i
T
x
i
−
2
∑
i
=
1
n
w
i
y
i
T
R
x
i
+
∑
i
=
1
n
w
i
y
i
T
y
i
)
=
=
argmin
R
∈
S
O
(
d
)
(
−
2
∑
i
=
1
n
w
i
y
i
T
R
x
i
)
(
11
)
=
argmax
R
∈
So
(
d
)
∑
i
=
1
n
w
i
y
i
T
R
x
i
(
12
)
\begin{array}{l} R=\underset{R \in S O(d)}{\operatorname{argmin}} \sum_{i=1}^{n} w_{i}\left\|R \boldsymbol{x}_{i}-\boldsymbol{y}_{i}\right\|^{2}=\underset{R \in S O(d)}{\operatorname{argmin}} \sum_{i=1}^{n} w_{i}\left(\boldsymbol{x}_{i}{ }^{T} \boldsymbol{x}_{i}-2 \boldsymbol{y}_{i}{ }^{T} R \boldsymbol{x}_{i}+\boldsymbol{y}_{i}{ }^{T} \boldsymbol{y}_{i}\right)= \\ =\underset{R \in S O(d)}{\operatorname{argmin}}\left(\sum_{i=1}^{n} w_{i} \boldsymbol{x}_{i}^{T} \boldsymbol{x}_{i}-2 \sum_{i=1}^{n} w_{i} \boldsymbol{y}_{i}{ }^{T} R \boldsymbol{x}_{i}+\sum_{i=1}^{n} w_{i} \boldsymbol{y}_{i}{ }^{T} \boldsymbol{y}_{i}\right)= \\ =\underset{R \in S O(d)}{\operatorname{argmin}}\left(-2 \sum_{i=1}^{n} w_{i} \boldsymbol{y}_{i}{ }^{T} R \boldsymbol{x}_{i}\right) (11)\\ =\underset{R \in \operatorname{So}(d)}{\operatorname{argmax}} \sum_{i=1}^{n} w_{i} \boldsymbol{y}_{i}^{T} R \boldsymbol{x}_{i}(12) \\ \end{array}
R=R∈SO(d)argmin∑i=1nwi∥Rxi−yi∥2=R∈SO(d)argmin∑i=1nwi(xiTxi−2yiTRxi+yiTyi)==R∈SO(d)argmin(∑i=1nwixiTxi−2∑i=1nwiyiTRxi+∑i=1nwiyiTyi)==R∈SO(d)argmin(−2∑i=1nwiyiTRxi)(11)=R∈So(d)argmax∑i=1nwiyiTRxi(12)
根据矩阵迹的性质,我们有以下结论:
∑
i
=
1
n
w
i
y
i
T
R
x
i
=
tr
(
W
Y
T
R
X
)
(13)
\sum_{i=1}^{n} w_{i} \boldsymbol{y}_{i}{ }^{T} R \boldsymbol{x}_{i}=\operatorname{tr}\left(W Y^{T} R X\right)\tag{13}
i=1∑nwiyiTRxi=tr(WYTRX)(13)
其中
W
=
(
w
1
w
2
⋱
w
n
)
,
Y
T
=
(
−
y
1
T
−
−
y
2
T
−
⋮
−
y
n
T
−
)
,
X
=
(
∣
∣
∣
x
1
x
2
⋯
x
n
∣
∣
∣
)
W=\left(\begin{array}{cccc} w_{1} & & & \\ & w_{2} & & \\ & & \ddots & \\ & & & w_{n} \end{array}\right), Y^{T}=\left(\begin{array}{c} -\boldsymbol{y}_{1}^{T}- \\ -\boldsymbol{y}_{2}^{T}- \\ \vdots \\ -\boldsymbol{y}_{n}^{T}- \end{array}\right), X=\left(\begin{array}{cccc} \mid & \mid & & \mid \\ \boldsymbol{x}_{1} & \boldsymbol{x}_{2} & \cdots & \boldsymbol{x}_{n} \\ \mid & \mid & \mid \end{array}\right)
W=
w1w2⋱wn
,YT=
−y1T−−y2T−⋮−ynT−
,X=
∣x1∣∣x2∣⋯∣∣xn
推导:
W
Y
T
R
X
=
(
w
1
w
2
⋱
w
n
)
(
−
y
1
T
−
−
y
2
T
−
⋮
−
y
n
T
−
)
(
R
)
(
∣
∣
∣
x
1
x
2
⋯
x
n
∣
∣
∣
)
=
W Y^{T} R X=\left(\begin{array}{cccc} w_{1} & & & \\ & w_{2} & & \\ & & \ddots & \\ & & & w_{n} \end{array}\right)\left(\begin{array}{c} -\boldsymbol{y}_{1}^{T}- \\ -\boldsymbol{y}_{2}^{T}- \\ \vdots \\ -\boldsymbol{y}_{n}^{T}- \end{array}\right)(R)\left(\begin{array}{cccc} \mid & \mid & & \mid \\ \boldsymbol{x}_{1} & \boldsymbol{x}_{2} & \cdots & \boldsymbol{x}_{n} \\ \mid & \mid & & \mid \end{array}\right)=
WYTRX=
w1w2⋱wn
−y1T−−y2T−⋮−ynT−
(R)
∣x1∣∣x2∣⋯∣xn∣
=
=
(
−
w
1
y
1
T
−
−
w
2
y
2
T
−
⋮
−
w
n
y
n
T
−
)
(
∣
∣
∣
R
x
1
R
x
2
⋯
R
x
n
∣
∣
∣
)
=
=
(
w
1
y
1
T
R
x
1
w
2
y
2
T
R
x
2
⋱
w
n
y
n
T
R
x
n
)
\begin{array}{l} =\left(\begin{array}{c} -w_{1} \boldsymbol{y}_{1}^{T}- \\ -w_{2} \boldsymbol{y}_{2}^{T}- \\ \vdots \\ -w_{n} \boldsymbol{y}_{n}^{T}- \end{array}\right)\left(\begin{array}{cccc} \mid & \mid & & \mid \\ R \boldsymbol{x}_{1} & R \boldsymbol{x}_{2} & \cdots & R \boldsymbol{x}_{n} \\ \mid & \mid & & \mid \end{array}\right)= \\ =\left(\begin{array}{llll} w_{1} \boldsymbol{y}_{1}{ }^{T} R \boldsymbol{x}_{1} & & \\ & w_{2} \boldsymbol{y}_{2}^{T} R \boldsymbol{x}_{2} & & \\ & & \ddots & \\ & & w_{n} \boldsymbol{y}_{n}{ }^{T} R \boldsymbol{x}_{n} \end{array}\right) \end{array}
=
−w1y1T−−w2y2T−⋮−wnynT−
∣Rx1∣∣Rx2∣⋯∣Rxn∣
==
w1y1TRx1w2y2TRx2⋱wnynTRxn
所以
tr
(
W
Y
T
R
X
)
=
∑
i
=
1
n
w
i
y
i
T
R
x
i
\operatorname{tr}\left(W Y^{T} R X\right)=\sum_{i=1}^{n} w_{i} \boldsymbol{y}_{i}^{T} R \boldsymbol{x}_{i}
tr(WYTRX)=i=1∑nwiyiTRxi
推导完毕。
这里之所以表示成迹的形式,是因为矩阵的迹有许多性质可以利用。我们利用迹的对称性,有:
tr
(
W
Y
T
R
X
)
=
tr
(
(
W
Y
T
)
(
R
X
)
)
=
tr
(
R
X
W
Y
T
)
(14)
\operatorname{tr}\left(W Y^{T} R X\right)=\operatorname{tr}\left(\left(W Y^{T}\right)(R X)\right)=\operatorname{tr}\left(R X W Y^{T}\right)\tag{14}
tr(WYTRX)=tr((WYT)(RX))=tr(RXWYT)(14)
定义协方差矩阵
𝑆
=
𝑋
𝑊
𝑌
T
𝑆=𝑋𝑊𝑌^T
S=XWYT,对𝑆进行SVD分解:
S
=
U
Σ
V
T
(15)
S = U\Sigma V^T\tag{15}
S=UΣVT(15)
将上述式子代入(14),再利用迹的对称性得:
tr
(
R
X
W
Y
T
)
=
tr
(
R
S
)
=
tr
(
R
U
Σ
V
T
)
=
tr
(
Σ
V
T
R
U
)
(16)
\operatorname{tr}\left(R X W Y^{T}\right)=\operatorname{tr}(R S)=\operatorname{tr}\left(R U \Sigma V^{T}\right)=\operatorname{tr}\left(\Sigma V^{T} R U\right)\tag{16}
tr(RXWYT)=tr(RS)=tr(RUΣVT)=tr(ΣVTRU)(16)
因为其中𝑉、𝑅和𝑈均为正交矩阵。我们令
𝑀
=
𝑉
𝑇
𝑅
𝑈
𝑀=𝑉^𝑇𝑅𝑈
M=VTRU,因此
𝑀
=
𝑉
𝑇
𝑅
𝑈
𝑀=𝑉^𝑇𝑅𝑈
M=VTRU也是正交矩阵。根据正交矩阵定义,其行、列向量均为正交的单位向量,因此对于矩阵
𝑀
𝑀
M中每个列向量
m
j
m_j
mj均有
m
j
T
m
j
=
1
m_j^T m_j = 1
mjTmj=1,由此可推出𝑀中的每一个元素的绝对值均有
∣
𝑚
𝑖
𝑗
∣
≤
1
|𝑚_{𝑖𝑗}|≤ 1
∣mij∣≤1 。推导如下
1
=
m
j
T
m
j
=
∑
i
=
1
,
j
=
1
d
m
i
j
2
⇒
m
i
j
2
≤
1
⇒
∣
m
i
j
∣
≤
1
1=\boldsymbol{m}_{j}^{T} \boldsymbol{m}_{j}=\sum_{i=1, j=1}^{d} m_{i j}^{2} \Rightarrow m_{i j}^{2} \leq 1 \Rightarrow\left|m_{i j}\right| \leq 1
1=mjTmj=i=1,j=1∑dmij2⇒mij2≤1⇒∣mij∣≤1
根据SVD分解的性质
Σ
=
(
σ
1
σ
2
⋱
σ
d
)
\Sigma=\left(\begin{array}{llll} \sigma_{1} & & & \\ & \sigma_{2} & & \\ & & \ddots & \\ & & & \sigma_{d} \end{array}\right)
Σ=
σ1σ2⋱σd
,其中对角线元素𝜎1, 𝜎2, ⋯ , 𝜎𝑑 ≥ 0 ,因此有:
tr
(
Σ
V
T
R
U
)
=
tr
(
Σ
M
)
=
tr
(
(
σ
1
σ
2
⋱
σ
d
)
(
m
11
m
12
⋯
m
1
d
m
21
m
22
⋯
m
2
d
⋮
⋮
⋱
⋮
m
d
1
m
d
2
⋯
m
d
d
)
)
=
∑
i
=
1
d
σ
i
m
i
i
≤
∑
i
=
1
d
σ
i
(17)
\begin{aligned} \operatorname{tr}\left(\Sigma V^{T} R U\right) & =\operatorname{tr}(\Sigma M)=\operatorname{tr}\left(\left(\begin{array}{cccc} \sigma_{1} & & & \\ & \sigma_{2} & & \\ & & \ddots & \\ & & \sigma_{d} \end{array}\right)\left(\begin{array}{cccc} m_{11} & m_{12} & \cdots & m_{1 d} \\ m_{21} & m_{22} & \cdots & m_{2 d} \\ \vdots & \vdots & \ddots & \vdots \\ m_{d 1} & m_{d 2} & \cdots & m_{d d} \end{array}\right)\right) \\ & =\sum_{i=1}^{d} \sigma_{i} m_{i i} \leq \sum_{i=1}^{d} \sigma_{i} \end{aligned}\tag{17}
tr(ΣVTRU)=tr(ΣM)=tr
σ1σ2⋱σd
m11m21⋮md1m12m22⋮md2⋯⋯⋱⋯m1dm2d⋮mdd
=i=1∑dσimii≤i=1∑dσi(17)
上式等号成立也就是取得最大值的唯一条件就是每一个
𝑚
𝑖
𝑖
=
1
𝑚_{𝑖𝑖} = 1
mii=1,由于
𝑀
𝑀
M为正交矩阵,其行列向量均为正交的单位向量,因次
𝑀
𝑀
M只能是单位矩阵,即
𝑀
=
𝐼
𝑀=𝐼
M=I,得:
I
=
M
=
V
T
R
U
⇒
V
=
R
U
⇒
R
=
V
U
T
(18)
I = M = V^TRU\Rightarrow V = RU\Rightarrow R = VU^T\tag{18}
I=M=VTRU⇒V=RU⇒R=VUT(18)
这就是ICP算法中求解计算
𝑅
=
𝑉
𝑈
𝑅=𝑉𝑈
R=VU的计算过程