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

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

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

  • 一、回环检测
    • 1.实现方法
    • 2.词袋模型步骤
      • (1)生成字典Word
      • (2)生成词袋Bag-of-Words(BoW)
      • (3)相似度计算
  • 二、建图
    • 1.单目稠密重建
      • (1)极线搜索与块匹配
      • (2)高斯分布的逆深度滤波器
      • (3)像素梯度的问题
    • 2.RGB-D稠密建图
    • 3.八叉树地图
    • 4.实时三维重建
  • 三、SLAM的开源方案
    • 1. MonoSLAM
    • 2. PTAM(Parallel Tracking and Mapping)
    • 3. ORB-SLAM(Oriented FAST and Rotated BRIEF SLAM)
    • 4. LSD-SLAM(Large Scale Direct monocular SLAM)
    • 5. SVO(Semi-direct monocular Visual Odometry)
    • 6. RTAB-MAP(Real-Time Appearance-Based Mapping)
    • 7.视觉+惯性导航SLAM
    • 8.语义SLAM
  • 四、特征点法能构建稠密地图吗?

一、回环检测

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/823719.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java27

FileOutputStream类 文件字节输出流FileOutputStream类是OutputStream类的子类write()方法顺序地向输出流写入字节,直到关闭输出流。 使用FileOutputStream类,操作本地文件地字节输出流,可以把程序中的数据写到本地文件中,其中写…

Java实现对称加密算法 DES/3DES/AES

