目录

3.1深度滤波简介

3.2 深度滤波分步骤详细介绍

3.2.1 计算极线

3.2.2 计算仿射矩阵

3.2.3 搜索匹配

3.2.4三角测量恢复深度以及匹配不确定性的计算

3.2.5 深度融合

3.2.6 平滑去噪


基本情况

题目:REMODE: Probabilistic, Monocular Dense Reconstruction in Real Time

出处:2014 ICRA

实验室主页:http://rpg.ifi.uzh.ch/research_dense.html

开源代码:https://github.com/uzh-rpg/rpg_open_remode

视频演示:https://www.youtube.com/watch?v=QTKd5UWCG0Q&feature=youtu.be 或者 https://www.bilibili.com/video/BV1Ty4y167Dk/

3.1深度滤波简介

SVO在建图部分采用的是深度滤波器,论文中并没有详细的介绍。深度滤波在SVO作者写的另一篇叫REMODE[1]的文章里,介绍了深度滤波的每一个步骤。REMODE[1]这篇文章讲的是利用svo提供的位姿,进行三维重建,属于渐进式三维重建。其过程和SVO深度滤波一样,只不过在REMODE里,实现用GPU进行了加速处理。

SVO深度滤波是利用一系列前后帧,完成对指定帧上像素深度的求取。用一些列帧,来求取指定帧上每个像素深度的原因是,在计算像素点深度时,单次匹配恢复的深度有误差,需要依靠多次深度测量值的融合,来恢复误差较小的深度值。SVO把像素的深度误差模型看做概率分布,有两个属性,一个是深度值服从高斯分布,另一个是局外点的概率服从Beta分布,同时融合这两种属性。

SVO深度滤波对深度进行渐进式融合(动态融合)。其过程可表述如下:

关键帧上选取像素点(SVO是fast角点,REMODE是梯度点),作为种子(seed,种子就是深度未收敛的像素点),每来一帧图像,融合更新一下之前提取的种子,直至种子的深度收敛,这是个动态过程,类似于滤波,大概这就是叫深度滤波的原因吧。如果新的一帧是关键帧,那么再次提取新的像素点作为种子。

就这样旧的种子不断收敛,新的种子不断增加,不断进行下去。

下面来探讨一下深度滤波的整个过程。

3.2 深度滤波分步骤详细介绍

对于一个种子,其每一次深度滤波(也叫深度融合,利用新的一帧来更新种子的深度值),都行需要经以下过程。

3.2.1 计算极线

关于极线的基本知识,本文不做介绍。对于每个种子,在当前帧计算极线的条件是:

<1>已知种子所在帧与当前帧的相对位姿

<2>已知种子的初始深度

条件<1>的作用是用来做匹配,由VO提供。

条件<2>的作用是缩小找匹配的搜索量。当种子新提取时,这个时候还没有深度值,用场景平均深度初始。

本文用z表示种子的深度,sigma2表示深度方差,sigma表示深度标准差。

极线的计算方法如下:

step1:

在深度延长线上,构造两个三维点P1,P2,这两个三维点来源同一个像素,唯一的不同就是深度,

分别为 P1(x,y,z- n*sigma),P2(x,y,z+ n*sigma),这里n可以调节,一般选择n=1,2,3(3sigma原则)。

Step2:

将P1,P2利用帧间位姿,投影至当前帧,投影点为u1,u2,连接u1,u2就是我们所要计算的极线。

SVO工程里,实现在Matcher.cpp里的findEpipolarMatchDirect()函数里。

REMODE工程里,实现在epipolar.cpp seedEpipolarMatchKernel()函数里。

3.2.2 计算仿射矩阵

为什么要计算仿射矩阵?

我们知道,同一张图像在经过旋转平移后,同一个场景在图像上的成像位置就发生了变换。

在像素做匹配时,我们需要用像素周围的信息(一般是矩形窗口)来描述本像素的特征。

设想一下,如果帧间图像发生了旋转,我们还用同样的窗口(当前帧的窗口坐标和种子所在帧窗口坐标一样)

