一、直接法
使用特征点估计相机运动的缺点:
1、关键点的提取与描述子的计算非常耗时。SIFT无法在CPU上实时计算。
2、使用特征点,忽略了除去特征点以外的所有信息。丢弃了大部分可能有用的图像信息。
3、相机有时会运动到特征缺失的地方,如白墙,我们可能找不到足够的匹配点来计算相机运动
有以下几种方法克服这些缺点:
1、保留特征点,但只计算关键点,不计算描述子。使用光流法来跟踪特征点的运动。相当于使用光流法来替换匹配描述子。
2、只计算关键点,不计算描述子。同时使用直接法来计算特征点在下一时刻图像的位置。
3、既不计算关键点,也不计算描述子,而是根据像素灰度的差异,直接计算相机运动。(通过最小化光度误差来求)。
二、光流法
随着时间的经过, 同一像素会在图像中运动,而我们希望追踪它的运动过程。计算部分像素运动的称为稀疏光流,以Lucas-Kanade光流为代表,亦称LK光流。
![LK光流法示意图](http://upload-images.jianshu.io/upload_images/4769746-2d63a861224c765f.png?imageMogr2/auto-orient/ trip%7CimageView2/2/w/1240)
LK光流
在t 时刻,位于(x,y)处的像素,它的灰度可以写成 I (x, y, t)
灰度不变假设:同一空间点的像素灰度值,在各个图像中是固定不变的。
泰勒展开后
光流法相比于特征点法,在于能够节省一定时间(但不绝对),一般只会碰到特征点跟丢的情况,而不会遇到误匹配。
但光流法必须要求相机运动是微小的(或采集频率较高),一般采用拍摄视频。
三、直接法
在直接法中,由于没有特征匹配,我们无从知道哪一个p2和p1对应同一个点。
直接法的思路是根据当前相机的位姿估计值,来寻找p2(第二幅图的像素点)。若相机位姿不够好,p2的外观和p1会有明显差别。
为了减少这个差别,可以优化相机的位姿,来寻找与p1更相似的p2。这可以通过解一个优化问题来得到。但此时最小化的不是重投影误差,而是光度误差。也就是P的两个像的亮度误差。
注意这里e是一个标量。优化目标为该误差的二范数为:
能够做这种优化的理由,仍然是基于灰度不变假设。我们有N个空间点Pi,整个相机位姿估计问题变为:
计算出目标函数的雅可比矩阵后,可以使用G-N或L-M计算增量,迭代求解。