视觉SLAM学习打卡【11】-尾述

到目前为止,视觉SLAM14讲已经到了终章,历时一个半月,时间有限,有些地方挖掘的不够深入,只能在后续的学习中更进一步。接下来,会着手ORB-SLAM2的开源框架,同步学习C++。

一、回环检测

1.实现方法

  • 对任意两幅图像都做一些特征匹配(检测数量太大)
  • 随机抽取历史数据并进行回环检测(可能漏掉回环,检测效率不高)
  • 基于视觉里程计的几何关系(存在累计误差)
  • 基于外观(主流方法)——词袋模型

2.词袋模型步骤

调用DBoW3::Vocabulary对象的构造函数后,输出结果:

vocabulary info:Vocabulary:k=10,L=5,Weighting=tf-idf,Scoring=L1-norm,Number of words=4983
  • k=10,L=5——上述生成字典采用K叉树(深度为5,每次分叉为10),每个叶子节点对应一个单词.
  • Weighting=tf-idf——TF-IDF(Term Frequence-Inverse Document Frequence / 词频-逆文档频率)
    √ TF:某单词在一幅图像中经常出现,它的区分度就高; T F i = n i n . TF_{i}=\frac{n_{i}}{n}. TFi=nni.(图像A中单词wi出现了ni次,一共出现的的单词次数为n)
    √ IDF:某单词在字典中出现频率越低,分类图象时区分度越高。 I D F i = log ⁡ n n i . \mathrm{IDF}_{i}=\log\frac{n}{n_{i}}. IDFi=lognin.(某叶子节点wi的特征数量为ni,字典中所有特征数量为n)
    √ 权重Weighting等于TF与IDF的乘积 η i = T F i × I D F i . \eta_{i}=TF_{i}\times IDF_{i}. ηi=TFi×IDFi.
  • Scoring=L1-norm——计算不同图像的差异,进行相似度计算.

(1)生成字典Word

  • 随机选取k个中心点(特征点)
  • 对每一个特征点,计算它与每一个中心点的距离(描述子算汉明距离),取最小的作为它的类(单词“Word”)
  • 重新计算每个类的中心点
  • 如果每个类的中心点变化很小,则算法收敛,退出(所有的类/ Word 构成字典);否则返回第二步

(2)生成词袋Bag-of-Words(BoW)

某幅图像A中,单词 wi 和其对应权重 η i \eta_i ηi 组成的向量 v 对组成它的BoW. A = { ( w 1 , η 1 ) , ( w 2 , η 2 ) , … , ( w N , η N ) } = d e f v A A=\{(w_{1},\eta_{1}),(w_{2},\eta_{2}),\ldots,(w_{N},\eta_{N})\}\stackrel{\mathrm{def}}{=}v_{A} A={(w1,η1),(w2,η2),,(wN,ηN)}=defvA

(3)相似度计算

A、B两幅图像的相似度评分公式可以为(L1范数形式): s ( v A − v B ) = 2 ∑ i = 1 N ( ∣ v A i ∣ + ∣ v B i ∣ − ∣ v A i − v B i ∣ ) s(\boldsymbol{v}_A-\boldsymbol{v}_B)=2\sum_{i=1}^N(|\boldsymbol{v}_{Ai}|+|\boldsymbol{v}_{Bi}|-|\boldsymbol{v}_{Ai}-\boldsymbol{v}_{Bi}|) s(vAvB)=2i=1N(vAi+vBivAivBi)(L1范数,也被称为曼哈顿范数,是向量范数的一种计算方式。L1范数等于向量元素的绝对值之和,也可以表示为从原点到向量所在点的曼哈顿距离。)
all in all,字典是单词的集合,字典+权重=词袋

二、建图

地图的用途归纳如下:在这里插入图片描述
在稠密重建中,需要知道每一个像素点的距离:

  • 单目相机-三角化
  • 双目相机-左右目视差计算

上述两种方式称为立体视觉(Stereo Vision),其中,第一种又称为移动视角的立体视觉(Moving Stereo Vision MVS)

  • RGB-D相机直接获得像素距离

