视觉SLAM十四讲-第八讲笔记

一、主要内容

SLAM中的视觉里程计分为两部分,一是特征点法,先提取特征点,把特征点看做三维空间中的不动点,根据特征点匹配关系进行位姿和深度估计,通过最小化重投影误差优化相机运动;二是不使用特征点,根据图像灰度直接估计的直接法。第七讲中讲了特征点法,本讲将介绍直接法。

直接法的问题

  • 关键点的提取和描述子的构造很耗时。
  • 忽略了特征点以外的信息。
  • 在没有纹理或者纹理重复的地方,难以准确匹配。

解决思路

  • 光流法。保留关键点,但不构造描述子。通过光流法跟踪关键点来回避构造描述子和匹配的开销。之后仍使用pnp,ICP等方法。
  • 使用直接法计算关键点在下一帧的位置。这种方法仍需特征点,但同光流法一样,回避了描述子和匹配。
  • 根据灰度信息使用直接法。这种方式不用关键点和描述子。

直接法的特点

  • 只通过像素灰度估计相机运动,不构造特征点。
  • 通过最小化光度误差进行优化,而非最小化重投影误差。
  • 可构建稠密地图。
  • 需要比较强的假设条件:灰度不变假设、窗口假设。
  • 避免了特征计算时间和特征缺失的情况。

二、光流法

光流法描述了像素在图像中的运动。分为稀疏光流和稠密光流。这里介绍的LK是稀疏光流的代表方法。

1. LK光流

认为:来自相机的图像是随时间变化的,像素的灰度是关于时间和像素位置的函数 I ( x , y , t ) I(x,y,t) I(x,y,t)
灰度不变假设:同一个空间点的像素灰度值,在各个图像中是固定不变的。
问题:对于一个空间点,要估计它在 t t t时刻的坐标 ( x , y ) (x,y) (x,y)
根据灰度不变假设,有:
I ( x + d x , y + d y , t + d t ) = I ( x , y , t ) I(x+dx,y+dy,t+dt)=I(x,y,t) I(x+dx,y+dy,t+dt)=I(x,y,t)
对左边泰勒展开:
I ( x + d x , y + d y , t + d t ) ≈ I ( x , y , t ) + ∂ I ∂ x d x + ∂ I ∂ y d y + ∂ I ∂ t d t I(x+dx,y+dy,t+dt)≈I(x,y,t)+\frac {\partial I}{\partial x}dx+\frac {\partial I}{\partial y}dy+\frac {\partial I}{\partial t}dt I(x+dx,y+dy,t+dt)I(x,y,t)+xIdx+yIdy+tIdt
根据灰度不变假设,右边第二项为0:
∂ I ∂ x d x + ∂ I ∂ y d y + ∂ I ∂ t d t = 0 \frac {\partial I}{\partial x}dx+\frac {\partial I}{\partial y}dy+\frac {\partial I}{\partial t}dt=0 xIdx+yIdy+tIdt=0
变换得:
∂ I ∂ x d x d t + ∂ I ∂ y d y d t = − ∂ I ∂ t \frac {\partial I}{\partial x}\frac{dx}{dt}+\frac {\partial I}{\partial y}\frac{dy}{dt}=-\frac {\partial I}{\partial t} xIdtdx+yIdtdy=tI

  • ∂ I ∂ x \frac {\partial I}{\partial x} xI:像素灰度在x方向的梯度,记为 I x I_x Ix
  • ∂ I ∂ y \frac {\partial I}{\partial y} yI:像素灰度在y方向的梯度,记为 I y I_y Iy
  • d x d t \frac{dx}{dt} dtdx:x方向的速度,记为u
  • d y d t \frac{dy}{dt} dtdy:y方向的速度,记为v
  • ∂ I ∂ t \frac {\partial I}{\partial t} tI:图像灰度关于时间的变化,记为 I t I_t It

即:
I x u + I y v = − I t I_xu+I_yv=-I_t Ixu+Iyv=It
这里未知量是: u , v u,v u,v
使用一个像素点无法求出 u , v u,v u,v,因此需要多个方程共同约束,即引入多个像素点,这些点的运动是一样的。
窗口假设:某一个窗口内的像素具有相同的运动。
写成矩阵形式,是一个超定线性方程,最小二乘可解。

2. 光流法特点

  • 因为窗口假设,光流法只对微小运动有效(相机运动慢或采集频率高)。
  • 角点处稳定,边缘处会滑动。
  • 很少误匹配,但可能漏匹配。

三、直接法

1.直接法的推导

已知:三维点在第一个坐标系下的三维坐标,两张图像的灰度值,三维点投影在第一张图像上的归一化坐标 p 1 p_1 p1,一个不准确的位姿初始值。
未知: p 1 p_1 p1在第二张图像中的位置 p 2 p_2 p2
目标:优化位姿的估计。
思想:先初始化一个不准确的位姿,计算 p 2 p_2 p2,根据 p 2 p_2 p2 p 1 p_1 p1的灰度值差异,调整位姿。
假设:灰度不变假设
误差度量:光度误差 e e e

使用李代数表示相机运动,最小化误差的二范数,得到优化问题:
m i n ϵ J ( ϵ ) = ∑ i = 1 N e i T e i , e = I 1 ( p 1 ) − I 2 ( p 2 ) min_\epsilon J(\epsilon)=\sum_{i=1}^Ne_i^Te_i,e=I_1(p_1)-I_2(p_2) minϵJ(ϵ)=i=1NeiTeie=I1(p1)I2(p2)
优化目标:最小化所有点的光度误差
优化变量:相机运动 ϵ \epsilon ϵ

使用李代数下的扰动模型,求误差关于相机运动的导数,最终得到一阶导数:
e ( ϵ + δ ϵ ) = e ( ϵ ) − ∂ I 2 ∂ u ∂ u ∂ q ∂ q ∂ δ ϵ δ ϵ e(\epsilon + \delta \epsilon)=e(\epsilon)-\frac{\partial I_2}{\partial u}\frac{\partial u}{\partial q}\frac{\partial q}{\partial \delta \epsilon} \delta \epsilon e(ϵ+δϵ)=e(ϵ)uI2quδϵqδϵ
q q q是扰动后,点 p p p在第二个坐标系下的坐标, u u u是像素坐标。
一阶导数中:

  • ∂ I 2 ∂ u \frac{\partial I_2}{\partial u} uI2:扰动后像素梯度。
  • ∂ u ∂ q \frac{\partial u}{\partial q} qu:投影方程关于相机坐标系下三维点的导数(内参?)
  • ∂ q ∂ δ ϵ \frac{\partial q}{\partial \delta \epsilon} δϵq:扰动后的三维点对于扰动的导数。

得到雅克比矩阵
J = − ∂ I 2 ∂ u ∂ u ∂ q ∂ q ∂ δ ϵ δ ϵ J=-\frac{\partial I_2}{\partial u}\frac{\partial u}{\partial q}\frac{\partial q}{\partial \delta \epsilon} \delta \epsilon J=uI2quδϵqδϵ

之后使用GN,LM等优化方法求解最优的 ϵ \epsilon ϵ即可。

你可能感兴趣的:(SLAM)