一、DES加密算法 1.1 原理 DES是一种对称加密算法,它使用相同的密钥进行加密和解密操作。 DES算法的核心是一个称为Feistel网络的结构,它将明文分成左右两部分,并通过多轮迭代和替换操作来生成密文。 DES算法使用56位密钥(实际…

基于SpringBoot+Vue的装饰工程管理系统(源码+文档+包运行)

一.系统概述 如今社会上各行各业,都喜欢用自己行业的专属软件工作,互联网发展到这个时候,人们已经发现离不开了互联网。新技术的产生,往往能解决一些老技术的弊端问题。因为传统装饰工程项目信息管理难度大,容错率低&a…

面试突击---MySQL索引

面试突击---MYSQL索引 面试表达技巧:1、谈一下你对于mysql索引的理解?(为什么mysql要选择B树来存储索引)2、索引有哪些分类?3、聚簇索引与非聚簇索引4、回表、索引覆盖、最左匹配原则、索引下推(1&#xff…

概念解读稳定性保障

什么是稳定 百度百科关于稳定的定义: “稳恒固定;没有变动。” 很明显这里的“稳定”是相对的,通常会有参照物,例如 A 车和 B 车保持相同速度同方向行驶,达到相对平衡相对稳定的状态。 那么软件质量的稳定是指什么…

小白必看的Ubuntu20.04安装教程(图文讲解)

总的来说,安装Ubantu包含以下三个步骤: 一、安装虚拟机 二、Ubuntu镜像下载 三、虚拟机配置 一、安装虚拟机 选择安装VMware Workstation,登录其官网下载安装包,安装点这里。 下载后运行安装向导,一直Next即可。最…

2024腾讯一道笔试题--大小写字母移动

题目🍗 有一个字符数组,其中只有大写字母和小写字母,将小写字母移到前面, 大写字符移到后面,保持小写字母本身的顺序不变,大写字母本身的顺序不变, 注意,不要分配新的数组.(如:wCelOlME,变为wellCOME). 思路分析🍗 类似于冒泡排序,两两比较…

ssm055基于spring框架的中小企业人力资源管理系统的设计及实现+jsp

中小企业人力资源管理系统设计与实现 摘 要 现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本中小企业人力资源管理系统就是在这样的大环境下诞生,其可…

[lesson39]逗号操作符的分析

逗号操作符的分析 逗号操作符 逗号操作符(,)可以构成逗号表达式 逗号表达式用于将多个子表达式连接成为一个表达式逗号表达式的值为最后一个子表达式的值逗号表达式中的前N-1个子表达式可以没有返回值逗号表达式按照从左向右的顺序计算每个子表达式的值 重载逗号操作符 在C…

OPC-UA是这样在食品和饮料中应用的

什么是 OPC-UA OPC Unified Architecture,即 OPC-UA,是一种基于 TCP/IP 的协议,用于自动化工程师实时、高可靠性、高效性地在控制系统级别共享数据。 OPC-UA 的特点 安全通信: OPC-UA 使用先进的加密方法和严格的访问控制,确保数…

CV每日论文--2024.4.15

1、Connecting NeRFs, Images, and Text 中文标题:连接 NeRF、图像和文本 简介:神经辐射场(NeRFs)已经成为表示3D场景和物体的标准框架,引入了一种新的数据类型用于信息交换和存储。与此同时,多模态表示学…

Excel文件解析(Java)

一、概述 在应用程序的开发过程中,经常需要使用 Excel文件来进行数据的导入或导出。所以,在通过Java语言实现此类需求的时候,往往会面临着Excel文件的解析(导入)或生成(导出)。 在Java技术生态圈中&#xff0c…

<计算机网络自顶向下> 多路复用与解复用

多路复用/解复用 端口号区分进程到进程多路解复用工作原理 解复用作用:TCP或者UDP实体采用哪些信息,将报文段的数据部分交给正确的socket,从而交给正确的进程主机收到IP数据报 每个数据报有源IP地址和目标地址每个数据报承载一个传输层报文段…

(算法版)基于二值图像数字矩阵的距离变换算法

Hi,大家好,我是半亩花海。本项目展示了欧氏距离、城市街区距离和棋盘距离变换的实现方法。通过定义一个距离变换类,对输入图像进行距离变换操作,并生成对应的距离矩阵。在示例中,展示了在一个480x480的全黑背景图像上设…

App Inventor 2 块拓展之:最大值、创建多项列表

什么是块拓展? App Inventor 2 引入了一项新功能,允许某些块扩展、收缩甚至更改其功能。 顶部具有蓝色框白色齿轮的代码块都是可拓展块。 块拓展用法 块扩展可以改变形状,通过单击蓝色图标,用户可以将较小的块拖到较大的块中&am…

雨伞-浅色脚本

渲染参考:明亮/干净/高级 静帧参考 解说 镜头时长 效果参考 中景画面展示3把竖着的浅色的伞 1s / 特写展示伞把手 1s 中景展示雨伞全貌 2s 微观镜头 缝线动画 3s 镜头旋转至伞面微观材质镜头,展现其多层结构 10s 微观镜头 水珠滑动在伞…

gpt4和chatgpt的区别

模型规模和性能:GPT-4比GPT-3.5更大、更强大。GPT-4拥有更多的参数和更大的训练数据集,因此在各种任务上表现更出色,如语言理解、问题解答和推理能力等。多模态能力:GPT-4支持处理图像等多模态信息,而GPT-3.5主要处理文…

服务器raid卡,守护数据安全,赋能新质生产力

RAID卡,全称为独立冗余磁盘阵列卡,在数据中心、服务器、网络存储等领域得到广泛应用,RAID卡通过不同的RAID级别实现数据容错和冗余。例如,RAID 0主要适用于需要高速数据传输但对数据安全要求不高的场景,如数据的缓存&a…

基于改进遗传算法的配电网故障定位(matlab代码)

1 主要内容 该程序复现文章《基于改进遗传算法的配电网故障定位》,将改进的遗传算法应用于配电网故障定位中, 并引入分级处理思想, 利用配电网呈辐射状的特点, 首先把整个配电网划分为主干支路和若干独立区域, 再利用该算法分别对各独立区域进行故障定位, 然后进行…

Node Version Manager(nvm):轻松管理 Node.js 版本的利器

文章目录 前言一、名词解释1、node.js是什么?2、nvm是什么? 二、安装1.在 Linux/macOS 上安装2.在 Windows 上安装 二、使用1.查看可安装的node版本2.安装node3. 查看已安装node4.切换node版本5.其它 总结 前言 Node.js 是现代 Web 开发中不可或缺的一部…