1.单目稠密重建

(1)极线搜索与块匹配

在特征点方法中,我们是根据描述子通过特征匹配来确定那个点是匹配点。但是在稠密的限制下,我们不可能对每个点保存描述子,我们只能在极线上找一个与p1长的很像的点,具体来说,我们要沿着极线l2,从一头跑到另一头,在这里面找一个很像的点。请添加图片描述

对极几何和极线搜索的区别

  • 对极几何:已知p1、p2像素坐标,根据本质矩阵E求R、t.
  • 极线搜索:已知R、t和p1像素坐标,求p2像素坐标

单个像素的灰度区分度太低,又没有描述子去描述特征,我们采用块匹配的方法,也就是取p1周围一个w×w的小块,在极线上也取很多的等大小的小块进行比较:

  • SAD(Sum of Absolute Difference / 两小块差的绝对值之和)。 S ( A , B ) S A D = ∑ ∣ A ( i , j ) − B ( i , j ) ∣ . S(\boldsymbol{A},\boldsymbol{B})_{SAD}=\sum|\boldsymbol{A}(i,j)-\boldsymbol{B}(i,j)|. S(A,B)SAD=A(i,j)B(i,j)∣.接近0说明两小块相似
  • SSD(Sum of Squared Distance / 平方和)。 S ( A , B ) S S D = ∑ i , j ( A ( i , j ) − B ( i , j ) ) 2 . S(\boldsymbol{A},\boldsymbol{B})_{SSD}=\sum_{i,j}\left(\boldsymbol{A}(i,j)-\boldsymbol{B}(i,j)\right)^2. S(A,B)SSD=i,j(A(i,j)B(i,j))2.接近0说明两小块相似
  • NCC(Normalized Cross Correlation / 归一化互相关)。 S ( A , B ) N C C = ∑ i , j A ( i , j ) B ( i , j ) ∑ i , j A ( i , j ) 2 ∑ i , j B ( i , j ) 2 . S(\boldsymbol{A},\boldsymbol{B})_{NCC}=\frac{\sum_{i,j}\boldsymbol{A}(i,j)\boldsymbol{B}(i,j)}{\sqrt{\sum_{i,j}\boldsymbol{A}(i,j)^2\sum_{i,j}\boldsymbol{B}(i,j)^2}}. S(A,B)NCC=i,jA(i,j)2i,jB(i,j)2 i,jA(i,j)B(i,j).接近1说明两小块相似

上述3种方法可以进行去均值操作:形成去均值的SSD,去均值的NCC,去均值的SAD

(2)高斯分布的逆深度滤波器

在搜索距离较长的时候,通常会得到一个非凸函数,存在许多峰值,但是真实的对应点只有一个。也就是说对应位置是一个概率表示的位置,所以估计的深度也应该是一个概率值,所以问题就转换到了对不同图像进行极线搜索的时候,估计的深度分布会发生怎样一个变化,这就是深度滤波器请添加图片描述
假设深度值d服从高斯分布,通过信息融合(两个高斯分布的乘积依然是高斯分布),更新原来d的分布。
逆深度:是近年来SLAM研究中出现的一种广泛使用的参数化技巧。假设深度的倒数(逆深度)为高斯分布是有效的,有更好的数值稳定性。

(3)像素梯度的问题

  • 立体视觉对物体纹理的依赖性:对于梯度不明显的像素,由于在块匹配时没有区分性,将难以有效的估计其深度。
  • 像素梯度和极线的关系:当像素梯度与极线夹角较小时,极线匹配的不确定性小;而当夹角较大时,匹配的不确定性变大。在这里插入图片描述

2.RGB-D稠密建图

利用深度相机进行稠密建图是相对简单的,最简单的方法就是根据估算的相机位姿,将深度相机数据转换为点云,拼接之后就得到了一个由离散点组成的点云地图(Point Cloud Map)。在此基础上改进:

  • 三角网格(Mesh)
  • 面片(Surfel)
  • 通过体素(Voxel)建立占据网格地图(Occupancy Map).有许多小的立方体单元(体素)组成,每个体素都包含了其位置信息和属性信息。

