【论文笔记】-- Visual Odometry Part I: The First 30 Years and Fundamentals

本文详细介绍了视觉里程计(Visual Odometry, VO)的基本原理与应用,包括VO问题的数学模型、基本流程,以及如何通过不同类型的相机模型进行运动估计。文中深入探讨了基于特征点的VO流程,如特征检测、匹配、运动估计和局部优化等关键步骤。同时,对比了2D-to-2D、3D-to-3D及3D-to-2D运动估计方法的优劣,阐述了单目与双目VO的特点与区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. Formulation of the VO Problem

A. 基本原理

如下图所示,为双目 VO,VO 对每输入新的一帧,1)估计相邻帧之间的运动 T k , k − 1 T_{k, k-1} Tk,k1(旋转+位移,即位姿变换),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=Ck1Tk

在这里插入图片描述
这表明,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} Ik1, I k I_{k} Ik 的对应两个特征集 f k − 1 , f k f_{k-1}, f_{k} fk1,fk 来计算两帧之间的相对运动 T k T_{k} Tk。根据 feature correspondences 具体是在二维还是三维,有三种方法,

  • 2D-to-2D: In this case, both f k − 1 f_{k-1} fk1 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} fk1 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} fk1 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} Ik2 and I k − 1 I_{k-1} Ik1 ) 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} argTkminipkip^k1i2
其中, p ^ k − 1 i \hat{p}_{k-1}^{i} p^k1i 是 3D 点 X k − 1 i X_{k-1}^{i} Xk1i 根据变换 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} Ik1 已匹配的特征点的像素坐标。这样的话,应该对变换 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帧中)以计算轨迹的更准确估计。

### 基于事件的立体视觉里程计的研究与实现 基于事件的立体视觉里程计是一种利用事件相机(Event Camera)获取的数据来估计运动的技术。传统摄像机以固定帧率捕捉图像,而事件相机则通过异步方式记录像素亮度变化的时间戳和位置,这使得其在高动态范围场景下具有显著优势。 #### 1. 工作原理 事件相机能够感知环境中的快速变化并立即响应这些变化,从而提供更高的时间分辨率。对于双目或多目设置下的立体匹配而言,这种特性有助于更精确地跟踪特征点及其对应关系[^1]。具体来说,在两个不同视角之间寻找共同可见的目标物,并计算它们之间的视差可以推断出距离信息;当车辆移动时,连续测量同一物体的不同位置即可得到位移向量,进而构建轨迹图。 #### 2. 关键挑战 尽管基于事件的方法具备诸多优点,但在实际应用过程中仍面临一些困难: - **数据稀疏性**:由于只记录光照强度的变化而非完整的灰度值矩阵,因此每单位时间内产生的有效观测较少; - **噪声处理**:外界干扰因素可能导致错误触发或丢失重要信号; - **初始化问题**:首次启动系统时难以获得可靠的初始状态估计。 为了克服上述障碍,研究人员提出了多种算法改进措施以及硬件优化方案[^2]。 #### 3. 实现方法概述 一种常见的做法是采用光流法结合几何约束来进行姿态更新。即先根据前后两时刻内发生的离散化“事件”,重建局部表面结构;再借助三角剖分原理求解瞬时速度场;最后累积各阶段的结果形成全局路径描述。此外,还可以引入深度学习框架辅助完成复杂模式识别任务,提高鲁棒性和泛化能力[^3]。 ```python import numpy as np def event_based_stereo_odometry(events_left, events_right): """ A simplified function to demonstrate the concept. Args: events_left (list): List of tuples representing left camera's detected events [(timestamp, x, y), ...]. events_right (list): Similar list but from the right camera. Returns: tuple: Estimated translation and rotation between two consecutive frames. """ # Placeholder for actual implementation details... estimated_translation = np.array([0., 0., 0.]) estimated_rotation = np.eye(3) return estimated_translation, estimated_rotation ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值