OpenCV 4.11.0
开源计算机视觉库
加载中…
搜索中…
未找到匹配项
基于点到平面的ICP里程计算法

本文介绍一种用于深度融合管道(例如KinectFusion)的ICP算法。

ICP的目标是配准两组点云:旧点云(三维模型中已存在的点和法向量)和新点云(新的点和法向量,我们需要将其整合到现有模型中)。ICP返回这两组点云之间的旋转和平移变换。

迭代最近点(ICP)算法最小化目标函数,该函数表示两组点云中对应点之间的点到平面距离(PPD)。

什么是ppd(p, q, n)?

具体来说,对于每对对应点PQ,它是点P到由点Q及其法向量N确定的平面的距离。如果在当前相机姿态下,两点PQ投影到同一个像素,则认为它们是对应的。

p - 新点云中的第i个点

q - 旧点云中的第i个点

n - 旧点云中点q处的法向量

因此,ppd(...)可以表示为(pq的差)与(n)的点积。

T(p)是点p的刚体变换

其中R - 旋转矩阵,t - 平移向量。

T是通过ICP搜索得到的变换,其目的是在点到平面距离方面使每个点p更接近其对应的点q

如何最小化目标函数?

我们使用高斯-牛顿法来最小化函数。

在高斯-牛顿法中,我们通过改变Rt来进行顺序迭代,方向为函数E减小的方向,即其梯度的方向。

  1. 在每一步中,我们将函数E线性近似为其当前值加上雅可比矩阵乘以delta xdelta Rdelta t向量的连接)。
  2. 我们通过求解方程E_approx(delta_x) = 0来找到delta Rdelta t
  3. 我们将delta Rdelta t应用于当前的Rt变换,并进行下一次迭代。

如何线性化E?

让我们在无穷小邻域内对其进行近似。

这是一个我们将通过改变Rt来最小化的公式。

虽然点到平面距离对Rt都是线性的,但旋转空间本身并不是线性的。你可以从R如何由其旋转角生成中看出这一点。

但是由于我们有无穷小的旋转,R可以近似为以下形式:

其中I - 单位矩阵,A - 三维特殊正交群so(3)的成员。

通过将所有sin(t)和cos(t)项逼近到其极限(t --> 0),我们得到以下表示:

R的近似值代回E表达式,我们得到:

让我们引入一个函数f,它近似变换位移:

如何最小化E_approx

E_approx的微分(即自变量增加时的导数)为零时,E_approx最小,所以让我们找到这个微分。

让我们对ppd进行微分:

对于向量x中的所有变量x_j,我们得到:

令新变量:

f(x, p)可以表示为矩阵向量乘法。为了证明这一点,我们必须记住

为了简化,引入G(p)

由于,我们得到

令一个新的值:

让我们进行替换:

通过求解这个方程,我们得到每次高斯-牛顿迭代的刚体变换位移。

我们如何应用变换位移?

我们从位移生成旋转和平移矩阵,然后将当前姿态矩阵乘以我们得到的矩阵。

虽然位移的平移部分按原样贡献于结果矩阵,但旋转部分的生成则较为复杂。旋转位移通过指数运算从so(3)转换为SO(3)。事实上,3x1的rshift向量表示旋转轴乘以旋转角度。我们使用罗德里格斯变换从该向量得到旋转矩阵。更多细节,请参见维基页面