视觉SLAM十四讲第八讲

第 8 讲 视觉里程计 2

本节目标

  1. 理解光流法跟踪特征点的原理。
  2. 理解直接法是如何估计相机位姿的。
  3. 使用 g2o 进行直接法的计算。
    一、直接法
    特征点法拥有如下的缺点:
    1.、关键点的提取与描述子的计算非常耗时。
    2、 使用特征点时,忽略了除特征点以外的所有信息。
    3.、相机有时会运动到特征缺失的地方,往往这些地方没有明显的纹理信息。
    为了克服特征点法的上述缺点而存在的。直接法根据像素的亮度信息,估计相机的运动,可以完全不用计算关键点和描述子,于是,既避免了特征的计算时间,也避免了特征缺失的情况。只要场景中存在明暗变化(可以是渐变,不形成局部的图像梯度),直接法就能工作。根据使用像素的数量,直接法分为稀疏、稠密和半稠密三种。相比于特征点法只能重构稀疏特征点(稀疏地图),直接法还具有恢复稠密或半稠密结构的能力。
    二、光流
    光流是一种描述像素随着时间,在图像之间运动的方法,随着时间的经过,同一个像素会在图像中运动,而我们希望追踪它的运动过程。计算部分像素运动的称为稀疏光流,计算所有像素的称为稠密光流。稀疏光流以 Lucas-Kanade 光流为代表,并可以在 SLAM 中用于跟踪特征点位置。
    1)LK光流
    在 LK 光流中,我们认为来自相机的图像是随时间变化的。图像可以看作时间的函数:I(t)。那么,一个在 t 时刻,位于 (x, y) 处的像素,它的灰度可以写成
    在这里插入图片描述
    灰度不变假设:同一个空间点的像素灰度值,在各个图像中是固定不变的。
    对于 t 时刻位于 (x, y) 处的像素,我们设 t + dt 时刻,它运动到 (x + dx, y + dy) 处。由于灰度不变,我们有:
    在这里插入图片描述
    对左边进行泰勒展开,保留一阶项,得:
    在这里插入图片描述
    因为我们假设了灰度不变,于是下一个时刻的灰度等于之前的灰度,从而
    在这里插入图片描述
    两边除以 dt,得:
    在这里插入图片描述
    其中 dx/dt 为像素在 x 轴上运动速度,而 dy/dt 为 y 轴速度,把它们记为 u, v。同时 ∂I/∂x 为图像在该点处 x 方向的梯度,另一项则是在 y 方向的梯度,记为 Ix, Iy。把图像灰度对时间的变化量记为 It,写成矩阵形式,有:
    视觉SLAM十四讲第八讲_第1张图片
    我们想计算的是像素的运动 u, v,但是该式是带有两个变量的一次方程,仅凭它无法计算出 u, v。因此,必须引入额外的约束来计算 u, v。在 LK 光流中,我们假设某一个窗口内的像素具有相同的运动。
    考虑一个大小为 w × w 大小的窗口,它含有 w2 数量的像素。由于该窗口内像素具有同样的运动,因此我们共有 w2 个方程:
    视觉SLAM十四讲第八讲_第2张图片
    于是整个方程为:
    视觉SLAM十四讲第八讲_第3张图片
    这是一个关于 u, v 的超定线性方程,传统解法是求最小二乘解。最小二乘在很多时候都用到过:
    视觉SLAM十四讲第八讲_第4张图片
    三、直接法
    P 是一个已知位置的空间点,根据 P 的来源,我们可以把直接法进行分类:
    1、 P 来自于稀疏关键点,我们称之为稀疏直接法。通常我们使用数百个至上千个关键点,并且像 L-K 光流那样,假设它周围像素也是不变的。这种稀疏直接法不必计算描述子,并且只使用数百个像素,因此速度最快,但只能计算稀疏的重构。
    2、 P 来自部分像素。如果像素梯度为零,整一项雅可比就为零,不会对计算运动增量有任何贡献。因此,可以考虑只使用带有梯度的像素点,舍弃像素梯度不明显的地方。这称之为半稠密(Semi-Dense)的直接法,可以重构一个半稠密结构。
    3.、P 为所有像素,称为稠密直接法。稠密重构需要计算所有像素(一般几十万至几百万个),因此多数不能在现有的 CPU 上实时计算,需要 GPU 的加速。
    最后,我们总结一下直接法的优缺点。大体来说,它的优点如下:
    • 可以省去计算特征点、描述子的时间。
    • 只要求有像素梯度即可,无须特征点。因此,直接法可以在特征缺失的场合下使用。比较极端的例子是只有渐变的一张图像。它可能无法提取角点类特征,但可以用直接法估计它的运动。
    • 可以构建半稠密乃至稠密的地图,这是特征点法无法做到的。
    另一方面,它的缺点也很明显:
    • 非凸性——直接法完全依靠梯度搜索,降低目标函数来计算相机位姿。其目标函数中需要取像素点的灰度值,而图像是强烈非凸的函数。这使得优化算法容易进入极小,只在运动很小时直接法才能成功。
    • 单个像素没有区分度。找一个和他像的实在太多了!——于是我们要么计算图像块,要么计算复杂的相关性。由于每个像素对改变相机运动的“意见”不一致。只能少数服从多数,以数量代替质量。
    • 灰度值不变是很强的假设。如果相机是自动曝光的,当它调整曝光参数时,会使得图像整体变亮或变暗。光照变化时亦会出现这种情况。特征点法对光照具有一定的容忍性,而直接法由于计算灰度间的差异,整体灰度变化会破坏灰度不变假设,使算法失败。针对这一点,目前的直接法开始使用更细致的光度模型标定相机,以便在曝光时间变化时也能让直接法工作。

你可能感兴趣的:(SLAM,计算机视觉)