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.在一些室外应用中,可能存在距离非常远,乃至无穷远处的点。我们的初始值中难以覆盖这些点,并且用高斯分布描述他们会有一些数值计算上的困难。(没彻底理解,为什么初始值中难以覆盖这些点?为什么用高斯分布描述他们会有数值困难,是因为数值过于小会造成巨大误差吗?)

  于是,逆深度应运而生。人们在仿真中发现,假设深度的倒数(也就是逆深度),为高斯分布是比较有效的。随后,在实际应用中,逆深度也具有更好的数值稳定性,从而逐渐成为一种通用的技巧。

 

上一篇:C#进阶系列——DDD领域驱动设计初探(五):AutoMapper使用


下一篇:Python学习——set集合的补充