DSO初始化流程
嗨,各位读者朋友们好!今天我们接着讲DSO全家桶中的第三讲——初始化。
这一讲的内容相对来说会简单一些,因为笔者会将初始化阶段的运动估计移到下一讲:DSO全家桶(四)——前端:前端跟踪中去讲,因为本质上这两个跟踪的方法比较接近,就没有必要赘述了。
在第二讲中,我们已经介绍了DSO提取梯度点的策略,那么这一讲就接着后续的操作,讲讲这些梯度点会怎么用。对于单目SLAM来说,我们通常至少需要两个帧才可以完成初始化,DSO也不例外。
那么,我们先看看DSO初始化阶段的主要流程:

图1. DSO初始化流程
1. 对第一帧的图像金字塔提取梯度点,并将每个点的逆深度值初始化为1,并设置每个点的外点阈值;
2. 对步骤1中的每一个梯度点构建最近邻(makeNN)索引,在同一层中找到10个与其距离最接近的点构建邻域关系。通过在下一层的NN索引中,找到与当前点距离最小的点,设置为parent点,目的是关联当前层与下一层,便于光流金字塔和逆深度值的传播;
3. 输入第二帧图像,将第一帧初始化的梯度点投影到当前帧中构建残差,并采用光流金字塔对初始相对运动进行估计,这部分内容我们会在下一讲详细介绍;
4. 将第一帧设置为关键帧,加入滑动窗口中;
5. 统计第一帧所有点的逆深度值,并计算归一化尺度因子,用于将相对位移归一化;
6. 遍历所有点,对所有点创建未成熟点,根据阈值条件判断可否进行激活;
7. 为所有可激活的点设置逆深度值,值得注意的是,DSO设置了两个逆深度值,一个是有尺度因子的,一个是没有尺度的;
8. 设置两帧各自的初始位姿;<