介绍

​ 当时BA算法被广泛的使用在特征点法的系统中,作者认为这些方法丢弃了图像的大部分信息。并且在稠密重建中,使用完整的BA是做不到实时的。在这篇文章中,作者提出了一种改进BA算法(基于Surfels模型),可以用单个GPU就可以实现实时稠密重建。还有一个贡献就是提出一种基准数据集,在这种数据集下测试,SLAM系统都能有更好的结果。

相关工作

​ 与本文的提出的系统的差异

Frame-to-model tracking

​ 这种方法的相机位姿不再进行后续优化,会导致累积误差。

Map deformation

​ 没有使用所有可用信息。

Pose graph optimization

​ 虽然可以简化优化问题,但也只是近似BA。

Fragment-based optimization

​ 分层优化,虽然可以减少优化的变量,但也只是近似BA。

Indirect (feature-based) BA

​ 这里的ORB-SLAM2和Bundlefusion效果都很好。

Direct BA

​ 同时优化相机位姿和场景参数,但需要大量的计算时间,举了离线系统。

Benchmarking RGB-D SLAM

​ 作者提供了基准数据集,这种数据集是同步全局快门,对比现有的数据集,重建的结果更好。

数据表示

​ 作者使用场景表示是surfels,且只对关键帧进行BA。

​ 关键帧作者没有作严格的筛选,每10帧,选一帧作为关键帧。

​ 作者的surfels是一个圆盘,其包含3D圆心坐标(全局坐标系),表面的法向量,圆盘半径,描述子。 作者选择surfels是因为他们能够通过BA有效的进行融合和更新。

损失函数

​ 遍历所有的关键帧,所有建立好关联的面元,进行几何误差,光度误差优化。

​ 这两个误差项前面都有一个偏置 σ D − 1 \sigma_D^{-1} σD−1​和 σ p − 1 \sigma_p^{-1} σp−1​ ,对于第一个偏置,作者认为对于一个标定好的相机,不确定性只会出现在深度方向上,所以建立一个模型消除深度上的不确定性。第二个的不确定性在于反射,光照变化。

几何误差

​ 将面元中心3D坐标投影到第K帧关键帧的坐标系,进而投影到第K帧关键帧像素平面,在通过深度图的深度转换到K相机坐标系。点到面的icp。

光度误差

​ 这里I()不是直接用亮度值,而是用的亮度的梯度图的信息(对亮度变换更加鲁棒) 这里的I()采用双线性插值进行取亮度值。这里用两个点来做,这两个点是在以面元中心 p s p_s ps​为圆心的圆上,而且 s 1 − p s s_1-p_s s1​−ps​和 s 2 − p s s_2-p_s s2​−ps​正交。这里亮度值相减,本质上是梯度值,与以往的不同,这里的跨度是半径

算法流程

创建面元

​ 首先遍历所有关键帧,为每个关键帧创建surfels,将关键帧分为若干个4*4大小的网格,将所有面元投影到网格中,每个网格中至少有一个像素与一个面元关联,如果没有,则从深度图中随机选取一个深度创建一个面元s与之关联。

面元与像素点进行关联

​ 把面元的中心坐标投影到关键帧上,首先投影点要在这个关键帧中,

  1. 投影点具有深度测量;

  2. 深度测量值和面元的深度足够近似;

  3. 深度图的方向和面元的法向量足够近似;

    符合上述条件,那么就建立像素到面元的关联。

​ 面元的属性都是由创建它的那个像素计算而成。计算面元的中心 p s p_s ps​,法向量 n s n_s ns​,半径 r s r_s rs​,描述子 d s d_s ds​。

外点过滤

​ 像素与面元关联,那么这个像素需要符合一定条件:将这个像素点的3D坐标投影到其它关键帧,记录有多少关键帧可以观测到这个像素点,和没有观测到的次数。如果没观测到的次数比观测到次数多,或者观测到的次数小于一定阈值,则认为这个像素点是外点,则不对这个像素点进行关联一个面元。

