2020-11-15

本文介绍了point-to-plane ICP算法,它通过源曲面上的点到目标曲面法线的距离作为误差度量,以提高配准速度。在位姿变换较小的情况下,通过线性近似将非线性优化问题转换为线性最小二乘问题,从而实现高效求解。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

摘要

原始的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((Msidi)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αγ+ββγα1000011γβ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^sidi)ni)2
式中,每个 ( M ^ ⋅ s i − d i ) ⋅ n i (\hat{M}\cdot s_{i}-d_{i})\cdot n_{i} (M^sidi)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^sidi)ni=M^sixsiysiz1dixdiydiz1nixniyniz0
已知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+n1zd1zn1xs1xn1ys1yn1zs1zn2xd2x+n2yd2y+n2zd2zn2xs2xn2ys2yn2zs2znNxdNx+nNydNy+nNzdNznNxsNxnNysNynNzsNz

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=a11a21aN1a12a22aN2a13a23aN3n1xn2xnNxn1yn2ynNyn1zn2znNz

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=nizsiyniysiz,aiz=nixsiznizsix,ai3=niysixnixsiy

求解该线性方程组即可计算处位姿矩阵M。

这是一个 SQL 语句,用于向借阅表中插入数据。该表包含以下字段:借阅编号、读者编号、书籍编号、借阅日期、归还日期、借阅状态。每条数据表示一次借阅记录。其中借阅编号、读者编号、书籍编号、借阅日期和借阅状态是必填项,归还日期为可选项,如果借阅状态为“已还”则必须填写归还日期。 具体插入的数据如下: - 借阅编号:100001,读者编号:123413,书籍编号:0001,借阅日期:2020-11-05,归还日期:NULL,借阅状态:借阅 - 借阅编号:100002,读者编号:223411,书籍编号:0002,借阅日期:2020-9-28,归还日期:2020-10-13,借阅状态:已还 - 借阅编号:100003,读者编号:321123,书籍编号:1001,借阅日期:2020-7-01,归还日期:NULL,借阅状态:过期 - 借阅编号:100004,读者编号:321124,书籍编号:2001,借阅日期:2020-10-09,归还日期:2020-10-14,借阅状态:已还 - 借阅编号:100005,读者编号:321124,书籍编号:0001,借阅日期:2020-10-15,归还日期:NULL,借阅状态:借阅 - 借阅编号:100006,读者编号:223411,书籍编号:2001,借阅日期:2020-10-16,归还日期:NULL,借阅状态:借阅 - 借阅编号:100007,读者编号:411111,书籍编号:1002,借阅日期:2020-9-01,归还日期:2020-9-24,借阅状态:已还 - 借阅编号:100008,读者编号:411111,书籍编号:0001,借阅日期:2020-9-25,归还日期:NULL,借阅状态:借阅 - 借阅编号:100009,读者编号:411111,书籍编号:1001,借阅日期:2020-10-08,归还日期:NULL,借阅状态:借阅
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值