slam14讲之13讲--建图

12 篇文章 0 订阅

论文推荐:

  1. 块匹配度量方法:1)Evaluation of cost functions for stereo matching
  2. 我们会倾向于使用概率分布来描述深度值(1、极线搜索中,有太多峰值,到底谁才是正确的?;2、Maybe,我们没办法对所有的像素点都做匹配来估计深度,这样no-realtime)。对像素点深度的估计,本身亦可建模为一个状态估计问题。对于滤波器求解这个问题来说,将首先假设深度服从什么样的分布:1)Svo: Fast semi-direct monocular visual odometry;2)Video-based, real-time multi-view stereo;3)Semi-dense visual odometry for a monocular camera
  3. 单目稠密重建实践中使用的数据集– REMODE的测试数据集。它提供了一架无人机采集的单目俯视图像,共有 200 张,同时提供了每张图像的真实位姿。来自于:1)Real-time camera tracking:When is high frame-rate best?;2)Remode: Probabilistic, monocular dense reconstruction in real time,
  4. 稠密建图的过程中,我们会将深度视作一种概率分布,从而作出假设。将u,v作为定值,视d服从某种分布(在前面的章节中,我们经常用一个点的世界坐标 x; y; z 三个量来描述空间点,这是一种参数化形式。),这也是一种参数化形式。逆深度(Inverse depth)是近年 SLAM 研究中,出现的一种广泛使用的参数化技巧(逆深度即深度的倒数,用高斯分布来表示逆深度的效果更好)。:1)Unified inverse depth parametrization for monocular slam;2)Inverse depth parametrization for monocular slam
  5. 更加符合实时地图建立需要的方法(在实际环境中,运动物体的普遍存在,使得点云地图变得不
    够实用):八叉树。1)Octomap: An efficient probabilistic 3d mapping framework based on octrees

建图

首先来看地图的用处有哪些:
  1. 定位。定位是地图的一个基本功能。在VO部分,我们可以利用稀疏地图来实现定位(就像人看到一个路标,从而确定自己的方位)。更进一步,我们还希望能够把地图保存下来,让机器人在下次开机后依然能在地图中定位,这样只需对地图进行一次建模,而不是每次启动机器人都重新做一次完整的 SLAM。
  2. 导航。导航过程,需要知道地图中哪些地方不可通过,而哪些地方是可以通过的。那这就需要稠密地图,且包含纹理信息。
  3. 避障。它与导航类似,但更注重局部的、动态的障碍物的处理。
  4. 重建。可以利用 SLAM 获得周围环境的重建效果,并把它展示给其他人看。
  5. 交互。交互主要指人(机器人)与地图之间的互动。
立体视觉

我们将,单目相机利用三角化、双目相机利用视差计算像素深度的方法进行的稠密重建,这种方式称为立体视觉(Stereo Vision)
使用 RGB-D 进行稠密重建往往是更常见的选择。而单目双目的好处,是在目前 RGB-D还无法很好应用的室外、大场景场合中,仍能通过立体视觉估计深度信息

单目

在前文中,我们提到过单目相机计算深度的方法——三角测量,但这是基于描述子匹配的。但是我们知道,描述子的计算与匹配是相当耗时的,在稠密地图中,便是需要对每个像素点进行计算匹配,显然这并不实时。因而,我们提出:如何快速匹配?

极线搜索与块匹配

在这里插入图片描述
简单介绍原理:在得到位姿估计的前提下1、 假设我们在一帧中只估计5到50米范围内的像素的深度(只绘制这个范围的地图)。那么如图,p1对应的空间点一定在O1p1射线上,由于我们假设了深度范围d,由相似性可知,在平面2上,必然有与其对应的一条有限长线段,2、 且空间点P在成像平面O2上的坐标也应该在这条直线上(极线) 。从头(5m处)开始搜索,直到找到最为相似的点 ,这个过程称为极线搜索3、 再应用三角测量。
我们关注到,前文提到“最为相似的点”,怎样判断呢?在直接法的讨论中我们也知道,比较单个像素的亮度值并不一定稳定可靠。我们在 p1 周围取一个大小为 w × w 的小块,然后在极线上也取很多同样大小的小块进行比较 ,就可以一定程度上提高区分性。这就是所谓的块匹配
最后,如何计算小块与小块间的差异呢?存在若干种不同的计算方法:

  1. SAD(Sum of Absolute Difference)。顾名思义,即取两个小块的差的绝对值之和:
    在这里插入图片描述

  2. SSD。 SSD 并不是说大家喜欢的固态硬盘,而是 Sum of Squared Distance(SSD)(平方和)的意思:
    在这里插入图片描述

  3. NCC(Normalized Cross Correlation)(归一化互相关)。
    在这里插入图片描述
    另外,除了这些简单版本之外,我们可以先把每个小块的均值去掉,称为去均值的 SSD、去均值的 NCC 等等。相关论文,有放在文章最前面。

