赞
踩
Iterative Closest Points迭代最近点算法,是1992年,Paul J.Besl 等人首次提出了 ICP 算法(Method for registration of 3-D shapes),以点集对点集(PSTPS)配准方法为基础,阐述了一种曲面拟合算法,用于解决基于自由形态曲面的配准问题。其基本迭代流程分为如下四个过程:
1)搜索点云与目标点云的最近点对;
2)通过最近点计算误差函数,进行 SVD(Singular Value Decomposition)分解来计算旋转矩阵R和平移矩阵t;
3)将得到的旋转矩阵R和平移矩阵t应用在点云上
4)求解应用后的点云与目标点云误差,通过阈值判断是否继续迭代。
注意:本文对原文的超链接均为Google Scholar的搜索结果,具体原文PDF请自行善用搜索工具获取(部分原文可直接通过Google Scholar获取)
首先有两个点,其欧氏距离为:
d
(
r
⃗
1
,
r
⃗
2
)
=
∥
r
⃗
1
−
r
⃗
2
∥
=
(
x
2
−
x
1
)
2
+
(
y
2
−
y
1
)
2
+
(
z
2
−
z
1
)
2
d\left( {{{\vec{r}}}_{1}},{{{\vec{r}}}_{2}} \right)=\left\| {{{\vec{r}}}_{1}}-{{{\vec{r}}}_{2}} \right\|=\sqrt{{{\left( {{x}_{2}}-{{x}_{1}} \right)}^{2}}+{{\left( {{y}_{2}}-{{y}_{1}} \right)}^{2}}+{{\left( {{z}_{2}}-{{z}_{1}} \right)}^{2}}}
d(r
1,r
2)=∥r
1−r
2∥=(x2−x1)2+(y2−y1)2+(z2−z1)2
其中
r
⃗
1
=
(
x
1
,
y
1
,
z
1
)
{{\vec{r}}_{1}}=\left( {{x}_{1}},{{y}_{1}},{{z}_{1}} \right)
r
1=(x1,y1,z1),
r
⃗
2
=
(
x
2
,
y
2
,
z
2
)
{{\vec{r}}_{2}}=\left( {{x}_{2}},{{y}_{2}},{{z}_{2}} \right)
r
2=(x2,y2,z2)
那么对于一个点与一个点集的欧氏距离为:
d
(
p
⃗
,
A
)
=
min
i
∈
{
1
,
…
,
N
a
}
d
(
p
⃗
,
a
⃗
i
)
d\left( \vec{p},A \right)=\underset{i\in \left\{ 1,\ldots ,{{N}_{a}} \right\}}{\mathop{\min }}\,d\left( \vec{p},{{{\vec{a}}}_{i}} \right)
d(p
,A)=i∈{1,…,Na}mind(p
,a
i)
此时有一个点
a
⃗
j
{{\vec{a}}}_{j}
a
j满足
d
(
p
⃗
,
a
⃗
j
)
=
d
(
p
⃗
,
A
)
d\left( \vec{p},{{{\vec{a}}}_{j}} \right)=d\left( \vec{p},A \right)
d(p
,a
j)=d(p
,A)
那么此时
p
⃗
\vec{p}
p
和
a
⃗
j
{{\vec{a}}}_{j}
a
j为一对最近点。由此可见进行粗匹配对最近点的迭代效率至关重要。
注意:Mathtype中转换成LaTeX格式时,两侧默认为[和],这是Display Style,要改成Inline Style,即将[和]都改成$。
注意:文章中不仅讨论点与点之间的距离,也讨论了点与线,点与三角形之间的距离,以及点到参数实体距离和点到隐式实体距离
SVD:singular value decomposition奇异值分解,可以参考https://zhuanlan.zhihu.com/p/29846048。
简而言之,协方差计算需要通过特征分解求特征向量,而对一个矩阵进行特征分解,需要这个矩阵是正定的,如果不是正定的任意矩阵就需要SVD。
对于一个绕任意轴
n
⃗
\vec{n}
n
旋转
θ
\theta
θ四元数:
q
⃗
R
=
[
q
0
,
q
1
,
q
2
,
q
3
]
T
=
[
cos
(
θ
2
)
,
sin
(
θ
2
)
n
⃗
x
,
sin
(
θ
2
)
n
⃗
y
,
sin
(
θ
2
)
n
⃗
z
]
T
{{\vec{q}}_{R}}={{\left[ {{q}_{0}},{{q}_{1}},{{q}_{2}},{{q}_{3}} \right]}^{T}}={{\left[ \cos \left( \frac{\theta }{2} \right),\sin \left( \frac{\theta }{2} \right){{{\vec{n}}}_{x}},\sin \left( \frac{\theta }{2} \right){{{\vec{n}}}_{y}},\sin \left( \frac{\theta }{2} \right){{{\vec{n}}}_{z}} \right]}^{T}}
q
R=[q0,q1,q2,q3]T=[cos(2θ),sin(2θ)n
x,sin(2θ)n
y,sin(2θ)n
z]T
那么有旋转矩阵R:
R
=
[
q
0
2
+
q
1
2
−
q
2
2
−
q
3
2
2
(
q
1
q
2
−
q
0
q
3
)
2
(
q
1
q
3
+
q
0
q
2
)
2
(
q
1
q
2
+
q
0
q
3
)
q
0
2
+
q
2
2
−
q
1
2
−
q
3
2
2
(
q
2
q
3
−
q
0
q
1
)
2
(
q
1
q
3
−
q
0
q
2
)
2
(
q
2
q
3
+
q
0
q
1
)
q
0
2
+
q
3
2
−
q
1
2
−
q
2
2
]
R=\left[
设平移向量
q
⃗
T
=
[
q
4
,
q
5
,
q
6
]
T
{{\vec{q}}_{T}}={{\left[ {{q}_{4}},{{q}_{5}},{{q}_{6}} \right]}^{T}}
q
T=[q4,q5,q6]T
那么有完全配准状态向量
q
⃗
=
[
q
⃗
R
∣
q
⃗
T
]
T
\vec{q}={{\left[ {{{\vec{q}}}_{R}}|{{{\vec{q}}}_{T}} \right]}^{T}}
q
=[q
R∣q
T]T
现在让点集P与点集X配准(两点集数量相等均为N,且相同编号的点为对应的最近点),即需要最小化均方误差函数(mean square objective fuction):
f
(
q
⃗
)
=
1
N
∑
i
=
1
N
∥
x
⃗
i
−
R
(
q
⃗
R
)
p
⃗
i
−
q
⃗
T
∥
2
f\left( {\vec{q}} \right)=\frac{1}{N}\sum\limits_{i=1}^{N}{{{\left\| {{{\vec{x}}}_{i}}-R\left( {{{\vec{q}}}_{R}} \right){{{\vec{p}}}_{i}}-{{{\vec{q}}}_{T}} \right\|}^{2}}}
f(q
)=N1i=1∑N∥x
i−R(q
R)p
i−q
T∥2
考虑到两个点云的质心
μ
⃗
p
=
1
N
∑
i
=
1
N
p
⃗
i
{{\vec{\mu }}_{p}}=\frac{1}{N}\sum\limits_{i=1}^{N}{{{{\vec{p}}}_{i}}}
μ
p=N1i=1∑Np
i和
μ
⃗
x
=
1
N
∑
i
=
1
N
x
⃗
i
{{\vec{\mu }}_{x}}=\frac{1}{N}\sum\limits_{i=1}^{N}{{{{\vec{x}}}_{i}}}
μ
x=N1i=1∑Nx
i
那么有两点云的协方差矩阵
Σ
p
x
{{\Sigma }_{px}}
Σpx ,通过一系列的推导(详见原文)可以得到对应
q
⃗
R
{{\vec{q}}_{R}}
q
R的矩阵
Q
(
Σ
p
x
)
Q\left( {{\Sigma }_{px}} \right)
Q(Σpx)的最大特征值就是最优旋转。同时可以求出平移向量
q
⃗
T
{{\vec{q}}_{T}}
q
T
四元数与旋转矩阵之间的关系和推导可以见https://blog.csdn.net/loongkingwhat/article/details/88427828。
P k + 1 = q ⃗ k ( P 0 ) {{P}_{k+1}}={{\vec{q}}_{k}}\left( {{P}_{0}} \right) Pk+1=q k(P0)
略
1992年,Chen等人在Object Modeling by Registration of Multiple Range Images中提出了平面(3D range image)的配准方式,把最近点对的直线距离改成最近点到对应点切平面的距离,推导可以参考https://blog.csdn.net/qq_45369294/article/details/121150122,算法实现可以参考https://blog.csdn.net/qq_36686437/article/details/109998696
2004年,Low等人在Linear least-squares optimization for point-to-plane icp surface registration中运用线性最小二乘优化,此时的最小化均方差函数变成:
M
o
p
t
=
arg
min
M
∑
i
(
(
M
⋅
s
i
−
d
i
)
⋅
n
i
)
2
{{M}_{opt}}=\arg {{\min }_{M}}\sum\limits_{i}{{{\left( \left( M\cdot {{s}_{i}}-{{d}_{i}} \right)\cdot {{n}_{i}} \right)}^{2}}}
Mopt=argminMi∑((M⋅si−di)⋅ni)2
与前文公式的格式进行匹配后为:
2001年,Szymon Rusinkiewicz等人对ICP进行了总结对比并提出了一定的改进Efficient Variants of the ICP Algorithm
作为对比的基准主要包括一下六个特性:
1.在两个网格上做随机抽样点
2.将每个选定的点与另一个网格中法线与源法线45度以内的最接近的样本进行匹配。
3.点对的均匀(常数)加权
4.拒绝包含边缘顶点的对,以及一部分具有最大点到点距离的对
5.点到平面误差度量。
6.经典的“选择-匹配-最小化”迭代,而不是对对齐转换进行其他搜索
选择具有高强度梯度的点,在变体中使用每个样本的颜色或强度来帮助对齐(Registration of 3-D partial surface models using luminance and depth information),并且同时在两个点云中进行sampling。
在另一个网格中找到最近的点(A Method for Registration of 3-D Shapes)。这种计算可以使用k-d树和/或近点缓存加速(Fast and Accurate Shape-Based Registration)。
对于权重的选取受点云数据本身的特性影响较大,而且对于普通的点云,权重带来的收敛性能影响很小,因此可以不考虑权重。
拒绝在边界处的点对非常的有效(Zippered polygon meshes from range images),但是按照比例去拒绝点对的话,可能会影响确定正确对齐的准确性和稳定性,并且通常不会提高收敛速度。
Point to Plane明显要比Point to Point的收敛速度要快Linear least-squares optimization for point-to-plane icp surface registration
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。