SLAM中的逆深度参数化
参数化问题
在SLAM的建图过程中,把像素深度假设成了高斯分布。那么这么假设是否是合适的呢?这里关系到一个参数化的问题。
我们经常用一个点的世界坐标x,y,z三个量来描述它,这是一种参数化形式。我们认为x,y,z三个量都是随机的,它们服从三维的高斯分布。然而,在极线搜索中使用了图像坐标u,v和深度值d来描述某个空间点(即稠密建图)。我们认为u,v不动,而d服从(一维的)高斯分布,这是另一种参数化形式。那么这两种参数化形式有什么不同吗?我们是否也能假设u,v服从高斯分布,从而形成另一种参数数化形式呢?
不同的参数化形式,实际都描述了同一个量,也就是某个三维空间点。考虑到我们在相机看到某个点时,它的图像坐标u,v是比较确定的(u,v的不确定性取决于图像的分辨率)而深度值d则是非常不确定的。此时,若用世界坐标x,y,z描述这个点,那么根据相机当前的位姿,x,y,z三个量之间可能存在明显的相关性。反映在协方差矩阵中,表现为非对角元素不为零。而如果用u,v,d参数化一个点,那么它的u,v和d至少是近似独立的,甚至我们还能认为u,v也是独立的----从而它的协方差矩阵近似值为对角阵,更为简洁。
逆深度
逆深度(Inverse depth)是近年来SLAM研究中出现的一种广泛使用的参数化技巧。在极线搜索和块匹配中,我们假设深度值满足高斯分布。然而仔细想想会发现,深度的正态分布确实存在一些问题:
1.实际想表达的是:这个场景深度大概是5-10米,可能有一些更远的点,但近处肯定不会小于相机焦距(或者认为深度不会小于0).这个分布并不是像高斯分布那样,形成一个对称的形状。它的尾部可能稍长,而负数区域则为零。
2.在一些室外应用中,可能存在距离非常远,乃至无穷远处的点。我们的初始值中难以覆盖这些点,并且用高斯分布描述他们会有一些数值计算上的困难。(没彻底理解,为什么初始值中难以覆盖这些点?为什么用高斯分布描述他们会有数值困难,是因为数值过于小会造成巨大误差吗?)
于是,逆深度应运而生。人们在仿真中发现,假设深度的倒数(也就是逆深度),为高斯分布是比较有效的。随后,在实际应用中,逆深度也具有更好的数值稳定性,从而逐渐成为一种通用的技巧。
SLAM中的逆深度参数化的更多相关文章
- SLAM中的EKF,UKF,PF原理简介
这是我在知乎上问题写的答案,修改了一下排版,转到博客里. 原问题: 能否简单并且易懂地介绍一下多个基于滤波方法的SLAM算法原理? 目前SLAM后端都开始用优化的方法来做,题主想要了解一下之前基于 ...
- SLAM中的优化理论(一)—— 线性最小二乘
最近想写一篇系列博客比较系统的解释一下 SLAM 中运用到的优化理论相关内容,包括线性最小二乘.非线性最小二乘.最小二乘工具的使用.最大似然与最小二 乘的关系以及矩阵的稀疏性等内容.一方面是督促自己对 ...
- 视觉SLAM中相机详解
视觉SLAM中,通常是指使用相机来解决定位和建图问题. SLAM中使用的相机往往更加简单,不携带昂贵的镜头,以一定的速率拍摄周围的环境,形成一个连续的视频流. 相机分类: 单目相机:只是用一个摄像头进 ...
- 视觉SLAM中的数学基础 第二篇 四元数
视觉SLAM中的数学基础 第二篇 四元数 什么是四元数 相比欧拉角,四元数(Quaternion)则是一种紧凑.易于迭代.又不会出现奇异值的表示方法.它在程序中广为使用,例如ROS和几个著名的SLAM ...
- 视觉SLAM中的数学基础 第三篇 李群与李代数
视觉SLAM中的数学基础 第三篇 李群与李代数 前言 在SLAM中,除了表达3D旋转与位移之外,我们还要对它们进行估计,因为SLAM整个过程就是在不断地估计机器人的位姿与地图.为了做这件事,需要对变换 ...
- SLAM中的卡方分布
视觉slam中相邻帧特征点匹配时,动辄上千个特征点,匹配错误的是难免的,而误匹配势必会对位姿精度以及建图精度造成影响,那么如何分辨哪些是误匹配的点对儿呢?如果已知两帧的的单应矩阵,假设单应矩阵是没有误 ...
- Java中的逆变与协变
看下面一段代码 Number num = new Integer(1); ArrayList<Number> list = new ArrayList<Integer>(); ...
- javascript中对象的深度克隆
记录一个常见的面试题,javascript中对象的深度克隆,转载自:http://www.2cto.com/kf/201409/332955.html 今天就聊一下一个常见的笔试.面试题,js中对象的 ...
- 视觉SLAM中的数学基础 第四篇 李群与李代数(2)
前言 理解李群与李代数,是理解许多SLAM中关键问题的基础.本讲我们继续介绍李群李代数的相关知识,重点放在李群李代数的微积分上,这对解决姿态估计问题具有重要意义. 回顾 为了描述三维空间里的运动,我们 ...
随机推荐
- vue-cli3安装
1.如果原来安装过vue-cli,需要先卸载,命令:npm uninstall vue-cli -g :这步如果出现问题,可能是npm 的全局路径被更改, 运行如下命令:npm config set ...
- IIFE中的函数是函数表达式,而不是函数声明
下面的代码打印什么内容,为什么? var b = 10; (function b(){ b = 20; console.log(b); })(); 针对这题,在知乎上看到别人的回答说: 函数表达式与函 ...
- 数据可视化之powerBI技巧(十五)采悟:Power BI动态技巧:动态显示数据层级
今天给大家分享一个动态显示数据层级的技巧,效果如下: 无论想按什么维度.什么顺序查看分析数据,只需要选择不同的切片器组合就行了. 方法如下:01 | 把数据聚合为分析需要的最细粒度 本文假设最细分析粒 ...
- Python之爬虫从入门到放弃(十三) Scrapy框架整体的了解
这里是通过爬取伯乐在线的全部文章为例子,让自己先对scrapy进行一个整理的理解 该例子中的详细代码会放到我的github地址:https://github.com/pythonsite/spider ...
- Oracle Database Tools
The following are some products, tools, and utilities you can use to achieve your goals as a databas ...
- Burp Suite Extender Module - 扩展模块
模块功能: 在扩展模块可以通过使用自定义代码,进行Burp 的自定义操作. 1. Burp Extensions页面 2. BApp Store中可以购买和安装别人写好的扩展功能 3. 在APIs界面 ...
- echarts 实战 : 标题的富文本样式
官方文档在这一块交待的不是很清楚,记录一下. title:{ left:15, top:10, subtext:"AAA {yellow|316} BBB {blue|219}", ...
- 04 CMD规范基础使用详解
CMD模块规范 1.1 CMD规范说明 专门用于浏览器端,并且模块的加载是异步的,而且只有模块使用时才会加载执行: CMD规范的语法类似于Commonjs + AMD --定义模块使用AMD语法,暴露 ...
- abp vnext 开发快速入门 4 跨域设置
由于项目采用的微服务框架,前端与后端交互难免有跨域的问题.abp vnext实现跨域也很简单,只需要设置几处就可以了,这里只讲全局的跨域,至于局部的Action如何跨域请自行搜索.netcore 跨域 ...
- python-study-文件操作
# 一.文件操作的作用 :读取内容.写入内容.备份内容.... # 文件的基本操作,文件操作包含:打开.关闭.读.写.复制.... # 打开 读写 关闭 # 文件备份 # 文件和文件夹的操作 # 总结 ...