3.八叉树地图

在导航中比较常用,本身具有较好的压缩性能的八叉树地图,比较节省存储空间。
在这里插入图片描述

  • 对空间进行划分,每次划分是对空间的三个方向各划一刀,于是会产生八个块,对应到树结构上就是一层产生八个儿子节点,也就是八叉树。整个大方块可以看成是根节点,而最小的块可以看作是“叶子节点”。于是,在八叉树中,当我们由下一层节点往上走一层时,地图的体积就能扩大八倍。体积与深度成指数关系,所以当我们用更大的深度时,建模的体积会增长的非常快。
  • 八叉树可以节省存储,主要是在于当某个方块的所有子节点都被占据或都不被占据时,就没必要展开这个节点。

4.实时三维重建

与SLAM非常相似但又有稍许不同的研究方向:实时三维重建。一种以”建图“为主体,定位居于次要地位的做法。

三、SLAM的开源方案

1. MonoSLAM

  • 第一个实时单目视觉SLAM系统
  • 后端:EKF
  • 前端:特征点法

2. PTAM(Parallel Tracking and Mapping)

  • 实现了定位&建图过程的并行化
  • 第一个使用非线性优化BA

3. ORB-SLAM(Oriented FAST and Rotated BRIEF SLAM)

  • 支持单目、双目、RGB-D三种模式
  • 创新使用三线程完成SLAM:实时跟踪特征点的Tracking线程;局部BA的优化线程(小图);全局位姿图的回环检测和优化线程(大图)。

4. LSD-SLAM(Large Scale Direct monocular SLAM)

  • 将单目直接法运用到半稠密(只估计梯度明显的像素位置)SLAM中

5. SVO(Semi-direct monocular Visual Odometry)

  • 半直接/稀疏直接法:指特征点与直接法的混合使用。SVO跟踪一些关键点(角点,没有描述子),像直接法那样,估计关键点周围的相机运动.
  • 提出深度滤波器的概念,并推导了基于均匀-高斯混合分布的深度滤波器
  • 追求速度和轻量化,舍弃了后端优化和回环检测部分,故称为视觉里程计.

6. RTAB-MAP(Real-Time Appearance-Based Mapping)

  • RGB-D传感器上的SLAM方案,能够在CPU上实时建立稠密的地图
  • 包含:基于特征的视觉里程计;基于词袋的回环检测;后端的位姿图优化;点云和三角网络地图

7.视觉+惯性导航SLAM

  • 使用VIO(Visual-Inertial Odometry,即视觉惯性里程计)
  • IMU和相机互补:IMU为快速运动提供了较好的解决方案(运动过快,相机产生模糊);相机在慢速运动下解决IMU漂移问题.
  • VIO框架定型为2大类:松耦合(IMU和相机各干各的,最后对结果融合)和紧耦合(IMU和相机一起,共同构建运动方程,然后进行状态估计)

8.语义SLAM

  • 把物体识别和视觉SLAM相结合,构建带标签的地图,把标签信息引入BA或优化端的目标函数和约束中.
  • 将SLAM与深度学习、神经网络结合,处理图像.

四、特征点法能构建稠密地图吗?

在学习SLAM过程中,由于对该领域了解尚浅,产生了片面的认识:特征点法和直接法均可以重建稀疏地图,半稠密、稠密地图无描述子,仅可采用直接法。

特征点法本身并不能直接构建稠密地图。特征点法主要是通过提取和匹配图像中的特征点来进行定位与建图。它主要关注的是稀疏的特征点,这些点可能不足以构成稠密地图。稠密地图通常需要更多的像素级信息,而不仅仅是特征点。
然而,通过结合其他方法或技术,特征点法可以在一定程度上用于构建稠密地图。例如,可以利用特征点法得到的稀疏地图作为初始估计,然后通过插值或其他方法扩展为稠密地图。另外,也可以使用深度相机或其他传感器来获取更多的深度信息,结合特征点法来实现稠密地图的构建

  • 11
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值