深度滤波器(很重要)

这里我们要使用很多次三角测量让深度估计收敛,而不仅是一次。我们希望深度估计,能够随着测量的增加,从一个非常不确定的量,逐渐收敛到一个稳定值。这就是深度滤波器技术
为了方便叙述,假设我们用了 NCC,那么,我们将得到一个沿着极线的 NCC 分布。这个分布的形状严重取决于图像本身的样子,例如图 13-3 那样。在搜索距离较长的情况下,我们通常会得到一个非凸函数:这个分布存在着许多峰值,然而真实的对应点必定只有一个。在这种情况下,我们会倾向于使用概率分布来描述深度值,即P(d),而非用某个单一个的数值来描述深度。于是,我们的问题就转到了,在不断对不同图像进行极线搜索时,我们估计的深度分布将发生怎样的变化——这就是所谓的深度滤波器

在这里插入图片描述
设某个像素点的深度 d 服从高斯分布(在一次深度求解过程中,这个分布就是可求的):
在这里插入图片描述
而每当新的数据(类似的)到来,我们都会观测到它的深度。同样的,假设这次观测亦是一个高斯分布:
在这里插入图片描述
于是,我们的问题是,如何使用观测的信息,更新原先 d 的分布。这正是一个信息融合问题。根据附录 A,我们明白两个高斯分布的乘积依然是一个高斯分布。设融合后的 d的分布为 N(µfuse; σfuse 2 ),那么根据高斯分布的乘积,有
在这里插入图片描述
回到13.4中,我们如何从深度求解过程中,得到这个分布的µ; σ(均值和方差)
文献[3] 考虑了几何不确定性和光度不确定性二者之和,而 [2] 则仅考虑几何不确定性。我们暂时只考虑由几何关系带来的不确定性。现在,假设我们通过极线搜索和块匹配,确定了参考帧某个像素在当前帧的投影位置。那么,这个位置对深度的不确定性有多大呢?
在这里插入图片描述
考虑某次极线搜索,我们找到了 p1 对应的 p2 点,从而观测到了 p1的深度值,认为 p1 对应的三维点为 P。从而,可记 O1P 为 p, O1O2 为相机的平移 t,O2P 记为 a。并且,把这个三角形的下面两个角记作 α; β。现在,考虑极线 l2 上存在着一个像素大小的误差,使得 β 角变成了 β′,而 p 也变成了 p′,并记上面那个角为 γ。我们要问的是,这一个像素的误差,会导致 p′ 与 p 产生多大的差距呢?
我们来列写这个量之间的几何关系。显然有:
在这里插入图片描述
对 p2 扰动一个像素,将使得 β 产生一个变化量 δβ,由于相机焦距为 f,于是:
在这里插入图片描述
由此,我们确定了由单个像素的不确定引起的深度不确定性。如果认为极线搜索的块匹配仅有一个像素的误差,那么就可以设:在这里插入图片描述
当然,如果极线搜索的不确定性大于一个像素,我们亦可按照此推导来放大这个不确定性。接下来的深度数据融合(更新µ; σ),已经在前面介绍过了。在实际工程中,当不确定性小于一定阈值之后,就可以认为深度数据已经收敛了。
综上所述,我们给出了估计稠密深度的一个完整的过程:
在这里插入图片描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
SLAM (Simultaneous Localization and Mapping) 是一种将自主车辆或机器人中的传感器数据与环境地相结合,实现同时定位和的技术。WAN ZHENG DAIMA 指的是完整的代码,意思是指SLAM14课程中提供了完整的代码实现。 SLAM14是由张正友教授主的一门关于SLAM的公开课程。这门课程整合了数十年的研究成果和函数库,提供了SLAM算法的理论基础和实际操作的演示。在这门课程中,学习者可以学到SLAM算法的原理与实现方法,并通过实例和代码来加深对SLAM的理解。 通过学习SLAM14的完整代码,我们可以深入了解SLAM的数学模型及其实际应用。课程中提供的代码可以帮助学习者快速上手,并且通过实践项目来加深对SLAM算法的理解。这些代码涵盖了从传感器数据获取、特征提取、数据关联、位姿估计、地更新等关键步骤,帮助我们理解SLAM的整个流程。 同时,学习SLAM14的完整代码也对于研究者和开发者来说非常有益。通过学习代码,我们可以掌握SLAM算法背后的原理,了解不同方法的优劣,并根据实际需求进行调整和改进。这对于开展SLAM相关的研究和项目开发具有重要意义。 总之,SLAM14课程提供的完整代码为学习者和开发人员提供了一个全面了解SLAM的机会。通过学习和实践,我们可以深入理解SLAM的原理和实现方法,并将其应用于实际项目中。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

vigigo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值