一、主要内容
SLAM中的视觉里程计分为两部分,一是特征点法,先提取特征点,把特征点看做三维空间中的不动点,根据特征点匹配关系进行位姿和深度估计,通过最小化重投影误差优化相机运动;二是不使用特征点,根据图像灰度直接估计的直接法。第七讲中讲了特征点法,本讲将介绍直接法。
直接法的问题
- 关键点的提取和描述子的构造很耗时。
- 忽略了特征点以外的信息。
- 在没有纹理或者纹理重复的地方,难以准确匹配。
解决思路
- 光流法。保留关键点,但不构造描述子。通过光流法跟踪关键点来回避构造描述子和匹配的开销。之后仍使用pnp,ICP等方法。
- 使用直接法计算关键点在下一帧的位置。这种方法仍需特征点,但同光流法一样,回避了描述子和匹配。
- 根据灰度信息使用直接法。这种方式不用关键点和描述子。
直接法的特点
- 只通过像素灰度估计相机运动,不构造特征点。
- 通过最小化光度误差进行优化,而非最小化重投影误差。
- 可构建稠密地图。
- 需要比较强的假设条件:灰度不变假设、窗口假设。
- 避免了特征计算时间和特征缺失的情况。
二、光流法
光流法描述了像素在图像中的运动。分为稀疏光流和稠密光流。这里介绍的LK是稀疏光流的代表方法。
1. LK光流
认为:来自相机的图像是随时间变化的,像素的灰度是关于时间和像素位置的函数I(x,y,t)I(x,y,t)I(x,y,t)。
灰度不变假设:同一个空间点的像素灰度值,在各个图像中是固定不变的。
问题:对于一个空间点,要估计它在ttt时刻的坐标(x,y)(x,y)(x,y)。
根据灰度不变假设,有:
I(x+dx,y+dy,t+dt)=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+dx,y+dy,t+dt)≈I(x,y,t)+∂I∂xdx+∂I∂ydy+∂I∂tdtI(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}dtI(x+dx,y+dy,t+dt)≈I(x,y,t)+∂x∂Idx+∂y∂Idy+∂t∂Idt
根据灰度不变假设,右边第二项为0:
∂I∂xdx+∂I∂ydy+∂I∂tdt=0\frac {\partial I}{\partial x}dx+\frac {\partial I}{\partial y}dy+\frac {\partial I}{\partial t}dt=0∂x∂I