来描述搜索点,是不是不太合适?

如上图,描述p的窗口w1在后帧上投影点为p’,我们在匹配p和p’时,是用蓝色窗口来描述p’呢,还是用红色窗口

答案肯定是红色窗口,那既然是红窗口,红色窗口怎么计算呢?

这就会用到仿射矩阵,SVO仿射矩阵是这样的计算的。

计算窗口的思路是先利用三点法计算出tk和tn两时刻图像的仿射变换矩阵,

然后再把窗口w1里的像素坐标逐一映射到图像tn里,这样映射的所有坐标就组成了窗口w2。

实现代码

3.2.3 搜索匹配

跟踪部分的匹配,是靠特征对齐完成的,不需要极线搜索,这是因为在深度和位姿都比较准确的情况下,

用特征对齐可以完成匹配。

但是,深度估计却不能这样干,它需要极线搜索,因为深度未知或者深度不确定性太大。

SVO选用ZMSSD,通过8*8矩形patch来描述像素,用于计算种子和当前帧搜索点的相似性。

实际上,在svo搜索匹配过程中,当计算的极线小于两个像素时,直接采用图像对齐,

因为这个时候深度不确定较小(可以通过极线的计算方式想一下为什么)。

否则,沿极线以为一个像素为步进单位搜索匹配。代码在findEpipolarMatchDirect()里,

3.2.4三角测量恢复深度以及匹配不确定性的计算

经过搜索匹配后,能够得到种子p以及种子p在当前帧上的匹配像素点p’,

通过三角测量,就可以恢复种字p的深度。

原理可以参考 http://blog.csdn.net/zhubaohua_bupt/article/details/74926111

实现部分:

多次三角测量的深度是为了,融合得到种子较准确的深。那么既然有融合,不同测量值肯定有不同权重。

不确定性就是用来计算权重的。在SVO中,深度的不确定被认为是,

在匹配时,误匹配一个像素所带来的最大深度误差。

其计算很简单,可以直接看论文。

3.2.5 深度融合

SVO的融合是不断利用最新时刻深度的观测值,来融合上一时刻深度最优值,直至深度收敛。如下图

深度数据具体融合过程的过程如下,

3.2.6 平滑去噪

这一步在SVO里没有,在REMODE里,作者加上这一步骤,对深度图有不错的去噪平滑效果,如下图。

这个就不细说了,因为这一步骤本身与SVO无关,有兴趣的话可以看一下论文[1],作者通过构造一个能量函数,

然后迭代优化能量函数,当能量函数最小时,就完成平滑去噪。

至此,我们探讨了SVO整个深度滤波。

REMODE论文:

[1] MatiaPizzoli,Christian Forster, and Davide Scaramuzza. REMODE: Probabilistic,monocular densereconstruction in real time. In International Conference onRobotics andAutomation (ICRA), pages 2609–2616, Hong Kong,China, June 2014.

