《视觉SLAM十四讲》学习笔记-光流法原理

《视觉SLAM十四讲》学习笔记-光流法原理

直接法的根源

特征点法存在的问题:
- 关键点与描述子计算非常耗时;
- 忽略除特征点外的其他所有信息;
- 如何处理特征缺失的问题。

克服特征点法的几种思路:
* 保留特征点,只计算关键点,不计算描述子,用光流法跟踪特征点的运动;
* 保留特征点,只计算关键点,不计算描述子,用直接法计算特征点在下一时刻图像的位置;
* 既不计算关键点也不计算描述子,根据像素灰度的差异直接计算相机运动。

后两种为直接法.

光流法(Optical Flow)

分为两种:
- 计算部分像素运动的:稀疏光流,以Lucas-Kanade为代表。
- 计算所有像素运动的:稠密光流。

Lucas-Kanade光流原理

前提:同一个空间点的像素灰度值,在各个图像中是固定不变的(灰度不变假设).
t时刻位于(x,y)处的像素,设t+dt的位置为(x+dt,y+dt),依假设条件有:

I(x+dx,y+dy,t+dt)=I(x,y,t)

对左边进行泰勒展开,有:
I(x+dx,y+dy,t+dt)I(x,y,t)+Ixdx+Iydy+Itdt

依据假设条件,有:
Ixdx+Iydy+Itdt=0

整理得到:
Ixdxdt+Iydydt=It

不妨记:
dxdt=u,   dydt=v,   Ix=Ix,   Iy=Iy

写成矩阵形式有:

[IxIy][uv]=It

这是一个带有两个变量的一次方程,只有一个点是无法计算uv.
LK的做法是假设某一个窗口内的像素具有相同的运动。假设窗口大小为w×w, 则有w2个像素,所以共有w2个方程:

[IxIy]k[uv]=Itk,k=1,,w2.

A=[[Ix,Iy]1[Ix,Iy]k],b=[It1Itk]

则方程可变为:

A[uv]=b

这是一个超定线性方程,采用最小二乘解:

[uv]=(AA)1Ab

即可得到u,v.

光流跟踪的特点:
- 加速基于特征点的视频里程计算法
- 需要相机运动较慢

直接法原理

设空间点P的世界坐标为[X,Y,Z], 它在两个相机上成像的非齐次坐标为p1,p2。问题为计算第一个相机到第二个相机的相对位姿变换. 思路为根据当前相机的位姿估计值来寻找p2的位置。

以第一个相机为相对参考系,第二个相机的旋转和平移为R,t(李代数为ξ). 另外两个相机的内参K相同,所以投影方程为:

p1=[uv1]1=1Z1KPp2=[uv1]2=1Z2K(RP+t)=1Z2K(exp(ξ)P)1:3

其中Z1P的深度,Z2P在第二个相机坐标系下的深度,也是RP+t的第三个坐标值。

目标是最小化光度误差:

e=I1(p1)I2(p2)

优化方程可写为:
minξJ(ξ)=e2

假设有N个空间点Pi, 则整个相机位姿问题为:
minξJ(ξ)=i=1Neiei,  ei=I1(p1,i)I2(p2,i)

这里的优化变量为相机位姿ξ.使用李代数上的扰动模型,给exp(ξ)左乘一个小扰动exp(δξ):

e(ξδξ)=I1(1Z1KP)I2(1Z2Kexp(δξ)exp(ξ)P)I1(1Z1KP)I2(1Z2K(1+δξ)exp(ξ)P)=I1(1Z1KP)I2(1Z2Kexp(ξ)P+1Z2Kδξexp(ξ)P)

为简化上式,记
q=δξexp(ξ)Pu=1Z2Kq

这里q的含义为P在扰动后位于第二个相机坐标系下的坐标,而u为对应的像素坐标。

对上式进行一阶泰勒展开:

e(ξδξ)=I1(1Z1KP)I2(1Z2Kexp(ξ)P+u)I1(1Z1KP)I2(1Z2Kexp(ξ)P)I2uuqqδξδξ=e(ξ)I2uuqqδξδξ

上式中:
- I2uu处的像素梯度
- uq为关于相机坐标系下的三维点的导数。根据前一节介绍, 记q=[X,Y,Z]:
uq=[uXuYuZvXvYvZ]=[fxZ0fxXZ20fyZfyYZ2]

qδξ是变换后的三维点对变换的导数,在李代数中有详细介绍:

qδξ=[I,q]

注意到后两项只与三维点相关,而与图像无关,所以经常把它们合在一起:
uδξ=[fxZ0fxXZ2fxXYZ2fx+fxX2Z2fxYZ0fyZfyYZ2fyfyY2Z2fyXYZ2fyXZ]

所以误差相对于李代数的Jacobi矩阵为:
J=I2uuδξ

对于N个点的问题,我们可以用这方法计算优化的Jacobi矩阵,然后用G-N或L-M计算增量,迭代求解。

上面的推导中, P是一个已知位置的空间点,根据来源,可以分为以下几类:
- 若来自于稀疏关键点,称为稀疏直接法
- 若来自于部分像素,称为半稠密(Semi-Dense)直接法
- 若来自于所有像素,称为稠密直接法

总结

直接法总结:
优点有:
- 省去计算特征点、描述子的时间
- 有像素梯度即可,无须特征点
- 可构建稠密或稠密的地图,是特征点无法做到的

缺点:
- 非凸性
- 单个像素没有区分度
- 灰度值不变是很强的假设