视觉SLAM十四讲-第十三讲笔记

本讲是最后一讲!讲了不同地图的表示方法=-=

一、概述

前面所讲的地图都是特征点的集合,也就是稀疏地图,实际上还有各种地图,面向各种任务:

  • 稀疏地图:定位
  • 稠密地图:导航、避障、重建
  • 语义地图:交互

二、单目稠密重建

1. 立体视觉

要进行稠密重建,就要知道每一个像素的深度,其方法是:

  • 单目:三角化
  • 多目:视差
  • 深度:直接

对于单目,需要使用参考帧,和它移动一小段后的当前帧,对其中的匹配点三角化。但这个过程中,匹配是很耗时的。对于所有像素来说,都做一遍匹配是不现实的。
因此问题转化为:如何进行快速的匹配?

2.极限搜索与快匹配

其方法是,对于参考帧ref,其像素 p 1 p_1 p1可能存在于 p 1 p_1 p1与光心连线的任一点。投影到当前帧curr就是极线。因此,可以在极线上搜索和 p 1 p_1 p1比较相似得点
逐像素对比不够稳定,因此选择使用块匹配,即对比邻域内的所有像素。
其量化方法有SAD、SSD、NCC等。

3.高斯分布的深度滤波器

对像素点的深度估计,看成一个状态估计问题。注意,对一个深度是要进行多次三角化确保收敛的。
深度滤波器,是用概率分布描述深度值,在每一张新的图像来临时,用三角化后得到的值,更新深度值的概率分布和不确定性。
问题转化为:如何更新这个高斯分布。
在假设高斯分布的情况下,即维护其均值和协方差。设当前深度的高斯分布是 N o b s N_obs Nobs,更新后是 N f u s e N_fuse Nfuse,根据高斯分布的成乘积,得到其更新公式(P326)。

接下来的问题是,如何得到当前帧的分布。
书上给出了几何推倒,意思是当存在一个扰动时,它对深度的影响有多大。这个影响值就是不确定性。

4. 流程

  1. 假设所有像素的深度满足某个初识高斯分布,初始化深度矩阵和协方差矩阵。
  2. 对于每一帧图像,确通过极线搜索和快匹配确定ref中每个像素在curr上的投影点位置。
  3. 对于每对ref的像素和对于curr的投影点,使用三角化计算深度,使用集合方法计算其不确定性。
  4. 使用高斯分布公式,将当前帧的概率分布融合进总的概率分布(深度矩阵和协方差矩阵)中。
  5. 检查收敛。

5、存在的问题

5.1.纹理问题

立体视觉中,对纹理依赖性强。若纹理(光滑,纯色,亮度均匀)的地方,难以检测。

5.2.像素梯度问题

像素梯度垂直于极线方向,能够精准匹配,存在最高点。
像素梯度平行于极线方向,无法匹配,处处相等,无最大值。

因此,像素梯度与极线夹角越大(接近垂直),不确定性越小。

5.3. 逆深度

使用深度的倒数,而非深度,为高斯分布。避免计算表示困难(极大、极小的特殊深度值)。

5.4. 图像间的变化

主要是预先进行旋转的变换处理。
使用给一个增量,计算变换关系的方法。

5.5. 其他

可GPU并行。
加正则项,使深度平滑。
处理外点,考虑块匹配时错误匹配的情况。

三、 RGBD稠密建图

可直接获得地图。

点云地图:初级,信息少,存储量大,存在冗余,无法处理运动物体。
还有网格地图、surfel、voxel等地图。

八叉树地图

把空间不断八等分,建立八叉树。
其节省体积之处在于:避免了没必要的存储,如都是空的位置,不必存储的十分精细,都有信息的位置,就按粗的分辨率存储。

因此当某个节点的所有子节点都被占据或都不被占据时,这个节点就不展开
并且,每个节点存储的信息,也可以动态建模,使用logit变换,描述其是否被占据。

你可能感兴趣的:(SLAM)