终于来到第8讲了。
第七讲中的特征点法需要计算特征点,计算量大;如果找不到特征点方法就失效了;忽略了特征点以外的信息。
第八讲介绍光流法和直接法,避免使用特征点。
1. 光流
光流是一种描述像素随时间在图像之间运动的方法。
如图8-1所示一个像素会随着时间的流逝进行运动,每一时刻的位置都有所变化,光流法就是去追踪像素每一时刻的位置变化,来还原运动过程。
光流法中有一条基本假设:
灰度不变假设:同一个空间点的像素灰度值,在各个图像中是固定不变的。
意思是说图8-1中红色框框的像素点,在
计算部分像素运动称为悉数光流,以Lucas-Kanade法为代表;计算所有像素运动的称为稠密光流。下面介绍的是LK光流法。
根据前面的描述,可以把图像看成是时间的函数,把一个t时刻处于(x,y)位置像素的灰度记为I(x,y,t),经过dt时间后它运动到(x+dx, y+dy)处。根据灰度不变假设有:
对变化后的灰度值进行一阶泰勒展开,有:
根据灰度不变假设可以得到:
整理得到:
其中,
2. 直接法
如图8-3所示,已知相机内参K,物体P的3D坐标,分别知道第1帧和第2帧上的投影坐标
直接法的思路是:根据灰度不变假设,对于第1帧中的
根据目前的已知量,可以计算第1帧的像素坐标为
我们的目标函数为:
扰动模型求导:
定义中间变量:
其中,
由此求出了一阶导数也就是雅各比矩阵,根据雅各比矩阵进行迭代求解。
关于P,如果来自于稀疏关键点,称为稀疏直接法;如果来自于部分梯度明显的像素,称为半稠密的直接法(如果梯度不明显,雅各比矩阵为0);如果是所有像素,称为稠密直接法。
3. 直接法讨论
直接法是根据图像灰度的变化(梯度)来寻找对应点的,比如图8-6,图像1中P1点的灰度值为229,目标是找到图像2中灰度值和p1相近的点。在P1周围沿着梯度方向搜索,第一次找到P2,继续搜索找到P2' 发现很合适,进行更新,如此迭代。
直接法的问题和梯度下降法类似,可能会陷入局部最优解。如图8-7所示,图像本身通常是一个强烈的非凸函数,可能在搜索最优点时会找到附近的一个局部最优解。
为了避免这个问题,可以缩小范围,采用图像块,使用更复杂的差异度量方式等。
直接法的优点是:快,只要求像素梯度,能构建半稠密或稠密地图;缺点是:图像具有非凸性,单个像素区分度低需要计算图像块,灰度值不变假设可能不成立。
[1] 《视觉SLAM十四讲从理论到实践》 高翔,张涛