视觉里程计总结


视觉里程计总结

任务目标

《视觉SLAM十四讲》里面介绍到视觉里程计的任务是:

  1. 估算相邻图像间相机的运动
  2. 估计局部地图

基本方法

视觉里程计常用的方法是特征点法、光流法、直接法。

笔者认为这几种方法最根本的区别在误差函数上,所以这里不再从最最基础的fast角点、ORB特征点、灰度不变假设等开始介绍,这些内容可以阅读《视觉SLAM十四讲》。下面本文将站在误差函数的角度对这几种方法进行介绍。

特征点法

特征点法的目标是最小化重投影误差,即投影坐标和观测坐标(根据观测的位姿做投影)的差。

比如,在PnP问题中,重投影误差为3D点的投影位置与观测位置的差,可以用下面的公式进行表述:
$$
\min_{T} \frac{1}{2} \sum^n_{i-1} |u_i - \frac{1}{s_i}KTP_i|^2_2
$$
其中,$T$是相机的位姿,$P_i$是某个空间点的坐标(在世界坐标系下),而$u_i$是该点投影的像素坐标,$s_i$为该点的深度(在当前相机坐标系下),$K$为相机内参。

而在ICP问题中,处理的都是3D点,不再有相机内参,重投影误差表现为下面的形式:
$$
\min_{R,t} \frac{1}{2} \sum^n_{i-1} | (p_i - (Rp_i’+t)) |^2_2
$$
其中,$R,t$为相机位姿,$p_i$和$p_i’$为配对好的3D点(在不同帧的相机坐标系下)。

特征点法的普遍流程为:

  • 提取图像特征点
  • 计算特征点的描述子
  • 通过描述子匹配特征点
  • 利用三角测量、对极几何、PnP、ICP等算法估计相机运动

光流法

光流求解的是最小化光度误差,目的是跟踪特征点的运动。

最小化光度误差可以表述为下面的形式:
$$
\min_{\Delta x,\Delta y} | I_1(x,y)-I_2(x+\Delta x,y+\Delta y) |^2_2
$$
其中$I_1(x,y)$为第一张图象在像素坐标$(x,y)$处的像素值,$I_2(x+\Delta x,y+\Delta y)$为第二张图象在像素坐标$(x+\Delta x,y+\Delta y)$处的像素值。

光流法的普遍流程为:

  • 提取图像特征点
  • 根据光流跟踪特征点的运动,避免了计算和匹配描述子的过程
  • 利用三角测量、对极几何、PnP、ICP等算法估计相机运动

直接法

直接法的优化目标为最小化光度误差,具体的公式如下:
$$
\min_{T} J(T)=e_i^Te_i, \quad e_i=I_1(p_{1,i})-I_2(p_{2,i}).
$$
其中,$T$为相机位姿,$I_1(p_{1,i})$为第1张图片上点$p_{1,i}$处的像素值,$I_2(p_{2,i})$同理。

需要注意,点$p_{1,i}$和点$p_{2,i}$的关系为:
$$
\begin{align}
p_{1,i}=&\frac{1}{Z_1}KP_i, \\
p_{2,i}=&\frac{1}{Z_2}K(RP_i+t)= \frac{1}{Z_2}K(TP)_{1:3}
\end{align}
$$
这里$K$为相机位姿,$P_i$为对应的3D点坐标(在第一帧相机坐标系下),$R,t$(对应李群为$T$)为第二帧时相机的旋转和平移,$Z_1$为点$P_i$在第一帧相机坐标系下的深度,$Z_2$同理。

直接法的普遍流程为:

  • 提取关键点或者直接产生随机点
  • 考虑空间点在两帧中的像素位置
  • 建立误差模型,通过计算最小光度误差来优化相机运动

代表工作

方法 代表工作 备注
特征点法 ORB-SLAM
光流法 VOLDOR-SLAM、FlowFusion、VINS-Mono 光流似乎主要用在动态场景下,或者和深度学习结合起来
直接法 LSD-SLAM、DSO、SVO、BAD-SLAM

文章作者: Immortalqx
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Immortalqx !
评论
  目录