VSLAM基础(九)————LK光流法与直接法

到目前slam前端部分基本快结束了~在这里再补上光流法与直接法。

我们之前介绍的都是基于特征点并计算描述子匹配的思路找到同名像点,然后通过射影几何的方法计算相机姿态。这种方法大体上已经很完善了,当然还是存在一些问题:特征点的提取、描述、匹配仍是slam里最耗时的部分;在一些特征稀疏的场景下(如白墙),可能找不到足够的匹配点;

于是,人们希望找到其他的方法来克服这种问题,有了以下的思路:

一、LK光流法

回顾一下基于特征点的方法,我们计算出特征点的描述子之后会进行匹配找到点对,而我们希望简化计算,于是有了光流法。

具体思路为:找到特征点后,我们不再计算描述子,而是通过光流估计特征点在图像上的运动,从而估计出特征点在下一帧上的位置,从而确定点对。所以光流法的核心是如何估计特征点的运动。

基于两个假设:

  1. 灰度不变假设:同一个空间点的像素灰度值,在各个图像中是不变的。
  2. 图像上某一个窗口内的像素具有相同的运动。

于是有以下推导:

VSLAM基础(九)————LK光流法与直接法

 

VSLAM基础(九)————LK光流法与直接法

从LK光流基于的两个假设我们可以知道这种方法并不适合相机运动大以及图像灰度变化剧烈(亮度差异等)的情况。不过这种方法避免了计算和匹配描述子的过程,可以加速基于特征点的视觉里程计算法。

二、直接法

假设:同一空间三维点在各个视角下测到的灰度值不变。

基于上述假设我们构造以下的目标函数:

VSLAM基础(九)————LK光流法与直接法

所以直接法的思路可以简单描述为:

  1. 选取一像素点u(可以为特征点,也可以是随机点)
  2. 确定这一像素点对应的3D坐标P
  3. 通过未知量R,t将P投影到另一帧上的像素点u‘
  4. 优化量像素点光度误差

于是问题简化为了一个非线性最小二乘求解的问题。

这里存在另外一个问题就是P的三维坐标怎么确定?

在RGBD相机中,我们可以获取到u点的深度于是就能得到P的坐标,但是在单目slam中,深度值得获取有些困难,目前还没了解透彻,以后搞清楚了再来更新这段。