天天看点

KinFu中的ICP算法

        KinFu中的ICP算法与标准的ICP不同,KinFu中的ICP是用来估计相机的位置。它与标准的ICP算法主要有以下2个方面的不同:

        1、对应点的选择方法不同。标准的ICP算法是通过遍历寻找最近点来得到一组对应点。而KinFu中的ICP算法在找对应点时是通过将空间中的点投影到相机平面上,认为两帧之间相同像素点对应的空间点对是一组对应点。这种方法可以加快寻找对应点的速度。我觉得KinFu中之所以采用这种方法,是因为Kinect直接得到的是二维深度图,所以才直接通过二维的图像来找对应点。至于KinFu中寻找对应点的过程一直搞得不是很明白,之前看文章和源码中都有通过当前全局坐标点反变换到前一时刻局部坐标点的过程,再将前一时刻局部坐标点投影到前一时刻的二维相机平面中,通过之前存储的vmap_g_prev来得到与这个计算得到的像素点对应的前一时刻的全局坐标点,这个点与当前全局坐标点构成一组对应点,但一直有个疑问:这个前一时刻全局坐标点和当前全局坐标点难道不是同一个点吗;看了一个外国人总结的关于KinFu的博客,他说对应点是通过两帧间相同像素点来找到的,不知道这两种方法是否等价?

        2、KinFu中ICP优化的目标函数是所有对应点对的点到平面的距离之和,而不是点到点的距离。应用点到平面的距离可以加快收敛速度。通过对KinFu做一些假设(算法实时;相机移动速度不要过快),可以把非线性的目标函数线性化,最后用正规方程的形式可以得到表示R和t的6个参数。

继续阅读