SLAM学习心得——建图

1.建图

我们所谓的地图,即所有路标点的集合。一旦我们确定了路标点的位置,那就可以说我们完成了建图。

地图的作用:(1)定位 ;(2)导航; (3)避障; (4)重建; (5)交互

2. 稠密重建

单个图像中的像素,只能提供物体与相机成像平面的角 度以及物体采集到的亮度,而无法提供物体的距离(Range)。而在稠密重建,我们需要知道每一个像素点(或大部分像素点)的距离,大致上有以下几种解决方案:

1. 使用单目相机,利用移动相机之后进行三角化,测量像素的距离。

2. 使用双目相机,利用左右目的视差计算像素的距离(多目原理相同)。

3. 使用 RGB-D 相机直接获得像素距离。

使用 RGB-D 进行稠密重建往往是更常见的选择。而单目双目的好处,是在目前 RGB-D 还无法很好应用的室外、大场景场合中,仍能通过立体视觉估计深度信息。

3. 单目稠密重建

稠密深度估计问题中,匹配是很重要的一环:如何确定第一张图的某像素,出现在其他图里的位置,需要用到极线搜索块匹配技术

3.1.极线搜索与块匹配

                                                                              极线搜索的示意图

在特征点法中,通过特征匹配得到p2的位置,然而实际没有描述子,只能在极线上搜索和p1想的比较相似的点。(可能沿着极线一直走比较每个像素与p1的相似程度。)这就是极线搜索。

单个像素的亮度没有区分性,由此我们想到可以比较像素块,我们在 p1 周围取一个大小为 w×w 的小块,然后在极线上也取很多同样大小的小块进行比较,就可以一定程度上提高区分性。这就是所谓的块匹配

计算小块与小块间的差异,有不同的计算方法:

1. SAD(Sum of Absolute Difference)。顾名思义,即取两个小块的差的绝对值之和:

2. SSD。SSD 并不是说大家喜欢的固态硬盘,而是 Sum of Squared Distance(SSD)(平 方和)的意思:

3. NCC(Normalized Cross Correlation)(归一化互相关)。这种方式比前两者要复杂一些,它计算的是两个小块的相关性:

请注意,由于这里用的是相关性,所以相关性接近 0 表示两个图像不相似,而接近 1 才表示相似。前面两种距离则是反过来的,接近 0 表示相似,而大的数值表示不相似。

在极线上,计算了 A 与每一个 Bi 的相似性yo度量。为了方便叙述,假设我们用了 NCC,那么,我们将得到一个沿着极线的 NCC 分布。这个分布的形状严重取决于 图像本身的样子,例如图 13-3 那样。在搜索距离较长的情况下,我们通常会得到一个非凸 函数:这个分布存在着许多峰值,然而真实的对应点必定只有一个。在这种情况下,我们 会倾向于使用概率分布来描述深度值,而非用某个单一个的数值来描述深度。于是,我们 的问题就转到了,在不断对不同图像进行极线搜索时,我们估计的深度分布将发生怎样的 变化——这就是所谓的深度滤波器。

3.2. 高斯分布的深度滤波器

稠密深度的完整过程

1. 假设所有像素的深度满足某个初始的高斯分布;

2. 当新数据产生时,通过极线搜索和块匹配确定投影点位置;

3. 根据几何关系计算三角化后的深度以及不确定性;

4. 将当前观测融合进上一次的估计中。若收敛则停止计算,否则返回 2。

最后深度图趋于稳定

 

像素梯度

逆深度

4. RGB-D稠密建图

点云地图(Point_Cloud Map)

1. 在生成每帧点云时,去掉深度值太大或无效的点。

2. 利用统计滤波器方法去除孤立点。该滤波器统计每个点与它最近 N 个点的距离值的 分布,去除距离均值过大的点。这样,我们保留了那些“粘在一起”的点,去掉了孤 立的噪声点。

3. 最后,利用体素滤波器(Voxel Filter)进行降采样。由于多个视角存在视野重叠,在 重叠区域会存在大量的位置十分相近的点。这会无益地占用许多内存空间。体素滤波 保证在某个一定大小的立方体(或称体素)内仅有一个点,相当于对三维空间进行了 降采样,从而节省了很多存储空间。

 三角网格(Mesh),面片(Surfel)

通过体素(Voxel)建立占据网格地图(Occupancy Map)

SFM 泊松重建

 

八叉树地图(Octo-Map)

 

 

 

 

将三维空间建模为很多小方块(体素),每个面切成两片分割为8块。一直重复达到建模的最高精度。

对于本文的所有实践,可参考《视觉SLAM十四讲》建图部分,这里就不加以叙述了。

转载于:https://www.cnblogs.com/zp1285/p/11111253.html

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

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

相关文章

spark2

特点 通用 批处理 迭代式计算 交互查询 流处理 组件 spark core:任务调度 内存管理 容错机制 内部定义了RDDs 提供了很多API ,为其他组件提供底层的服务 spark sql:报表统计 streaming :从kafka接收数据做实时统计 mlib:mll 支持横向扩展&am…

spark 监控--WebUi、Metrics System(转载)

转载自:https://www.cnblogs.com/barrenlake/p/4364644.html Spark 监控相关的部分有WebUi 及 Metrics System; WebUi用于展示Spark 资源状态、Metrics System 整合的指标信息。 Ui相关流程 Spark集群启动之后,我们可以通过Web观察集群状态等信息&#x…

Hadoop64位版本安装后遇到的警告处理

在使用hadoop的过程中,会遇到一个警告,内容如下: WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable 对于这个问题网上很多说法是由于系统位数和所下载…

ueditor跨域上传图片文件(基于jsp框架、tomcat)

