目前流行的大多数VSLAM都是基于鲁棒的特征检测和跟踪,
DTAM是基于单像素的方法,
采用了在稠密地图(densemap)创建和相机位置估计都很有优势的低基线帧(lowbaseline frame)。
像PATM一样,它分为两个部分:姿势跟踪和3d 映射。
PTAM仅仅跟踪稀疏的3d点,
DTAM保持了对关键帧的稠密深度映射(densedepth map)。
lsd_slam也是直接法,不过是稀疏的地图,跟踪灰度梯度大的像素点(单目相机)
DTAM继承了关键帧的架构,但对关键帧的处理和传统的特征点提取有很大的不同。
相比传统方法对每一帧进行很稀疏的特征点提取,
DTAM的direct method在默认环境亮度不变(brightness consistancy assumption)的前提下,
对每一个像素的深度数据进行inverse depth的提取和不断优化来建立稠密地图并实现稳定的位置跟踪。
用比较直观的数字对比来说明DTAM和PTAM的区别:
DTAM的一个关键帧有30万个像素的深度估计,而PTAM一般的做法是最多一千个。
DTAM的优缺点很明显(具体对比见图1):
准、稳,但速度是问题,每一个像素都计算,确实容易通过GPU并行计算,但功耗和产品化的难度也都随之升高。
数据关联中的点所在空间有三种:
1) 2D−2D: 当前帧的点和过往帧的点都是在图像空间中 . 在单目相机的初始化过程中经常出现这种数据关联
2) 3D−2D: 过往帧的点在 3D 空间中 , 当前帧的点在图像空间中 , 这样问题转化为一个 PnP 问题。
3) 3D−3D: 当前帧和过往帧的点都在 3D 空间中 , 这种情形一般在深度相机 VO 系统的位姿估计或经过三角测量的点进行 BA 时出现。
1. 在 VO 系统初始化时 , 地图未建立 , 系统无法确定当前状态 , 采用 2D−2D 数据关联 ,
求解基础矩阵或者单应矩阵后,对基础矩阵或单应矩阵分解求解相机的相对位姿 , 三角化求解路标点的三维坐标。
2. 若地图中 3D 点可用 , 优先使用3D 点进行位姿估计 .
此时 , 将3D路标点投影到当前帧图像 , 在局部范围内搜索完成图像点的匹配。
这种 3D−2D 的数据关联经常用于 VO 系统正常状态下的定位 .
3. 3D−3D 数据关联常用于估计和修正累积误差和漂移 . 3D 路标点会出现在多帧图像中 ,
通过这些 3D 点之间的数据关联可以修正相机的运动轨迹以及 3D 点的三维位置.
DTAM (Dense tracking andmapping) [23] 的目标函数中包含了多种数据关联的误差 ,
包括图像空间的匹配误差(2D-2D)和 3D 空间的位置误差(3D-3D).
当帧间运动较小 , 成功匹配的 3D 点较多时 ,使用3D-3D匹配估计位姿矩阵 ;
当帧间运动较大 , 匹配 2D 点较多时 ,使用 2d-2d匹配 估计基础矩阵。