A Method For Registration Of 3D Shapes
目录
Abstract
ICP的优势
- 总是收敛的
- 收敛速度够快
- 可以用来做点集、曲线、曲面的registration
Introduction
ICP可以解决的问题:
- 两个点集,点对的匹配关系未知,如何求解两个点集之间的刚体变换?
- free-form curve matching problem
ICP不需要计算features、曲线或曲面的导数。3D data的噪声需要滤除,但无需更复杂的预处理。
Mathematical Preliminaries
最近点
这一节主要在数学上定义了“最近点”这一概念。定义了点 p p p到以下几何实体的“最近点”:
-
点集
-
线段,线段集
-
三角面片,三角面片集
-
用显式方程表示的几何实体(e.g.:参数化的曲线、曲面)
-
用隐式方程表示的几何实体
Corresponding Point Set Registration
这一节讲解了已知匹配关系的3D点集,如何求解其刚体变换。(下文中记该方法为3D-3D 匹配求解法)。这可以被构建为一个最小二乘问题,目标函数为:
f
(
R
,
t
)
=
1
N
p
∑
i
=
1
N
p
∣
∣
x
i
−
(
R
p
i
+
t
)
∣
∣
2
f(R,t)=\frac{1}{N_p}\sum_{i=1}^{N_p}||x_i-(Rp_i+t)||^2
f(R,t)=Np1i=1∑Np∣∣xi−(Rpi+t)∣∣2
(实际上就是对应点之间的距离)。具体的数学推导可以看https://zhuanlan.zhihu.com/p/111322916
ICP算法
有了以上的准备,就可以描述ICP算法了。
定义:
-
source:点集 P P P (原文中的data shape),点的总数记为 N p N_p Np
-
target:点集 X X X(原文中的model shape), 点的总数记为 N x N_x Nx
-
closest point: 点集 Y Y Y 。 对于source中的每一个点,在target中寻找其最近点,所构成的点集。第 k k k次迭代得到的source点集 P k P_{k} Pk,可以得到其在 X X X中的最近点集 Y k Y_k Yk
ICP的步骤如下:
-
针对第 k k k次迭代得到的source点集 P k P_{k} Pk,计算得到其在 X X X中的最近点集 Y k Y_k Yk.(时间复杂度平均 O ( N p l o g N x ) O(N_plogN_x) O(NplogNx),最坏 O ( N p N x ) O(N_pN_x) O(NpNx))
-
针对点集 ( P , Y k ) (P,Y_k) (P,Yk) ,利用3D-3D 匹配求解法计算两者之间的刚体变换 T k T_k Tk. ( O ( N p ) O(N_p) O(Np))
-
使用 T k T_k Tk来更新source: P k + 1 = T k P P_{k+1}=T_kP Pk+1=TkP . ( O ( N p ) O(N_p) O(Np))
-
满足条件时终止迭代
收敛性证明
这一节证明了,当使用的目标函数为mean-square distance 时,ICP算法总是能单调收敛至局部极小值。
对于点集
(
P
k
,
Y
k
)
(P_{k},Y_{k})
(Pk,Yk),对应点间距离的均方误差:
e
k
=
1
N
p
∑
i
=
1
N
p
∣
∣
y
i
k
−
p
i
k
∣
∣
2
e_k=\frac{1}{N_p}\sum_{i=1}^{N_p}||{y_{ik}-p_{ik}}||^2
ek=Np1i=1∑Np∣∣yik−pik∣∣2
求解刚体变换,更新source得到
P
k
+
1
P_{k+1}
Pk+1
记:
d
k
=
1
N
p
∑
i
=
1
N
p
∣
∣
y
i
k
−
p
i
(
k
+
1
)
∣
∣
2
d_k=\frac{1}{N_p}\sum_{i=1}^{N_p}||{y_{ik}-p_{i(k+1)}}||^2
dk=Np1i=1∑Np∣∣yik−pi(k+1)∣∣2
那么一定有
d
k
≤
e
k
d_k\leq e_k
dk≤ek。这是由3D-3D匹配求解法保证的。接下来我们考察
e
k
+
1
e_{k+1}
ek+1:
e
k
+
1
=
1
N
p
∑
i
=
1
N
p
∣
∣
y
i
(
k
+
1
)
−
p
i
(
k
+
1
)
∣
∣
2
e_{k+1}=\frac{1}{N_p}\sum_{i=1}^{N_p}||{y_{i(k+1)}-p_{i(k+1)}}||^2
ek+1=Np1i=1∑Np∣∣yi(k+1)−pi(k+1)∣∣2
显然有
e
k
+
1
≤
d
k
e_{k+1}\leq d_k
ek+1≤dk,因为
Y
k
+
1
Y_{k+1}
Yk+1是
P
k
+
1
P_{k+1}
Pk+1在target中的最近点集。
事实上,对于每一个
k
k
k,有:
0
≤
d
k
+
1
≤
e
k
+
1
≤
d
k
≤
e
k
0\leq d_{k+1}\leq e_{k+1}\leq d_k\leq e_k
0≤dk+1≤ek+1≤dk≤ek
以上就证明了该方法是收敛的。
实验表明算法收敛快,30-50次迭代即可收敛至一个比较好的结果, d k ≈ 0.1 % ∗ ( m o d e l s i z e ) d_k\approx0.1\%*(model\ size) dk≈0.1%∗(model size)
加速策略
这里作者使用了一种用于解决多变量无约束优化问题的线搜索方法的变种来做加速。感兴趣的同学自己去看吧。顺便把ICP跟其他优化方法做了一下比较:
针对7D(rotation+translation,rotation 以四元数表示)优化问题,同其他方法相比,ICP可以迅速收敛至局部最优解。其他方法包括:
- Powell 算法,Nelder-Mead算法,模拟退火算法 。(这些方法的共同点是,不需要对目标函数进行求导,当目标函数的导数不连续的时候也能应用)。ICP每次迭代仅需计算一次最近点,而这些方法需要计算几百到上万次(?????)。
- 最速下降法,共轭梯度法(这些方法的共同点是,需要对目标函数进行求导)
初值问题
ICP可以保证收敛至局部极小值,但无法保证收敛至全局最小值,因此初值的选取至关重要。作者在这一章对该问题进行了讨论,这里不再详述,因为后来有很多做初始位姿估计的更好方法,简单的可以调用PCL中的SampleConsensusInitalAlignment以及TransformationEstimationSVD。
实验结果
- 点集
- 曲线
- 曲面
问题
1.这里是什么意思?