面元的法向量更新

​ 平均所有与该面元关联的像素点的法向量,随后进行归一化。

面元的中心位置和描述子优化

​ 在更新完面元的法向量后,对面元的中心位置,描述子通过(1)式进行优化。这里还限制面元的中心的优化方向,只允许沿着面元的法向量方向进行优化,所以优化式子为 p s + t ⋅ n s p_s+t \cdot n_s ps​+t⋅ns​,只有一个优化量 t t t。
​ 描述子更新方法呢????

面元融合

​ 在BA的第一次迭代,开始融合具有相似属性的面元,比如法向量接近,位置接近。为了更快的找到需要融合的面元,将面元投影到所有的关键帧中,位于同一个4*4的网格中的面元进行融合。

关键帧的位姿优化

​ 对(1)式进行高斯牛顿法进行优化。

相机内参优化

​ 同样对(1)式进行高斯牛顿法进行优化,不过这次优化的是相机内参,同时,使用深度偏移模型,建立真实深度与偏移的深度联系

面元清理和更新半径

​ 与上面的外点过滤方法类似,将面元投影到每个关键帧,计算这个面元在关键帧集出现的次数。

​ 与法向量更新方法类似,与面元关联的所有像素点,都计算出一个半径,该面元半径更新为最小的半径。

前端

​ 本文的主要贡献是提供了一个后端稠密的BA方法。

预处理

​ 使用双边滤波,对深度图过滤。

里程计

​ 通过上一关键帧,估计当前帧的位姿,使用标准的直接法,其中包括几何误差,光度梯度误差。【参考文献】

回环检测

​ 当创建一个关键帧时(每10帧),执行回环检测。使用基于二进制特征,的词袋模型,找到当前关键帧k与历史哪个关键帧m最相似。首先通过特征匹配估计关键帧的初始相对位姿,然后通过直接法对齐。同时也对齐m-1m+1帧,如果这些对齐,都满足一定条件(变换和角度的差异),则接受这次回环。使用刚刚算出的三个相对位姿的平均相对位姿,使用位姿图优化,随后使用作者提出的BA优化。

基准数据集

动因

​ 作者认为,在流行的TUM RGB-D 数据集中,与真实世界都多多少少有偏差,因为采集数据时,RGB图和depth图的时间不同步,深度图畸变,不能准确获得对应像素点的深度,这会导致各种RGB-D SLAM系统的运行结果也会更加不准确。

创建基准数据集

​ 作者创建基准数据集使用两种方法,一种是作者采用同步装置、全局快门相机记录数据集;另一种是在原有数据集重建出3D模型后,通过数据集原始轨迹,重新渲染数据集。作者渲染出四种数据集,卷帘快门和异步的排列组合。基于全局快门同步数据集,卷帘快门数据集是通过估计卷帘快门的时间(第一行和最后一行的时间差)来模拟卷帘快门的效果,对于异步快门数据集,RGB图像的深度对应两张时间连续的深度图像之间深度图像。

