KinectFusion算法原理
https://blog.csdn.net/baidu_17313961/article/details/52862416
主要原理
KinectFusion算法仅使用深度信息,通过设计高效及高度并行的算法在 GPU(图形处理单元)上运行达到了非常高的实时性,在试验中,在配置 4000 元左右的电脑上运行速度达到了 18 帧/秒,在进行场景建立时有良好的用户体验,甚至可以用来做一些人机交互方面的应用。同时 KinectFusion 采用了基于 TSDF( truncated signed distance function)模型的点云融合方法,构建的点云模型冗余点少。
KinectFusion算法通过将Kinect采集到的深度数据进行匹配定位于融合来实现3D场景重构。它的算法流程如图3所示,主要由4个部分组成 :
A ) 深度数据处理,是将传感器原始的深度数据转换成3D点云,得到点云中顶点的3维坐标和法向量;
B ) 相机跟踪:将当前帧3D点云和由现有模型生成的预测的3D点云进行ICP匹配,计算得到当前帧相机的位姿
C ) 点云融合:根据所计算出的当前相机位姿,使用TSDF点云融合算法将当前帧的3D点云融合到现有模型中。
D ) 场景渲染:是使用光线跟踪的方法,根据现有模型和当前相机位姿预测出当前相机观察到的环境点云,一方面用于反馈给用户,另一方面提供给b进行ICP匹配。
KinectFusion中的ICP定位方法
ICP定位环节将当前帧3D点云和预测得到的3D点云进行匹配时,由以下步骤来实现:
A: 将原始的深度图像转化为相机坐标系中三维顶点和法线;利用投影法来确定对应点关系,用一个二维ICP来表示其过程,相机在连续两个位置分别对其进行采样和预测,假设O2和O1分别是当前相机和前一帧相机的坐标系原点。首先将k2和k1时刻的两个点云都转换到当前帧k2的相机坐标下,然后将两个点云通过相机中心O2向像平面上投影,两个点云中具有相同的像平面上的投影点的点即为对应的点,算法中还通过对应点之间的欧式距离和法向量夹角来对对应点进行筛选。
B:相 机 追 踪, 使 用 基于 GPU 实 现 的ICP 算 法, 配 准 当 前 帧 和 上 一 帧 数据, 得到当前 的 Kinect相 机 姿 态( 位 置 和 方 向);利用点到平面的误差机制来衡量当前相对位姿的准确度。在二维情况下点与点之间的误差为它们之间的切线距离。通过优化后得到相对位姿。
C:立方体融合, 已知当 前 的 相 机 姿 态, 则 可 以 将当前得到的顶点转化到全局坐标 系 中, 并 更 新 相 应小立方体( 体素) 的数值;采用线性化的方法将优化问题转化为一个最小二乘优化,通过计算一个线性方程组来计算最优解,迭代A-B十次。
D:光线投射,对立方体进行光线投射, 得到立方体渲染的可视化图像。移动的Kinect会 从 细 微 变 化 的 不 同 视 角 去 看 一 个 表面, 任何在原始Kinect图像中看不到的孔洞都会被填充, 立方体中的数据也会被不断改善。
KinectFusion中的TSDF点云融合算法
TSDF算法用一个立方体珊格来表示三维空间,立方体中每一个栅格存放的是该栅格到物体模型表面的距离,同时用正负来表示表面被遮挡一侧和可见一侧,而过零点就是表面上的点,这种方法是具有最小二乘优化性质的,同时使用了权重值来进行融合,对一些传感器的噪声具有一定的抑制作用。
KinectFusion 算法的两个问题分析
ICP 定位失效问题.当环境主要由平行平面构成时,在建模过程中经常会出现相机视野范围内的环境空间限制不全面,这时 KinectFusion 中的ICP 算法会失效,进而导致整个建模过程的中断。例如当前视野中的主要部分是地面和墙面以及与墙面平行的平面,这种场景将导致相对位姿中平行于墙面和地面的运动分量无法正确估算。如果环境中仅有一条直线,相机移动一段距离进行了两次采样。ICP 的方法首先找到对应点然后计算点到切面的距离误差这时所有对应点的误差均为 0,第一次迭代后 ICP 就结束这样 ICP 定位就失效了。
累积误差问题。在不断创建新场景时累积误差比较严重.虽然 KinectFusion 算法将当前点云与模型中预测的点云进行匹配定位,所以在对同一个环境进行重复建模时不会出现累积误差无限增加的情况,但是
在创建新环境时累积误差依然存在。在创建的点云中可以看到创建得到的地面和墙面不是一个平面,有明显的累积误差.对于一些人机交互应用来说,这不是一个很大问题,但是用于机器人定位导航中却是关键的问题。
阅读(1552) | 评论(0) | 转发(0) |