【视觉SLAM入门】9.1 建图1---SLAM任务,稠密地图构建,立体视觉,RGBD,八叉树,点云地图等各种不同地图

2023-09-18 22:33:19

SLAM的功能: 直到现在我们可以知道SLAM包含:定位,导航,避障,重建,交互。

  • 在不同的功能下也有不同的地图。

在这里插入图片描述
之前的都是稠密地图,不同功能要不同地图,本节看稠密地图构建。

1. 立体稠密地图

构建地图必须要知道每个像素点到照片的距离。
立体视觉 : 单目和双目的统称,单目做三角化,双目做时差;
另一种:用RGB-D直接获得距离。

1.1 地图构建

稠密地图,无法将每个像素都当做特征点。寻找新的匹配算法。

  • 极线搜索块匹配:负责匹配,确定A图中的点出现在B图中的位置;
  • 深度滤波器:确定匹配到的深度,用多次三角测量使其收敛。

极线搜索示意图

在这里插入图片描述
描述的是:不同视觉下观察同一个点,相机1中的 p 1 p_1 p1 点,实际的点一定在 d d d 这条线上,在相机2中观察这个点就在极线 l 2 l_2 l2 上,在这条线上搜索和 p 1 p_1 p1 比较相近的点。这就是极线搜索

块匹配

  • 上边极线搜索,在线上如何搜索到与 p 1 p_1 p1 相近的点,方法很多,比如直接比像素(直接法,误差大),块匹配等。
  • 这里介绍块匹配,一条线上相似亮度的像素很多,那就取图像块,在 p 1 p_1 p1 周围取一个大小为 w ⋅ w w\cdot w ww 的图像块,在极线上也这么取同样大小的小块比较,提高区分性。(比较两个小块方法有 SAD,SSD, NCC,还有改进的为了去掉光照影响,去每个小块均值的SAD,SSD等等)。

深度滤波器

在搜索距离比较长的情况下,真实的对应点尽管只有一个,但在搜索极线时会有很多峰值,如下,
在这里插入图片描述
非凸性,对一个点我们不会用单一数值去表示深度,而是用高斯概率 P ( d ) = N ( μ , δ 2 ) P(d) = N(\mu, \delta ^2) P(d)=N(μ,δ2),新的数据到来,都会观测它的深度,两个高斯分布进行融合。

分析这样做的误差(集合不确定性,这里以一个像素误差为例)

在这里插入图片描述
当最后的 δ \delta δ 收缩到一定小,认为深度数据已经收敛。

估计稠密像素深度的完整过程:
在这里插入图片描述

结果:大部分是正确的,但是没有得到预期效果。

1.2 分析立体相机稠密建图效果

  1. 像素梯度和块匹配的影响:像素梯度沿着块变化明显则效果好,像素梯度沿着块变化不明显则效果不好,如果图像仅仅是一片黑,一片白,没有有效信息,则不好匹配;(对物体纹理的依赖)
  2. 假设了深度符合高斯分布,实际中他的距离会从0到无穷,这个时候逆深度是高斯中比较有效的,有更好的数值稳定性,现在比较通用,就是在推导中深度的倒数;
  3. 如果相机明显旋转时,下黑上白的图像块可能会下白上黑,导致相关性为负,永远不可能匹配到了,尽管还是同一个。
    • 解决:在匹配之前要做图像间的变换,根据两幅图像的相机位姿考虑进来,对图像做仿射变换后,再进行匹配。
  1. 稠密估计一般GPU
  2. 在边缘区域深度变化可能很大,给深度估计加正则化,使相邻的深度变化不会太大;
  3. 没有考虑外点(没有匹配的点)

总之太过于依赖环境纹理和光照,不可靠

2. RGB-D稠密地图

RGB-D的结构光和飞时原理,保证了深度数据对纹理的无关性。只要能反射光就能估计深度;

2.1 地图对比

  1. 点云地图 ,可以含有 x , y , z , r , g , b x,y,z,r,g,b x,y,z,r,g,b 信息,有相机位姿则点云加和就是全局点云。但是点云地图比较初级:不满足定位,基本满足导航和避障,可视化不符合人类习惯,是一类初级地图
    • 细节:去掉深度太大或者无效的点;统计滤波器去掉孤立点;体素滤波器:降采样节省空间;
  1. 但是:适合导航的占据网格地图(Occupancy Grid) 是从点云出发的,SFM中的泊松重建,或者Surfel通过基本点云地图构建了漂亮的可视化地图。(其他地图详见PCL库)。

2.1.1 八叉树地图

  1. 八叉树地图:导航常用,压缩性能较好,可随时更新。(对标点云的规模大,无法处理运动物体)
    图源视觉SLAM14讲
  • 八叉树地图如上:假设房间是1块立方体,上前右分别切一刀,这样做一次,就被分成8个,对应八叉树第一层,对分开的小方块再如此做,这样深度越深,可储存容量越大;
  • 节省空间:某个方块的所有子节点都被占据或者不占据时,这个节点便没必要展开,0表空白,1表占据,由于噪声,我们用概率来储存;
  • 具体的储存方法:给定一个初始值,比如0.1,如果不断观测到它被占据,就一直累加,反之一直减小;为了防止它超界,用对数即可。

