摘要
原始的ICP point-to-plane算法出自《Object Modeling by Registration of Multiple Range Images》,该算法收敛速度要快于传统ICP point-to-point算法。不过在根据对应点对计算位姿变换矩阵时,由于point-to-plane形式的目标函数没有封闭解,因此只能采用非线性优化计算,这个优化过程通常比较慢。而本文在相对位姿变换比较小时,把非线性优化问题近似为线性最小二乘问题,可以进行高效求解。
2. point-to-plane ICP算法
已知源曲面和目标曲面,ICP每次迭代中首先计算源曲面和目标曲面之间的对应性。例如,在对于源曲面上的没一点,将会选择目标曲面上的最近点作为对应性。ICP每次迭代的结果是一个3D刚体变换矩阵,该矩阵使得变换后的源曲面和目标曲面之间的对应点在指定的误差度量意义下最小。
传统的point-to-point ICP算法采用的误差度量是对应点对之间的欧式距离。而point-to-plane采用的是源曲面点到目标曲面点处的切平面之间的距离作为误差度量。
具体来说,设
s
i
=
(
s
i
x
,
s
i
y
,
s
i
z
)
T
s_{i}=(s_{ix},s_{iy},s_{iz})^{T}
si=(six,siy,siz)T是源曲面上的一点,
d
i
=
(
d
i
x
,
d
i
y
,
d
i
z
)
T
d_{i}=(d_{ix},d_{iy},d_{iz})^{T}
di=(dix,diy,diz)T是
s
i
s_{i}
si在目标曲面上的对应点,
n
i
=
(
n
i
x
,
n
i
y
,
n
i
z
)
T
n_{i}=(n_{ix},n_{iy},n_{iz})^{T}
ni=(nix,niy,niz)T是
d
i
d_{i}
di处的法线向量,那么point-to-plane ICP算法中每次迭代过程计算对应性位姿矩阵的优化目标为:
M
o
p
t
=
m
i
n
M
∑
i
(
(
M
⋅
s
i
−
d
i
)
⋅
n
i
)
2
M_{opt}={min}_{M}\sum_{i}((M\cdot s_{i}-d_{i})\cdot n_{i})^{2}
Mopt=minMi∑((M⋅si−di)⋅ni)2
式中,
M
,
M
o
p
t
M,M_{opt}
M,Mopt是4x4的刚体变换矩阵。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PKnjMZEX-1605417765155)(resources/db688f116d5e4d6ea03bbad41ffc867e.png)]
如上图所示,point-to-plane ICP最小化的目标函数是 l 1 + l 2 + l 3 l_{1}+l_{2}+l_{3} l1+l2+l3。
3. 线性近似
刚体变换矩阵
3D刚体变换矩阵
M
M
M可以由一个旋转矩阵和一个平移矩阵组成:
M
=
T
(
t
x
,
t
y
,
t
z
)
⋅
R
(
α
,
β
,
γ
)
M=T(t_{x},t_{y},t_{z})\cdot R(\alpha,\beta,\gamma)
M=T(tx,ty,tz)⋅R(α,β,γ)
式中:
T
(
t
x
,
t
y
,
t
z
)
=
[
1
0
0
t
x
0
1
0
t
y
0
0
1
t
z
0
0
0
1
]
T(t_{x},t_{y},t_{z})=\begin{bmatrix} 1 & 0 & 0 &t_{x} \\ 0 & 1& 0& t_{y}\\ 0& 0 &1 &t_{z} \\ 0& 0& 0& 1 \end{bmatrix}
T(tx,ty,tz)=⎣⎢⎢⎡100001000010txtytz1⎦⎥⎥⎤
R ( α , β , γ ) = [ r 11 r 12 r 13 0 r 21 r 22 r 23 0 r 31 r 32 r 33 0 0 0 0 1 ] R(\alpha,\beta,\gamma)=\begin{bmatrix} r_{11} & r_{12} & r_{13} & 0 \\ r_{21} & r_{22} & r_{23}& 0\\ r_{31}& r_{32} & r_{33} & 0 \\ 0& 0& 0& 1 \end{bmatrix} R(α,β,γ)=⎣⎢⎢⎡r11r21r310r12r22r320r13r23r3300001⎦⎥⎥⎤
式中:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-z8KS9JSQ-1605417765158)(resources/9c2cfc42a77c425c9a1bed17523e603d.png)]
R x ( α ) , R y ( β ) , R z ( γ ) R_{x}(\alpha),R_{y}(\beta),R_{z}(\gamma) Rx(α),Ry(β),Rz(γ)分别绕着 x , y , z x,y,z x,y,z轴的旋转。
将上式代入point-to-plane ICP优化的目标函数中,可以得到一个关于 α , β , γ , t x , t y , t z \alpha,\beta,\gamma,t_{x},t_{y},t_{z} α,β,γ,tx,ty,tz六个参数的方程组。本质上,这是一个最小二乘问题。但是由于 α , β , γ \alpha,\beta,\gamma α,β,γ是非线性三角函数的参数,因此线性最小二乘无法对该系统进行求解。接下来将介绍如何把上面的非线性优化问题近似为线性最小二乘问题。
理论基础:
当 θ ≈ 0 \theta\approx0 θ≈0,可以使用如下近似等式:
s i n θ ≈ θ , c o s θ ≈ 1 sin\theta \approx\theta,cos\theta\approx1 sinθ≈θ,cosθ≈1
根据上面的理论基础,可以得到:
R
(
α
,
β
,
γ
)
=
[
1
α
β
−
γ
α
γ
+
β
0
γ
α
β
γ
+
1
β
γ
−
α
0
−
β
α
1
0
0
0
0
1
]
≈
[
1
−
γ
β
0
γ
1
−
α
0
−
β
α
1
0
0
0
0
1
]
=
R
^
(
α
,
β
,
γ
)
R(\alpha,\beta,\gamma)=\begin{bmatrix} 1&\alpha \beta-\gamma &\alpha\gamma+\beta &0 \\ \gamma & \alpha\beta\gamma+1 & \beta\gamma-\alpha & 0\\ -\beta&\alpha & 1 &0 \\ 0& 0& 0 & 1 \end{bmatrix}\approx \begin{bmatrix} 1 & -\gamma & \beta & 0\\ \gamma &1 &-\alpha & 0\\ -\beta &\alpha &1 &0 \\ 0 & 0 & 0 &1 \end{bmatrix}= \hat{R}(\alpha,\beta,\gamma)
R(α,β,γ)=⎣⎢⎢⎡1γ−β0αβ−γαβγ+1α0αγ+ββγ−α100001⎦⎥⎥⎤≈⎣⎢⎢⎡1γ−β0−γ1α0β−α100001⎦⎥⎥⎤=R^(α,β,γ)
因此,point-to-plane ICP的最小化目标函数中的M可以近似为:
M
^
=
T
(
t
x
,
t
y
,
t
z
)
⋅
R
^
(
α
,
β
,
γ
)
=
[
1
−
γ
β
t
x
γ
1
−
α
t
y
−
β
α
1
t
z
0
0
0
1
]
\hat{M}=T(t_{x},t_{y},t_{z}) \cdot \hat{R}(\alpha,\beta,\gamma)= \begin{bmatrix} 1 & -\gamma & \beta & t_{x} \\ \gamma & 1 & -\alpha & t_{y} \\ -\beta & \alpha &1 & t_{z} \\ 0 & 0 & 0 & 1 \end{bmatrix}
M^=T(tx,ty,tz)⋅R^(α,β,γ)=⎣⎢⎢⎡1γ−β0−γ1α0β−α10txtytz1⎦⎥⎥⎤
因此,最小化目标可以改写为:
M
^
o
p
t
=
m
i
n
M
^
∑
i
(
(
M
^
⋅
s
i
−
d
i
)
⋅
n
i
)
2
\hat{M}_{opt}=min_{\hat{M}}\sum_{i}((\hat{M} \cdot s_{i}-d_{i})\cdot n_{i})^{2}
M^opt=minM^i∑((M^⋅si−di)⋅ni)2
式中,每个
(
M
^
⋅
s
i
−
d
i
)
⋅
n
i
(\hat{M}\cdot s_{i}-d_{i})\cdot n_{i}
(M^⋅si−di)⋅ni可以重写为如下含有六个参数的线性表达式:
(
M
^
⋅
s
i
−
d
i
)
⋅
n
i
=
(
M
^
⋅
(
s
i
x
s
i
y
s
i
z
1
)
−
(
d
i
x
d
i
y
d
i
z
1
)
)
⋅
(
n
i
x
n
i
y
n
i
z
0
)
(\hat{M}\cdot s_{i}-d_{i})\cdot n_{i}= \left ( \hat{M} \cdot \begin{pmatrix} s_{ix}\\ s_{iy}\\ s_{iz}\\ 1 \end{pmatrix}-\begin{pmatrix} d_{ix}\\ d_{iy}\\ d_{iz}\\ 1 \end{pmatrix}\right ) \cdot \begin{pmatrix} n_{ix}\\ n_{iy}\\ n_{iz}\\ 0 \end{pmatrix}
(M^⋅si−di)⋅ni=⎝⎜⎜⎛M^⋅⎝⎜⎜⎛sixsiysiz1⎠⎟⎟⎞−⎝⎜⎜⎛dixdiydiz1⎠⎟⎟⎞⎠⎟⎟⎞⋅⎝⎜⎜⎛nixniyniz0⎠⎟⎟⎞
已知N对对应点,可以把上面的线性表达式写为如下矩阵形式:
A
x
=
b
Ax=b
Ax=b
式中:
[
n
1
x
d
1
x
+
n
1
y
d
1
y
+
n
1
z
d
1
z
−
n
1
x
s
1
x
−
n
1
y
s
1
y
−
n
1
z
s
1
z
n
2
x
d
2
x
+
n
2
y
d
2
y
+
n
2
z
d
2
z
−
n
2
x
s
2
x
−
n
2
y
s
2
y
−
n
2
z
s
2
z
⋮
n
N
x
d
N
x
+
n
N
y
d
N
y
+
n
N
z
d
N
z
−
n
N
x
s
N
x
−
n
N
y
s
N
y
−
n
N
z
s
N
z
]
\begin{bmatrix} n_{1x}d_{1x}+n_{1y}d_{1y}+n_{1z}d_{1z}-n_{1x}s_{1x}-n_{1y}s_{1y}-n_{1z}s_{1z} \\ n_{2x}d_{2x}+n_{2y}d_{2y}+n_{2z}d_{2z}-n_{2x}s_{2x}-n_{2y}s_{2y}-n_{2z}s_{2z} \\ \vdots \\ n_{Nx}d_{Nx}+n_{Ny}d_{Ny}+n_{Nz}d_{Nz}-n_{Nx}s_{Nx}-n_{Ny}s_{Ny}-n_{Nz}s_{Nz} \end{bmatrix}
⎣⎢⎢⎢⎡n1xd1x+n1yd1y+n1zd1z−n1xs1x−n1ys1y−n1zs1zn2xd2x+n2yd2y+n2zd2z−n2xs2x−n2ys2y−n2zs2z⋮nNxdNx+nNydNy+nNzdNz−nNxsNx−nNysNy−nNzsNz⎦⎥⎥⎥⎤
x = ( α β γ t x t y t z ) x=\begin{pmatrix} \alpha\\ \beta\\ \gamma\\ t_{x}\\ t_{y}\\ t_{z} \end{pmatrix} x=⎝⎜⎜⎜⎜⎜⎜⎛αβγtxtytz⎠⎟⎟⎟⎟⎟⎟⎞
A = ( a 11 a 12 a 13 n 1 x n 1 y n 1 z a 21 a 22 a 23 n 2 x n 2 y n 2 z ⋮ ⋮ ⋮ ⋮ ⋮ ⋮ a N 1 a N 2 a N 3 n N x n N y n N z ) A= \begin{pmatrix} a_{11} &a_{12} & a_{13} &n_{1x} & n_{1y} &n_{1z} \\ a_{21} &a_{22} &a_{23} &n_{2x} &n_{2y} &n_{2z} \\ \vdots & \vdots & \vdots & \vdots & \vdots & \vdots\\ a_{N1} & a_{N2} &a_{N3} & n_{Nx} & n_{Ny} & n_{Nz} \end{pmatrix} A=⎝⎜⎜⎜⎛a11a21⋮aN1a12a22⋮aN2a13a23⋮aN3n1xn2x⋮nNxn1yn2y⋮nNyn1zn2z⋮nNz⎠⎟⎟⎟⎞
a i 1 = n i z s i y − n i y s i z , a i z = n i x s i z − n i z s i x , a i 3 = n i y s i x − n i x s i y a_{i1}=n_{iz}s_{iy}-n_{iy}s_{iz}, a_{iz}=n_{ix}s_{iz}-n_{iz}s_{ix}, a_{i3}=n_{iy}s_{ix}-n_{ix}s_{iy} ai1=nizsiy−niysiz,aiz=nixsiz−nizsix,ai3=niysix−nixsiy
求解该线性方程组即可计算处位姿矩阵M。