优化逃不过两部分,残差项和雅可比,而此处由于滑窗的存在,又多了一项,即边缘化,所以关于DSO的后端优化部分也按照这三部分来讲。(本篇文章主要参考高翔博士的博客zhuanlan.zhihu.com/p/29

1. 残差项

在VO过程中,DSO会维护一个滑动窗口,通常由5-7个关键帧组成,流程如前所述。DSO试图将每个先前关键帧中的地图点投影到新关键帧中,形成残差项。

滑动窗口内部构成了一个非线性最小二乘问题。表示成因子图(或图优化)的形式,如下所示:

每一个关键帧的状态为八维:六自由度的运动位姿加上两个描述光度的参数;每个地图点的状态变量为一维,即该点在主导帧(Host)里的逆深度。于是,每个残差项(或能量项E),将关联两个关键帧与一个逆深度。事实上,还有一个全局的相机内参数亦参与了优化,但未在此图中表示。

设相机模型由针孔模型描述,那么内参矩阵为:

设有两个帧,一个称为Host,一个称Target,它们各自到世界坐标的变换矩阵记为 THW  TTW ,这二者又可以拆开为旋转和平移。考虑Host帧中一个像素点:

其中uT,vT为该点的像素坐标,这里使用了齐次坐标以方便矩阵运算。同时,该点的逆深度为:

其中dH为该点的深度值。那么,这个点在Target帧中的投影为:

为方便起见,我们略去了此公式中的齐次坐标至非齐次的转换,默认它们是自动转换的。我们定义了中间变量pw,TTH,即点的世界坐标,以及Host至Target的相对变换。

由此可以定义该点的残差。设Host和Target的图像分别是IH,IT,那么残差为:

但是在实现中,DSO会同时估计图像的光度参数a,b,所以在计算误差时,会用到去掉光度参数之后的那个值。

2. 雅可比

在完整DSO中,雅可比由三部分组成:

1)图像雅可比,即图像梯度

2)几何雅可比,描述各量相对几何量,例如旋转和平移的变化率

3)光度雅可比,描述各个量相对光度参数的雅可比

作者认为,几何和光度的雅可比,相对自变量来说通常是光滑函数;而图像雅可比则依赖图像数据,不够光滑;所以,在优化过程中,几何和光度的雅可比仅在迭代开始时计算一次,此后固定不变。而图像雅可比则随着迭代更新。这种做法称为First-Estimate-Jacobian(FEJ),在VIO中也会经常用到。它可以减小计算量、防止优化往错误的地方走太多,也可以在边缘化过程中保证零空间的维度不会降低。

几何雅克比的计算可以参考文章zhuanlan.zhihu.com/p/29

3. 边缘化

边缘化的原因是滑动窗口中不需要的关键帧不能直接删除,它对应的地图点包含了有用信息,删除之前要对地图点信息进行投影,具体做法就是舒尔补。

边缘化网上的资料太多了,不详细讲了。