Visual Odometry Part I: The First 30 Years and Fundamentals
1. Formulation of the VO Problem
A. 基本原理
如下图所示,为双目 VO,VO 对每输入新的一帧,1)估计相邻帧之间的运动 T k , k − 1 T_{k, k-1} Tk,k−1(旋转+位移,即位姿变换),2)整合之前所有相邻帧的运动,得到当前帧关于起始坐标系的绝对位姿 C k C_{k} Ck,并恢复相机的全轨迹 C 0 : k C_{0: k} C0:k。
方便起见,令 T k T_{k} Tk 为相邻帧运动,易得, C k = C k − 1 T k C_{k}=C_{k-1} T_{k} Ck=Ck−1Tk
这表明,VO 是渐进地恢复相机轨迹。那么,可对刚得到的 m 个位姿执行迭代优化,从而获得更加精确的局部轨迹。具体地,以重建的 3D 点(三角化得来)的重投影误差,来构建最小二乘问题,再执行迭代优化。
B. 基本流程
基于特征点的 VO 的主要流程如图2所示,
- feature detection 和 feature matching:检测 2D 特征,并对当前帧与先前帧特征匹配。
- image correspondences:相同的 3D 特征(路标点)在不同帧上的重投影,形成的 2D 特征,称为 image correspondences。
- feature matching 与 feature tracking 的区别:前者,先在各个图像上独立地检测特征,再基于一些相似度量标准,将特征匹配起来;后者,先在一张图像上检测特征,再在后续的图像中跟踪那些特征,跟踪时采用局部搜索技术,如 correlation。
- motion estimation:计算相邻帧之间的运动。根据 correspondences 的具体形式,有三种方法可供选择。在精确的 motion estimation 中,feature correspondences 应不包含 outliers (i.e.,wrong data associations)
- Local Optimization:对最近的 m 个帧 BA 优化,以得到更精确的局部轨迹。
2. Camera Modeling and Calibration
A. 相机模型
三种相机模型如下,
1)Perspective Camera Model(针孔模型):图像是由来自物体的光线通过镜头中心(投影中心)与焦平面的相交形成的。这是最常用的相机模型。
2)Omnidirectional Camera Model(全景模型):全景相机具有宽视野(甚至超过180°),可以使用鱼眼镜头,或通过将标准摄像机与反光镜结合使用来构建(后者称为折反射摄像机)。
3)Spherical Model
B. 相机标定
相机标定的目的是,精确的测得相机的内参和外参。也是求解 VO 问题的前提条件。在多摄像机系统(例如,立体和三目)中,外部参数描述了每对摄像机之间的相互位置和方向。 最流行的方法,棋盘法。
3. Motion Estimation
根据相邻两帧 I k − 1 I_{k-1} Ik−1, I k I_{k} Ik 的对应两个特征集 f k − 1 , f k f_{k-1}, f_{k} fk−1,fk 来计算两帧之间的相对运动 T k T_{k} Tk。根据 feature correspondences 具体是在二维还是三维,有三种方法,
- 2D-to-2D: In this case, both f k − 1 f_{k-1} fk−1 and f k f_{k} fk are specified in 2D image coordinates.
- 3D-to-3D: In this case, both f k − 1 f_{k-1} fk−1 and f k f_{k} fk are specified in 3D. To do this, it is necessary to triangulate 3D points at each time instant; for instance, by using a stereo camera system.
- 3D-to-2D: In this case, f k − 1 f_{k-1} fk−1 are specified in 3D and f k f_{k} fk are their corresponding 2D reprojections on the image I k . I_{k} . Ik. In the monocular case, the 3D structure needs to be triangulated from two adjacent camera views (e.g., I k − 2 I_{k-2} Ik−2 and I k − 1 I_{k-1} Ik−1 ) and then matched to 2D image features in a third view (e.g., I k I_{k} Ik ). In the monocular scheme, matches over at least three views are necessary.
notice:feature 有点特征和边特征,但主流采用点特征。
A. 2D-to-2D: Motion from Image Feature Correspondences
B. 3D-to-3D: Motion from 3D Structure Correspondences
C. 3D-to-2D: Motion from 3D Structure and Image Feature Correspondences
可见采用 3D-to-2D 运动估计的单目 VO 需要三帧参与计算。
PnP,即 perspective from n points
通过最小化重投影误差来求得
T
k
T_{k}
Tk,
arg
min
T
k
∑
i
∥
p
k
i
−
p
^
k
−
1
i
∥
2
\arg \min _{T_{k}} \sum_{i}\left\|p_{k}^{i}-\hat{p}_{k-1}^{i}\right\|^{2}
argTkmini∑∥∥pki−p^k−1i∥∥2
其中,
p
^
k
−
1
i
\hat{p}_{k-1}^{i}
p^k−1i 是 3D 点
X
k
−
1
i
X_{k-1}^{i}
Xk−1i 根据变换
T
k
T_{k}
Tk 在图像
I
k
I_{k}
Ik 上重投影得到的像素坐标,而
p
k
i
p_{k}^{i}
pki 是图像
I
k
I_{k}
Ik 上与图像
I
k
−
1
I_{k-1}
Ik−1 已匹配的特征点的像素坐标。这样的话,应该对变换
T
k
T_{k}
Tk 有个预先估计吧。
D. Triangulation and Keyframe Selection
在单目 VO 中,需要通过三角化来求得路标的 3D 位置,用于 3D-to-2D 的运动估计。
关键帧的选择,即每隔一些帧选择一帧,在三角化求 3D 点时,可以降低误差。
E. Discussion
通常,2D-to-2D、3D-to-2D 方法比 3D-to-3D 更精确。
在单目方案中,与 3D-to-2D 情况相比,2D-to-2D方法更可取,因为它避免了点的三角测量。 但是,实际上,3D-to-2D 方法比 2D-to-2D方法更常用。 原因在于其更快的数据关联。 如 Part II 所述,对于精确的运动计算,输入数据中不包含离群值至关重要。 离群剔除是非常微妙的步骤,此操作的计算时间严格地与估计运动所需的最少点数有关。 如前所述,2D-to-2D 情况至少需要五个点的对应关系(请参阅 five-point algorithm)。 但是,在 3D-to-2D 运动情况下,仅需要三个对应关系(请参阅P3P)。 如 Part II 所示,较少的点数可以更快地进行运动估计。
与单目相比,双目的一个优点是,除了可以直接按绝对比例计算 3D 特征外,还需要仅在两个视图之间计算匹配,而不是像在单目方案中那样在三个视图之间进行匹配。 另外,由于 3D 结构是直接从左右图像对计算而来,而不是像单目况那样从相邻帧计算而来,因此在小运动情况下,立体方案显示的漂移比单目方案小。单目方法很有趣,因为当到场景的距离远大于双目基线(即两个摄像机之间的距离)时,双目 VO 会退化为单目情况。 在这种情况下,双目立体视觉无效,必须使用单目方法。
无论选择哪种运动计算方法,都应始终执行局部 BA(在最近的m帧中)以计算轨迹的更准确估计。