OpenCV 4.11.0
开源计算机视觉库
|
本文介绍一种用于深度融合管道(例如KinectFusion)的ICP算法。
ICP的目标是配准两组点云:旧点云(三维模型中已存在的点和法向量)和新点云(新的点和法向量,我们需要将其整合到现有模型中)。ICP返回这两组点云之间的旋转和平移变换。
迭代最近点(ICP)算法最小化目标函数,该函数表示两组点云中对应点之间的点到平面距离(PPD)。
具体来说,对于每对对应点P和Q,它是点P到由点Q及其法向量N确定的平面的距离。如果在当前相机姿态下,两点P和Q投影到同一个像素,则认为它们是对应的。
p - 新点云中的第i个点
q - 旧点云中的第i个点
n - 旧点云中点q处的法向量
因此,ppd(...)可以表示为(p和q的差)与(n)的点积。
T(p)是点p的刚体变换
其中R - 旋转矩阵,t - 平移向量。
T是通过ICP搜索得到的变换,其目的是在点到平面距离方面使每个点p更接近其对应的点q。
我们使用高斯-牛顿法来最小化函数。
在高斯-牛顿法中,我们通过改变R和t来进行顺序迭代,方向为函数E减小的方向,即其梯度的方向。
让我们在无穷小邻域内对其进行近似。
这是一个我们将通过改变R和t来最小化的公式。
虽然点到平面距离对R和t都是线性的,但旋转空间本身并不是线性的。你可以从R如何由其旋转角生成中看出这一点。
但是由于我们有无穷小的旋转,R可以近似为以下形式:
其中I - 单位矩阵,A - 三维特殊正交群so(3)的成员。
通过将所有sin(t)和cos(t)项逼近到其极限(t --> 0),我们得到以下表示:
将R的近似值代回E表达式,我们得到:
让我们引入一个函数f,它近似变换位移:
当E_approx的微分(即自变量增加时的导数)为零时,E_approx最小,所以让我们找到这个微分。
让我们对ppd进行微分:
对于向量x中的所有变量x_j,我们得到:
令新变量:
f(x, p)可以表示为矩阵向量乘法。为了证明这一点,我们必须记住
为了简化,引入G(p)。
由于,我们得到。
令一个新的值:
让我们进行替换:
通过求解这个方程,我们得到每次高斯-牛顿迭代的刚体变换位移。
我们从位移生成旋转和平移矩阵,然后将当前姿态矩阵乘以我们得到的矩阵。
虽然位移的平移部分按原样贡献于结果矩阵,但旋转部分的生成则较为复杂。旋转位移通过指数运算从so(3)转换为SO(3)。事实上,3x1的rshift向量表示旋转轴乘以旋转角度。我们使用罗德里格斯变换从该向量得到旋转矩阵。更多细节,请参见维基页面。