本博客主要记录学习高翔老师视觉SLAM14讲的总结笔记,若有总结不对的地方,欢迎大家与我讨论。
- 特征点法中,描述子的计算与匹配会消耗大量的运算时间,所以引入直接法来计算特征点的匹配,从而利用对极约束、PnP、ICP来估计相机位姿。
- 直接法可分为光流法和直接法。
一、光流法
- LK光流为稀疏光流的一个典型代表
- 灰度不变假设:观测点投影像素不随位置和时间变化而发生变化,即在t时刻位于(x,y)处的像素为:
- 光流法用于跟踪角点,节省匹配的时间,再用PnP等方法来估计相机位姿。由灰度不变性可推导得出:
其中,设u=dx/dt,v=dy/dt,用于表示像素点的运动。LK光流通常假设某一个窗口内的像素具有相同的运动,即:
- 在实践中,常列下式作为代价函数优化迭代求解:
其中,(x,y)是第一副图像中某些特征点的像素坐标,是待优化量。由上式可知,关于的梯度是在第二幅图像中的的梯度。若用第一个图像的梯度 (x,y)来代替,则称为反向光流法,而的梯度是保持不变的。
- 多层光流:为了防止相机移动过快,导致优化迭代没有一个较好的初值,可以使用多层金字塔来计算,把上一层的追踪结果,作为下一层光流的初始值,这个过程也称为coarse-to-fine光流。
二、直接法
- 与光流法不同,直接法将直接估计相机的相对变化矩阵,而不匹配特征点。
- 仍然基于灰度不变假设,设相同三维路标点在不同相机位姿下的像素坐标为:
最小化光度误差:
其中T为变换矩阵。引入两个中间变量:q=TP,u=(1/z2)Kq。则e关于T的梯度为:
上式中,为u处的像素梯度,
由此,可推导出 J的雅克比矩阵为:
- 根据观测点P的来源,可分为三类直接法:稀疏直接法、半稠密直接法和稠密直接法,计算量也逐步增加。
- 由于图像是非凸函数,沿着像素梯度下降时,很容易陷入局部最优,只有相机运动很小时,才能减轻非凸性。
- 优点:节省特征点计算时间和匹配时间,只要由像素梯度即可,无需一定要具有角点特征的图像,可以构建半稠密或稠密地图。
- 缺点:(1)非凸性->多层金字塔可以缓解;(2)单个像素没有区分度->图像块,数量选择超过500个以上;(3)灰度值不变是一个很强的假设。