BAD SLAM 解析相关推荐

  1. 计算机视觉学习日记1

    1.VIA图像标注工具 解析:VGG Image Annotator [VIA]是一款开源的图像标注工具,由Visual Geometry Group开发.可以在线和离线使用,可标注矩形.圆.椭圆.多 ...

  2. SLAM架构的两篇顶会论文解析

    SLAM架构的两篇顶会论文解析 一.基于superpoint的词袋和图验证的鲁棒闭环检测 标题:Robust Loop Closure Detection Based on Bag of SuperP ...

  3. 视觉SLAM开源算法ORB-SLAM3 原理与代码解析

    来源:深蓝学院,文稿整理者:何常鑫,审核&修改:刘国庆 本文总结于上交感知与导航研究所科研助理--刘国庆关于[视觉SLAM开源算法ORB-SLAM3 原理与代码解析]的公开课. ORB-SLA ...

  4. 转:SLAM算法解析:抓住视觉SLAM难点,了解技术发展大趋势

    SLAM(Simultaneous Localization and Mapping)是业界公认视觉领域空间定位技术的前沿方向,中文译名为"同步定位与地图构建",它主要用于解决机器 ...

  5. 【SLAM】VINS-MONO解析——回环检测和重定位

    9. 回环检测与重定位 本部分内容涉及到的代码大部分在pose_graph文件夹下,少部分在vins_estimator里. 原创内容,转载请先与我联系并注明出处,谢谢! 系列内容请点击:[SLAM] ...

  6. SLAM学习笔记(十九)开源3D激光SLAM总结大全——Cartographer3D,LOAM,Lego-LOAM,LIO-SAM,LVI-SAM,Livox-LOAM的原理解析及区别

    本文为我在浙江省北大信研院-智能计算中心-情感智能机器人实验室-科技委员会所做的一个分享汇报,现在我把它搬运到博客中. 由于参与分享汇报的同事有许多是做其他方向的机器人工程师(包括硬件.控制等各方面并 ...

  7. 【SLAM】LIO-SAM解析——后端优化mapOptimization(5)

    系列文章链接: [SLAM]LIO-SAM解析--流程图(1) [SLAM]LIO-SAM解析--数据预处理imageProjection(2) [SLAM]LIO-SAM解析--特征提取featur ...

  8. Semantic SLAM源码解析

    这个语义SLAM建图是基于ROS的 下面上源码解析: 首先从semantic_cloud.py出发,这里接收相机读入的topic, 会得到RGB图和深度图, 同时会起orb_slam2计算位姿,我们这 ...

  9. 视觉融合里程计SLAM算法SE2Lam解析-论文篇

    解析论文名称是:Visual-Odometric Localization and Mapping for Ground Vehicles Using SE(2)-XYZ Constraints 代码 ...

最新文章

  1. 63万张!旷视发布最大物体检测数据集Objects365 | 技术头条
  2. python colormap函数_python-使用由x,y位置定义的rgb值创建colormap
  3. Ranger中对hive添加policy字后,hive登录用户可用,hive密码不管用的问题解决,HiveServer2 Authentication Custom的编写
  4. Linux下mysql 5.x得到root密码后的另外一种利用方式
  5. Android之SharedPreferences 存储复杂对象
  6. 虚电路子网和数据报子网的比较
  7. 2.2 基本算法之递归和自调用函数 8758 2的幂次方表示 python
  8. C++笔记-QSslSocket::supportsSsl返回false(windows版的Qt不支持SSL)解决
  9. Git HEAD detached from XXX (git HEAD 游离) 解决办法
  10. 编译Windows版本ffmpeg:MingW方式失败
  11. 数学笔记——导数5(指数函数和对数函数的导数)
  12. 六十星系之25廉贞天相坐子午
  13. 【无标题】Vue长列表性能优化常用方案
  14. 51单片机使用PWM调速
  15. 学历,工作经验,火焰纹章
  16. Android开源 -- 开源的基于 Material Design设计的豆瓣的Android客户端“豆芽”
  17. [emWin]利用内存设备加速GIF图片显示——2021.03
  18. 我没去BAT,用了8年时间,从乙方变成了甲方
  19. 计算机毕业学游戏设计师,学游戏设计有前途吗
  20. BCD工艺、CMOS工艺、BiCMOS工艺

热门文章

  1. 最新的美国FBI犯罪心理变态测试题
  2. 如何在插入网线的情况下,使用wifi上网
  3. Unknown custom element: <HeaderTop> - did you register the component correctly?
  4. 使用chatGPT开发获取格点天气数据
  5. html div显示页面中间,使一个div始终显示在页面中间
  6. (8) PyQt 设计并实现【工厂扫码装箱系统】- Python实现 ZEBRA 斑马条码打印机 自动化打印标签
  7. eric6-21.11安装
  8. STM8硬件IIC从机
  9. Python把数据从Word(.docx)中读出来写入到Excel(.xlsx)中
  10. 信息安全技术——(十)安全审计与责任认定