额,好久没有用到ueditor了,因为现在的相关工作很少涉及到富文本编辑;最近临时带了一个项目,里面要用到富文本编辑器,而且文件要统一上传到文件服务器上保存;应为以前用过ueditor就试着在网上着一些跨域保存…

精选Pycharm里6大神器插件

http://www.sohu.com/a/306693644_752099 上次写了一篇关于Sublime的精品插件推荐,有小伙伴提议再来一篇Pycharm的主题。相比Sublime,Pycharm要强大许多,而且是专为python设计的集成开发环境,所以无论是自身功能、环境配置还是使用…

数字信号处理实验(一)——DTFT

一、离散序列傅里叶变化——DTFT 1、DTFT公式 2、Matlab算法实现 function[X]dtft(x,n,w,flag)%计算离散时间付里叶变换 %[X]dtft(x,n,w) %X在w频率点上的DTFT数组 %xn点有限长度序列 %n样本位置向量 %w频率点位置向量X x * (exp(-j).^(n * w));3、DTFT一些画图代码 function …

修改hadoop中yarn的webui中显示的任务时间为中国时间

在${HADOOP_HOME}\share\hadoop\yarn目录下找到hadoop-yarn-common-x.x.x.jar,然后用winRAR打开; 打开以后结构如下: 进入webapps/static/目录,然后修改yarn.dt.plugins.js;做出如下修改: (1&a…

Trident API 概览

Trident API 概览 在网上看到了很多有TRIDENT相关API的翻译,看来看去,总觉得没有说清楚很多东西,所以自己结合使用的经验翻译了一篇出来;翻译完以后,也发现 在自己的翻译中也有很多地方是表达不清楚的不过多少感觉有些…

Trident State译文

Trident State 译文 Trident针对状态化的数据源的读写进行了一流的分装。State可以包含在拓扑中-例如,保存在内存中,有HDFS提供备份-也可以保存在一个外部的数据库中,像Memcached和Cassandra。针对以上的所有情况,Trident的API都…

软件之道:软件开发争议问题剖析

软件之道:软件开发争议问题剖析 基本信息 原书名: Making Software 原出版社: OReilly 作者: (美)Andy Oram Greg Wilson 译者: 鲍央舟 张玳 沈欢星丛书名: 图灵程序设计丛书出版社:人民邮…

Java 多线程-生产者、消费者

一、整体代码 ThreadDemo.java public class ThreadDemo { public static void main(String[] args) { Godown godown new Godown(0); Consumer c1 new Consumer(50, godown); Consumer c2 new Consumer(20, godown); Consumer c3 new Consumer(30, godown); Producer p1 …

HGOI20190707 题解

Problem A 钢铁侠的诞生 现在有$n$个数字$a_i \leq 10^9 $,然后取出$m$个数字,保证合法。 从小到大输出剩余的$n-m$个数字。 对于100%的数据$m\leq n \leq 3\times 10^5$ Sol : 直接map映射然后用iterator来遍历整个map输出答案即可。 复杂度大概是$O(n…

Java连载3-编译与运行阶段详解JRE,JDK,JVM关系

一、 1.JDK下载地址:https://www.oracle.com/technetwork/java/javase/downloads/jdk12-downloads-5295953.html 二、Java的加载与执行 1.Java程序运行包括: (1)编译阶段:检查Java源程序是否符合Java语法,符…

求最长回文串-从动态规划到马拉车之路(上)

要解决的问题: 给定一个字符串,要求求出这个字符串中的最长的回文串子串。 例子: cbddba的最长回文子串为 bddb cbdedba的最长回文子串为dbedb 由上面的例子可以看到,在考虑回文子串的问题时需要考虑奇偶性。因为奇回文关于中…

求最长回文串-从动态规划到马拉车之路(下)

预备知识&#xff1a; &#xff08;1&#xff09;在一个数轴上有两点i和j&#xff08;i<j&#xff09;关于点m对称&#xff0c;那么有 i 2m-j&#xff1b; 证明&#xff1a; 因为 i<j 且 i 和 j 关于 m 对称&#xff0c;那么有 &#xff08;i j&#xff09;/ 2 m 所…

Copy: 了解SQL Server锁争用:NOLOCK 和 ROWLOCK 的秘密

From http://blog.csdn.net/Atwind/archive/2007/10/19/1832844.aspx 关系型数据库&#xff0c;如SQL Server&#xff0c;使用锁来避免多用户修改数据时的并发冲突。当一组数据被某个用户锁定时&#xff0c;除非第一个用户结束修改并释放锁&#xff0c;否则其他用户就无法修改…

react-json渲染

在js文件内 //定义react组件 import React from react; import ReactDom from react-dom import ./components/assets/taobao.cssclass TaoBao extends React.Component{state{list:[{title:女装,href:javescript:;,hot:false,child:[{title:衬衫,href:javescript:;,hot:false}…

pageContext对象

这个对象代表页面上下文&#xff0c;该对象主要用于访问JSP之间的共享数据。使用pageContext可以访问page、request、session、application范围的变量。 pageContext是PageContext类的实例&#xff0c;它提供了如下两个方法来访问page、request、session、application范围的变量…

noi.ac #543 商店

我们考虑可并堆维护&#xff0c;从深到浅贪心选取。 用priority_queue启发式合并的话&#xff0c;是60pts: #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<cmath> #include<queue> #include<ct…

软件设计师--文件索引

问题&#xff08;题目&#xff09;如下图所示&#xff1a;这道题最中要的是理解什么是直接索引、一级间接索引、二级间接索引&#xff1a; 直接索引&#xff1a;地址项直接指向文件块 一级间接索引&#xff1a;地址项&#xff08;一层&#xff09;指向存放地址项&#xff08;二…