当有一个深度 d d d 的像素出现:证明深度值对应的空间点观察到一个占据数据,且从光心到这个点的线段没有障碍。

一个八叉树地图如下:

在这里插入图片描述

3. 建图?定位?孰轻孰重

3.1 鬼影问题

前边为了使用,我们以定位为主题进行了建图,这样的建图有问题

  1. 地图的构建只能在关键帧层面,由于算力原因;

  2. 没有优化地图,只是拼接叠加,假如两帧出现同一个物体,这种叠加往往不够准确,会有两个重影—鬼影。

总而言之,地图构建的不够精确

3.2 三维重建

这里将重建准确地图作为主题,定位次之,基于GPU加速。且研究方向正在往大规模,大型动态场景的重建方向发展。

RGBD实时重建方法也很多,TSDF地图等等。

4. 总结

单目或双目可以构建;但是RGB-D容易点,更稳定,没有讨论拓扑地图,只讨论了度量地图。

更多推荐

python爬虫:新兴动态渲染工具Playwright的简单介绍和教程

Playwright是一个用于自动化浏览器操作的工具,它支持Chromium、Firefox和WebKit浏览器,并提供了Python、JavaScript和其他编程语言的API。以下是Playwright的介绍和入门教程:1.安装Playwright首先,你需要安装Playwright。在Python中,你可以使用p

PCB布线之电源线干扰?|深圳比创达EMC

一客户画户外摄像头的板子,板子上电源线非常多,6层板,电源层已经被分割完了,还有2根电源线,没办法只能并行走线了,板子画完后发主管评审,主管让其在2根电源线中间走一根地线,该客户感觉没必要,因为地线太长了,太细了会形成天线,而且中间也没有地方可以打地孔。如下图:其实直流电源之间的影响有几个基本的优先原则:电源交流分量高

蓝牙技术|蓝牙轻松部署物联网项目,智能照明利用蓝牙特性快速发展

蓝牙物联网,特别是在低功耗蓝牙(BLE)普及的推动下,在物联网领域取得了显著增长和采用。由于低能耗和长时间使用小型电池的能力,BLE已成为许多物联网应用的首选无线技术。BLE使用与蓝牙相同的无线电频段,同样可以实现两个设备之间的数据交换。主要区别在于,BLE设备在连接之间的大部分时间都处于睡眠模式,并进行简短的通信会话

基于微信小程序的校园生活管理系统设计与实现(源码+lw+部署文档+讲解等)

文章目录前言运行环境学生微信端的主要功能有:管理员的主要功能有:具体实现截图视频演示为什么选择我自己的网站自己的小程序(小蔡coding)有保障的售后福利代码参考源码获取前言💗博主介绍:✌全网粉丝10W+,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ

机器学习:10种方法解决模型过拟合

机器学习:10种方法解决模型过拟合本文介绍机器学习/深度学习建模过程防止模型过拟合的10种有效方法:增加训练数据集交叉验证正则化合适的特征选择降低模型复杂度集成方法早停法EarlyStopping数据增强Dropout监控训练过程方法1:增加训练数据集增加更多的训练数据有助于防止过拟合,主要是因为更多的数据能够提供更全

【kafka实战】03 SpringBoot使用kafka生产者和消费者示例

本节主要介绍用SpringBoot进行开发时,使用kafka进行生产和消费一、引入依赖<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></de

【Java 基础篇】Java网络编程实战:P2P文件共享详解

Java网络编程是现代软件开发中不可或缺的一部分,因为它允许不同计算机之间的数据传输和通信。在本篇博客中,我们将深入探讨Java中的P2P文件共享,包括什么是P2P文件共享、如何实现它以及一些相关的重要概念。什么是P2P文件共享?P2P(Peer-to-Peer)文件共享是一种分布式计算模型,其中每个计算机或设备都可以

Java8实战-总结30

Java8实战-总结30并行数据处理与性能并行流正确使用并行流高效使用并行流小结并行数据处理与性能并行流正确使用并行流错用并行流而产生错误的首要原因,就是使用的算法改变了某些共享状态。下面是另一种实现对前n个自然数求和的方法,但这会改变一个共享累加器:publicstaticlongsideEffectSum(long

华为OD机试 - 特异性双端队列(Java 2023 B卷 100分)

目录专栏导读一、题目描述二、输入描述三、输出描述四、Java算法源码五、效果展示1、输入2、输出华为OD机试2023B卷题库疯狂收录中,刷题点这里专栏导读本专栏收录于《华为OD机试(JAVA)真题(A卷+B卷)》。刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天C

单例模式有几种写法?

作者:猴子007选自:https://monkeysayhi.github.io“你知道茴香豆的‘茴’字有几种写法吗?”纠结单例模式有几种写法有用吗?有点用,面试中经常选择其中一种或几种写法作为话头,考查设计模式和codingstyle的同时,还很容易扩展到其他问题。这里讲解几种笔者常用的写法,但切忌生搬硬套,去记“茴

基于python的在线文档管理系统vue

本课题使用Python语言进行开发。代码层面的操作主要在PyCharm中进行,将系统所使用到的表以及数据存储到MySQL数据库中,方便对数据进行操作本课题基于WEB的开发平台1.运行环境:python3.7/python3.8。2.IDE环境:pycharm+mysql5.7;3.数据库工具:Navicat114.硬件

热文推荐