SVO深度解析(三)之深度滤波(建图部分)相关推荐

  1. 综述|深度学习在SLAM定位与建图中的应用(近250篇参考文献)_3D视觉工坊的博客-CSDN博客

    综述|深度学习在SLAM定位与建图中的应用(近250篇参考文献)_3D视觉工坊的博客-CSDN博客

  2. 综述|深度学习在SLAM定位与建图中的应用(近250篇参考文献)

    作者丨Jasper@知乎 编辑丨Realcat  计算机视觉SLAM " 近年来深度学习被广泛应用于定位与建图中.相比于传统的手动建模方法,深度学习提供了一种数据驱动的解决方案,并逐步发展成 ...

  3. HyperBDR云容灾深度解析三:适配上云下云跨云多场景

    2022年信通院首次发布云容灾白皮书,这意味着随着企业上云加速,混合云场景增多,容灾上云方案逐步成为一些行业伙伴在考虑的新选择.本文从一些传统容灾应用出发,帮助大家普及云容灾的类型并拓展云容灾解决方案 ...

  4. 多激光雷达外参标定算法与源码解析(一):基于BLAM的建图模块

    前言 原理文字介绍略微简介,但是在代码注释中非常详细.我相信在代码中学习原理才能理解更加通透. 代码参考自livox sdk: gitcode 一.算法原理 二.源码解析 函数流:main->B ...

  5. 机器人操作系统ROS—深度相机+激光雷达实现vSLAM建图与导航 转载

    原文:机器人操作系统ROS-深度相机+激光雷达实现vSLAM建图与导航_wx5d23599e462fa的技术博客_51CTO博客 这次将带大家学习如何使用深度相机实现机器人的视觉SLAM建图及导航. ...

  6. #深度解析# SSR,MSE,RMSE,MAE、SSR、SST、R-squared、Adjusted R-squared误差的区别

    文章目录 概述 1. SSE 2. MSE 3. RMSE 4. MAE 5. R-squared 6. Adjusted R-squared 7 对比 MAE.MSE.RMSE.R-square.A ...

  7. JVM-整体结构深度解析(2)

    JVM-整体结构深度解析 运行时数据区总览图 栈区 线程栈总览图 线程栈 栈帧 局部变量表 操作数栈 动态链接 方法出口 线程栈JVM调优参数 本地方法栈 pc寄存器 堆区 方法区 线程共有 线程私有 ...

  8. 机器人学习--网友资料系列 激光SLAM建图、粒子滤波定位和位姿图优化

    一.移动机器人自主导航的前提是在未知环境中先构建地图 (目前市内很多用的2D激光雷达,构建栅格地图,相当于立体空间中的某个水平面高度的切面) 一般用的是2D 激光SLAM算法 构建概率栅格占用地图: ...

  9. 超强激光SLAM LIO-SAM!高精度机器人定位建图!

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 作者丨robot L@知乎 来源丨https://zhuanlan.zhihu.com/p/15339 ...

  10. 一小时让你成为点云建图小将(固定帧数法选取关键帧)

    创作时间:2021年11月1日 文章目录 摘要 建图原理 RGBD相机 1. 简介 2. 特点 TUM数据集 1. 简介 2. 特点 3. 下载 4. *教程 开源库 1. OpenCV 1.1. 简 ...

最新文章

  1. shell5.0密钥_8.使用Xshell5密钥登录liunx
  2. JVM - 深入剖析字符串常量池
  3. scala function从入门到理解
  4. 遗传优化算法优化LSTM-MSE
  5. 《Cocos2D-x权威指南》——第3章 Cocos2D-x中的核心类
  6. Atlas Resources
  7. qca9533的TPlink wr841N换openwrt固件的一点体会
  8. LA 3713 Astronauts
  9. cmake:cmake_policy命令
  10. UML学习_1_模型
  11. PS一些简单的非主流照片效果
  12. android11升级名单vivo,vivo新系统升级名单已经公布,第一批11部手机入选
  13. 浏览器预览html网址,在浏览器中预览网页
  14. Win11笔记本耗电大怎么解决?Win11耗电快怎么办?
  15. 阿玛机器人_豪华日本声优阵容,《战斗天赋解析系统》让你耳朵怀孕!
  16. 你了解PMP考试新考纲的内容吗?
  17. ug产品摆正高级技巧_UG NX如何摆正产品零件模型
  18. python-tkinter 官方文档
  19. 802.11成帧封装实现(五)
  20. int mysql是什么意思_MySQL数据类型 int什么意思

热门文章

  1. python爬虫学习之XPath基本语法
  2. 浅谈算法——莫比乌斯反演
  3. 百度ocr文字识别接口使用
  4. 创建一个jFinal项目
  5. MySQL防止重复插入记录SQL
  6. Nordic Blue Tooth
  7. 批处理获取操作系统版本信息
  8. iPhone 开源游戏引擎
  9. Windows中MySQL主从数据库搭建(三)
  10. 终结者:log4j的真正正确使用方式