2019/02/09 对于KinectFusion 的理解

时间:2023-03-08 21:53:49

网上有很多关于Kinect Fusion 的详细介绍,包括各个部分的算法,思路,以及应用上的限制和优化。 在此就不多介绍了。

KinectFusion 提供了非常基础的用RGB-D 相机实现的 Dense mapping algorithm. 在实验初期我也阅读了很多次。 最近由于实验上遇到了非常棘手的问题, 又把之前的资料拿出来再次仔细的阅读,希望能有新的发现。

1。 pcl::kinfu 和 pcl::kinfuLS.

找了相关的Libs 和 网上资料,但是并没有找到合适的代码资料和 demo code。

2。 ICP in KinFu

KinFu 使用point-to-plane ICP。

无论是Point-to-point 还是 Point-to-plane, 它都包括2个主要的步骤。

  1。 find the corresponding points in adjacent frames.

  2. establish and optimize the error func iteratively.

由于需要确定 corresponding points pair, KinFu 使用了另外两个约束方程:

  1. 两帧图像上相关点的  T < transformation threshold.

  2. 两帧图像上相关点的  Normal difference <  Normal corresponding threshold.

正是由于这种找corresponding points 的算法, Kinfu 的ICP 只能用于运动距离比较小的tracking 应用。

所以,它提供的思路和算法并不能用于我的实验。

3。 TSDF Voxel model

由于我一直在用PCL::PointCloud, 所以在计算上我只用了CPU。 并且由于深度图像并不精确,每一帧深度点云存在很多误差。

所以我在思考能否用TSDF model  来优化我得到的3D 点云,并用RAYCAST 来计算摄像机的位移。

需要注意的是, 如果使用RAYCAST 投影点云, pcl::gpu::raycaster 提供的算法是应用于 3D voxel volume上的。

所以还是需要depth / 3d PCD -> 3D TSDF Voxel Volume -> Raycasted current View.

4。 点云边缘

PCL 提供的点云边缘是否能用于我的实验, 来优化追踪效果。