1.直接法
如下图为空间点P在第一帧和第二帧的映射,而R,t()则为第一帧到第二帧的转换矩阵。在直接法中,不通过特征法,而是通过相机的位姿(在直接法中是已知的)来估计第二个相机中的像素位置。
直接法:当相机估计位置不好时, 和 的外观就会有差别。通过优化位姿,来减小差别。这个又是一个最小二乘的问题,其中判断的不是通过重投影误差,而是通过光度误差,也就是俩个像素的亮度误差:
对于亮度误差的优化,可用范数表示为:(这个是对于一个点而言的),但是这种优化的前提是 灰度不变假设(即同个像素在不同时刻的灰度是不变的)
如果说空间有N个点,那么整个相机位姿估计问题变为:,这里的 表示的是李代数,在这个优化的过程中,我们需要的是,对李代数进行优化,使得误差最小。
其中,q为扰动分量在第二个相机坐标系下的坐标,u为他的像素。
利用泰勒展开得到
于是,根据前面讲的雅克比矩阵推导,我们可得:
1. 为u处的像素梯度。
2. 为投影方程关于相机坐标系下的三维点的导数为:
3.为变换后的三维点对变换后的导数
合起来后,我们有:
于是,对于直接法的,推导出的雅克比矩阵为:
2.直接法的讨论
根据空间点P的来源,可分为:
1.P来自稀疏关键点,称为稀疏直接法,通常使用数百个至上千个关键点。
2.P来自部分像素,如果像素梯度为0的话,整项雅克比矩阵就为0,因此只考虑带有梯度的像素,舍弃像素梯度不明显的地方。半稠密直接法。
3.P为所有像素,稠密直接法。
稀疏方法可以快速地求解相机位姿,而稠密的方法可以建立完整地图。
相比于特征点法,直接法完全依靠优化来求解相机位姿。如下图,像素梯度能够把优化引导到正确的方向。
是否真的按照梯度走就能走到一个最优值?直接法的梯度是直接由图像梯度确定的,因此我们必须保证沿着图像梯度走时,灰度误差会不断下降。然而,图像是一个很强烈的非凸函数,很容易由于图像本身的非凸性进入一个最小值,无法继续优化。只有当相机运动很小时,图像中的梯度不会有很强的非凸性。
3.直接法优缺点总结
优点:
1.可以省去计算特征点、描述子时间。
2.只要求有像素梯度,不需要特征点。
3.可以构建半稠密乃至稠密地图,这是特征法无法做到的。
缺点:
1.非凸性。依靠梯度搜索很容易陷入极小值,除非运动很小。
2.单个像素没有区分度。计算图像块或者计算复杂的相关性。
3.灰度值不变是很强的假设。