视觉里程计经典综述精读:从特征法原理到工程实践

发布时间:2026/10/16 20:48:18
视觉里程计经典综述精读:从特征法原理到工程实践 1. 这篇论文到底在讲什么先说结论这是视觉里程计领域公认的奠基级综述适合所有想入坑SLAM、自动驾驶感知、AR定位的同学当作第一份阅读材料。我自己入行时啃的第一篇就是它当时还觉得“这个领域怎么连篇像样的总结都没有”后来才知道是我自己没搜对。这篇论文把2000年代初之前三十年的视觉里程计算法梳理得清清楚楚尤其把“特征法”这条主线讲透了。论文核心回答了三件事视觉里程计是什么、数学上怎么建模、过去三十年大家各自是怎么解的。我读下来最大的感受是它不像很多综述那样罗列一堆论文然后就没有然后了而是把每一步推导都摊开讲——包括坐标系定义、投影模型、位姿求解的闭式解和迭代解法、误差消除手段。即使放到现在这套知识框架也没有过时因为VO底层的那套几何学原理是不变的。适合谁来读我的建议是三类人一是刚入门SLAM的在校学生需要建立坐标系和位姿求解的直觉二是工程上已经在用现成VO模块、但想知道内部工作原理的开发者三是想系统梳理VO发展脉络、为选题找方向的研究者。这篇论文没有太多公式推导的捷径但每一行推导都值得读读懂了后面看ORB-SLAM、VINS-Mono这类系统的论文会顺畅很多。我当年第一遍读这篇论文大概花了三天前三分之一在建立坐标系的直觉中间补了李群李代数的课最后才敢说自己大致看懂了。所以这篇笔记我会按“先建立整体框架、再深入原理、最后聊聊工程经验”的顺序来写。你不用按照原论文的章节顺序读按我这个顺序读理解成本会低不少。2. 视觉里程计的问题定义与核心管线2.1 一句话说清楚VO在解决什么问题视觉里程计的本质就是一个数学问题已知两帧或多帧图像求相机在这段时间内的位置变化和姿态变化。这个“位姿变化”通常表示成旋转矩阵R和平移向量t合起来构成一个4×4的变换矩阵描述的是相机坐标系之间的刚体运动。但实际工程中的难点在于图像里没有现成的三维坐标你看到的是一堆亮度值组成的矩阵。所以整个VO管线做的事情就是从这些二维像素出发反推相机运动的三维参数。中间涉及大量反问题求解而反问题天生就带病态性有的像素对估计没用有的像素噪声大有的像素会重复出现干扰你。这也是为什么VO的每一步都在做“提出假设、验证假设、剔除错误”的循环。论文开头还强调了一个重要区分VO和SLAM不是一回事。VO只关心“相对运动”不关心全局地图和闭环SLAM则要求同时估计轨迹和一致性地图还要解决漂移。理解了这一点你就会明白为什么很多VO算法做得快但会漂而SLAM系统会重、但能修正。工程选型时如果你的任务只需要短时运动估计比如履带车上的局部导航VO就够用如果要做长期一致的建图和定位必须上SLAM。2.2 经典VO管线的四个环节论文把VO系统解构成四个核心环节这个框架今天仍然成立图像获取与预处理负责从传感器拿图像做去畸变、降噪、直方图均衡化等操作特征提取与匹配找到两帧之间可靠的对应关系这是整个VO的信息来源运动估计利用对应的2D点或三角化后的3D点求解帧间位姿局部优化对最近的若干帧做联合优化消除累积误差和匹配噪声这四个环节里特征提取和运动估计是重头戏论文用了大量篇幅讲这两块。预处理和局部优化看起来配角但工程上往往决定系统能不能稳定跑下去。我个人的体会是预处理的重要性容易被新手忽视。相机畸变参数标定得不干净或者图像有严重运动模糊后面特征匹配的质量会直接崩掉再好的运动估计算法也救不回来。运动估计部分论文按“2D-2D”、“3D-2D”、“3D-3D”三种对应关系分别讨论每一类都有各自的适用场景和数学解法。读到那里我建议你放慢速度因为这三种情况的矩阵分解、最小解个数、退化情形是后面所有视觉SLAM论文反复引用的基础。2.3 为什么“标定”是VO的地基还需要强调一点整个VO的前提是相机内参已经标定好。论文里所有公式都默认了已知焦距、主点、畸变系数也就是内参矩阵K是已知的。这个假设在实验室环境容易满足但在实际项目中很容易被忽略。我踩过的坑是拿到一台新相机直接用默认参数跑VO结果前端匹配分数很高、轨迹却飘得离谱。后来细查才发现那台相机的畸变参数和标称值差了一大截尤其是鱼眼镜头边缘畸变简直能把人骗哭。所以我的项目流程里永远把标定放在第一步用棋盘格拍几十张图跑一遍标定输出内参和畸变系数再往下走。论文没有花很大篇幅讲标定因为它的定位是综述而不是操作手册。但你读的时候要意识到论文里所有假设完善的参数在实际使用中都需要你提前做好。这也是很多复制论文实验失败的第一原因——不是算法实现有问题而是输入的前提条件没准备好。3. 核心原理拆解从像素到运动的数学推导3.1 坐标系与投影模型先搞懂世界在哪读这篇论文第一道坎就是坐标系变换。整个VO系统的坐标系关系可以梳理成几个关键层次世界坐标系、相机坐标系、图像坐标系、像素坐标系。相机的位姿描述的就是从世界坐标系到相机坐标系的刚体变换而投影模型则负责从三维坐标到像素坐标的映射。论文里的针孔模型是最核心的投影模型它把三维点通过中心投影映射到成像平面。公式上就是一个归一化加内参映射的过程。这里的关键直觉是一个三维点经过投影后深度信息被压缩掉了只剩二维位置。这意味着从单个视角无法恢复深度必须靠多个视角或者已知运动来恢复。VO算法的本质就是利用多帧图像的“视差”信息把深度和运动同时估计出来。后面论文还拓展到了鱼眼和全景相机模型不过主线仍然是针孔模型。我的建议是第一次读先把针孔模型的推导吃透包括内参矩阵K、归一化平面、齐次坐标变换这些是后面所有模型的基础。李群SU(2)、SE(3)的引入也建议同步补。你不用一开始就精通所有李代数操作但至少要明白为什么旋转用矩阵、更新用增量扰动这套东西出现频率太高了。3.2 2D-2D运动估计对极几何是关键当只有两帧图像、没有深度信息时最经典的方法是借助对极几何求解本质矩阵E或者基础矩阵F再从E或F中分解出旋转和平移。论文详细推导了这个过程包括最少五点法、八点法以及分解E矩阵后存在四种可能的解需要用正深度检验选出唯一正确位姿。理解这里的关键在于“对极约束”的物理含义空间三维点X在两个相机下的投影点x1和x2与两个相机光心C1和C2之间存在一个平面约束这个约束在数学上被编码成对极几何中的本质矩阵。本质矩阵E只包含相机的相对位姿信息再加上内参约束就能从匹配点求解出位姿。实际实现时八点法对匹配噪声很敏感五点法虽然有更少参数但求解复杂。论文给了很多数值方面的建议。我自己的经验是实际工程里很少拿裸的八点法直接做VO至少都要加RANSAC来剔除错误匹配。因为特征匹配中误匹配率往往不低个别错误的对应点足以让八点法的代数解彻底跑飞。论文里也提到这一点但实际调试时你的体会会更痛。我还想强调一点2D-2D方式估计出来的平移t只有方向、没有尺度。这是单目VO的固有缺陷也是后续很多系统引入双目、IMU、轮速计的动机。如果你只有单目相机你必须接受轨迹会有尺度漂移这个问题。这个物理限制不是算法能解决的它是几何问题本身带来的。3.3 3D-2D运动估计PnP问题与解法当已经有一帧图像的三维点已知时可以用3D-2D对应关系直接求解相机位姿这就是经典的PnP问题。论文介绍了直接线性变换、P3P以及基于非线性优化的解法。PnP的最大优势在于不需要像对极几何那样先求基础矩阵而且平移的尺度可以从已知的3D结构里恢复出来避免了尺度漂移问题。PnP的关键在于最少只需3对3D-2D点就能求解实际中最常用的是在RANSAC框架下用EPnP或P3P来排除异常点。论文把这部分推导得比较细尤其是代数方法和非线性方法之间的权衡。我建议你把“最少点数”和“需要多少点才能稳定”区分开来数学上3对点就够了但对抗噪声和误匹配需要远超最小点数的冗余配合随机采样确定性才算可靠。实际实现中PnP比对极几何更常用在VO的后续帧中因为前面若干帧的运动已经帮你三角化出了一批3D点新帧只要做特征匹配就能直接用PnP求位姿。这种方式比每次都从2D-2D重头估计要稳定得多这也是现代VO/SLAM前端的标准做法——初始化用对极几何后续帧用PnP。3.4 3D-3D运动估计配准问题的本质第三类情况是同时知道两组三维点集求解它们之间的刚体变换。这在深度相机或双目VO中很常见核心问题是点云配准经典解法是ICP迭代最近点。论文对ICP讲解不算非常详细但给出了基本框架先找对应点再求变换然后重新找对应点不断迭代。ICP最大的风险是初始值差的时候容易陷入局部极小。所以工程上通常会给ICP一个从PnP或对极几何算出来的初始值而不是凭空迭代。这一点论文没有突出讲但我在实际使用双目VO时深有体会初始位姿差几个厘米可能没关系差个十几厘米ICP就别指望收敛对。可见“初始化给好初值”在3D-3D的求解里和算法本身同等重要。另外要注意ICP优化的是两组点云的几何距离如果点云本身有噪声或离群点需要稳健核函数来压制误差。论文里对稳健估计有一些讨论但不算深入。建议读过这篇之后再补一篇关于ICP变体的论文尤其是point-to-plane和点到点的区别。工程中point-to-plane形式往往收敛更快更稳。4. 三十年演进脉络从稀疏特征到稠密直接法4.1 稀疏特征法的黄金时代论文覆盖的三十年前二十年基本是稀疏特征法的天下。核心思路就是前面第3节讲的流程提取角点、匹配描述子、用对极几何或PnP求解位姿。最早期的VO系统受限于计算资源能提取的特征数量很少用到的特征检测器也非常原始但已经能在小规模场景中跑通视觉测程。那段时间最关键的突破是特征检测与描述子匹配的稳定性提升。从最早的角点检测到尺度不变的特征描述子出现VO的特征匹配在大基线、光照变化条件下越来越可靠。这直接推动VO从实验室走向真实环境。论文里对这些特征算法的演进讲得比较多并给出了各自的适用场景和优缺点对比。我复盘这段历史时有很深的体会这是“表示方式决定算法上限”的典型。稀疏特征法把图像压缩成少量点对极大降低了计算量也让后续几何求解变得更直接。但它的短板也源于此——纹理缺失场景直接无点可用运动模糊和非刚性变化会让特征匹配大规模失败。所以后面才会出现“直接法”来绕开特征提取这一步。4.2 直接法和稠密重建的兴起既然是综述论文也用不少篇幅讨论了直接法的思路不提取特征直接基于像素亮度一致性假设来优化位姿和稠密/半稠密结构。直接法的代表是DTAM、LSD-SLAM这类系统它们的核心是光度误差最小化不需要匹配过程对弱纹理区域的处理往往优于特征法。但直接法的前提是光度一致性假设这意味着场景中不能有反光、遮挡、动态物体且光照需要相对稳定。论文对这些限制讨论得很清楚。我在实验里试过直接法在室内场景效果还行一到室外正午强光和阴影交替的场景光度误差函数就容易陷入错误的局部极小表现远不如特征法稳当。所以后来的趋势是混合方法既提取特征建立几何约束又利用像素灰度做直接优化。这种“半直接法”在SVO等系统中已经展示出很好的效率与鲁棒性。三十年的演进本质上就是在“鲁棒特征”与“稠密信息”之间寻找最佳平衡点的过程。4.3 与滤波方法的关系EKF-SLAM的兴衰论文还花了一节讨论基于滤波的视觉里程计/视觉SLAM核心是EKF扩展卡尔曼滤波框架。这种方法把相机位姿和路标点放进状态向量通过观测更新来递归估计。1990年代到2000年代初EKF-SLAM一度是主流。但它的致命问题是计算复杂度和状态向量维度的三次方关系路标一多计算量就爆炸。后来优化方法把位姿估计转成图优化问题通过稀疏矩阵求解大规模束调整变得高效才逐渐取代滤波方法。论文对这一历史转变描述得很准确。我自己也在工程中体验过这种差异用EKF做小规模状态估计还好一旦路标数上千实时性就很难保证。图优化加稀疏求解器可以把同样规模的问题在几毫秒内解决。这里给你一个读论文时容易忽略的点技术的兴衰有时候不是因为理论不够漂亮而是因为计算复杂度的瓶颈。滤波方法在理论上很优雅但工程可扩展性差优化方法虽然起步笨拙但配合稀疏代数后一骑绝尘。这提醒我们做技术选型时可以多想一步“这个方案三年后还能不能扩展”。4.4 30年技术路线速查表为了方便对比我整理了一张表格帮你把不同时代的主流路线串起来时代/路线核心思路代表方法优势短板稀疏特征法90年代-特征提取几何求解基于角点/描述子的VO鲁棒、成熟、易工程化弱纹理失效、信息利用率低滤波方法90年代-2000s状态递归估计EKF-SLAM、MSCKF在线、因果性强扩展性差、非线性误差累积直接法2000s-光度误差最小化DTAM、LSD-SLAM稠密重建、利用全部像素对光度变化敏感半直接法2010s-特征直接结合SVO效率高、精度好全局一致性仍需后端优化方法2000s-批次优化Bundle Adjustment、图优化精度高、能大规模求解对实时计算有较高要求这张表是我读论文之外自己补的归纳。论文本身没有这么凝练的对比但读完之后你应该能在脑子中形成类似的结构。5. 实操过程中的技术要点与踩坑记录5.1 特征匹配质量影响精度的头号因素如果让我只提一个影响VO精度的关键点我会选特征匹配质量。论文里所有数学推导都假设匹配是正确的但实际匹配结果总是掺着噪声和错误。我自己在搭建VO原型时统计过即使使用较新的特征描述子在光照变化场景中误匹配率也可能达到10%到20%。如果不把这些误匹配剔除掉后面的运动估计一步错、步步错。实际操作时我一般用三层过滤第一步用描述子做粗匹配设置较严格的阈值第二步用最近邻距离比值过滤比如只接受最优距离小于次优距离0.7倍的匹配第三步也是最关键的一步用RANSAC和对极几何约束做最终过滤只保留满足几何一致的匹配。这套流程下来误匹配率能压到1%以下。分层过滤的思想在论文里虽然没有系统展开但其中关于RANSAC的部分给了理论依据。我的建议是不要迷信某一个算法的“黑盒效果”把每一层过滤的统计结果打印出来观察匹配数量的变化你会对你的场景数据有非常直观的理解。5.2 尺度问题与控制措施单目VO的尺度问题前面提过这里展开讲一个我调试时真实遇到的现象同一段路线用同一个VO算法跑三遍三条轨迹的长短会明显不同但形状相似。这是因为尺度漂移在慢慢累积。如果你做的是纯单目VO轨迹总长度会随运行时间慢慢偏大或偏小这个问题用数学无法消除只能缓解。缓解手段通常有三个方向一是多目通过立体视觉直接恢复绝对尺度二是融合IMU用惯性数据在短时内约束尺度变化三是后端定期做闭环优化把尺度拉回来。论文里对这些手段的讨论不算多但我建议工程上尽早定好尺度方案因为后期换传感器代价很高。如果你只是写课程作业用单目问题不大但如果是做产品级的里程计我的建议是不要跳过多传感器融合这一步。纯单目的路我见过太多项目走到一半因为尺度不稳定而重构系统。5.3 对极几何求解的数值注意事项用两帧图像估计位姿时特征点坐标的归一化极其重要。论文里特别强调在构造线性方程组时如果直接用像素坐标数值条件会很差导致求解结果受噪声影响极大把坐标先归一化再做SVD分解数值稳定性明显提高。这一点用直觉想也通像素坐标动辄几千矩阵里不同量级的数字混在一起奇异值分解很容易被大数主导。实际编码时我建议做两步归一化先把像素坐标转换到以光心为中心的归一化坐标再对这批坐标做各向同性缩放让点的均值和方差都变成适中的量级。这里还有一个经验之谈RANSAC的迭代次数不要省。虽然数学上会根据内点比例自动估计所需次数但在实时系统里人们经常手动压低迭代上限结果精度受损。我的折中做法是在初始化阶段用满迭代次数跑到跟踪稳定后再降低上限。5.4 实际工程中常见的陷阱列表下面是我不止一次在工作中遇到、但论文里不会细讲的几个典型问题列出来供你排查时对照图像时间戳不同步导致两张图实际上差了好几帧运动估计结果自然错误相机标定参数对应的是另一分辨率的分辨率倍率忘了缩放内参去畸变在缩放前后顺序搞反造成边缘区域人为扭曲前端匹配跑得非常快误以为算法优秀实际上是因为图像被严重降采样导致特征基本重复可视化轨迹时坐标系方向不对平移和旋转看起来像噪声其实运动是对的这些都是“看起来小、影响致命”的细节。论文不会教你这些但你在工程中迟早会遇到。每次踩完坑我都建议你把这些记录到项目笔记里形成自己的问题速查表比重新读书效率高得多。5.5 一个简单的验证方案新人读完论文想做实验我建议不要一上来就搭完整VO系统。可以先从两帧数据开始找一组有重叠的连续帧先做特征匹配再算本质矩阵并分解出位姿最后在可视化工具里看看3D点和相机轨迹是否符合直觉。验证不要只在算法层面做一定要可视化视觉反馈会把问题放大到你能一眼识别。如果你手头没有数据集可以先用公开的街拍序列或者自己用手机拍摄的室内视频把每帧抽出来用手动标定的内参跑流程。大概半天时间就能搭出一个最小的两帧VO原型。体验一遍“从像素到位姿”的完整过程再回头读第3节的数学推导会发现一切都通顺了。我还记得我当年第一次跑通两帧VO时屏幕上画出相机坐标系和匹配点连线的那一瞬间整个数学框架忽然就“活”了。读这篇论文之前我死记硬背一堆公式都记不牢跑通这个实验之后公式变成了工具箱用起来非常顺手。6. 常见问题排查与经验速查6.1 前端匹配常见的退化场景特征匹配在实际场景中最怕三类情况低纹理、重复纹理、大运动模糊。低纹理场景特征点数量不足运动估计自由度不够重复纹理场景会大量产生对称性误匹配即使RANSAC有时也救不回来大运动模糊则让描述子失去辨别力。论文中的前端环节对此讨论不多因为综述更偏几何但工程里这些都直接决定算法能否工作。针对低纹理我的建议是配合曝光补偿和亮度归一化有时能多提取出一些弱角点对于重复纹理最可靠的还是靠几何过滤你不应该指望描述子本身能识别出对称歧义对于运动模糊只有两条路要么提高帧率减小帧间模糊要么在算法层面集成去模糊处理。没有万能药选型时要想清楚场景。6.2 位姿估计的数值稳定性问题如果你发现VO的轨迹高频抖动但匹配内点率看上来很高问题很可能出在数值稳定性上。常见原因有两类一是点集分布集中在图像的一小块区域几何约束非常弱解是病态二是变换参数化不够好比如旋转更新用欧拉角导致奇异性。解决办法是时刻关注“有效基线”的概念。如果两帧之间视角变化很小平移估计会很不确定这个时段不要盲信VO输出。另外旋转参数用李代数或者四元数更新避免欧拉角描述接近直角附近时的灾难性表现。论文里虽然用李群表示旋转但没有强调工程中不同参数化带来的数值差异这是我补的经验。如果抖动发生在快速运动段还有一个可能原因匹配数量突然下降导致约束不足。建议你打印帧间特征点对数量曲线观察抖动帧和匹配数量低谷是否对应。如果是解决方案很简单提高帧率或者降低分辨率以增加帧间重叠。6.3 后端优化失效时的排查思路当你在VO后端引入局部BA束调整后可能会遇到优化不收敛或者收敛到错误结果的情况。排查顺序我建议这样来第一确认雅可比矩阵的数值求导和解析求导一致很多手写实现的错误都出在这里第二检查残差的单位是否统一旋转误差和平移误差混在一起时权重很难调最好分开设置信息矩阵第三检查核函数阈值是否合理鲁棒核太大等于没有太小则所有有效信息都被压制。在这些问题都没发现问题时可能出在初始化上图优化的初始值如果偏得太远非线性优化大概率会跑飞。这个道理和前面讲ICP时一模一样——初始化的重要性我怎么说都不嫌多。你也可以在优化前后打印轨迹差确认优化是否真的在降低残差而不只是数值上“成功迭代”。6.4 开发调试策略先离线、后在线给新入行的朋友一个建议不要直接在实时系统里调试VO。先做离线数据集回放把前端匹配、运动估计各阶段的可视化全部打出来逐一确认无误再上实时链路。实时调试时你只有两个屏幕的时间问题信息量一多根本反应不过来。另外建议你在代码里加“数据记录开关”把每帧的匹配数量、RANSAC内点数量、位姿增量、计算耗时这些关键指标都记录到日志里。这样你跑完一段测试不是凭感觉判断系统好不好而是可以看数据曲线定位退化点。我自己就是从“目测轨迹好像还行”转向“指标曲线必须曲线平滑”之后系统稳定性显著提升的。质检的维度也可以更丰富比如对比色、光照变化时的匹配数变化趋势以及固定场景匀速运动时的位姿增量方差。把这些量化指标和视觉检查结合会让你对系统鲁棒性的理解远超单纯跑通几个demo。7. 从论文出发的一些个人体会读这篇综述给我最大的收获不是背住了几个公式而是建立了对视觉里程计“几何核心”的清晰认知。技术的花样很多深度学习、端到端、语义信息但这些新东西最终都在解决老问题更稳的匹配、更准的运动估计、更好的误差消除。这套几何框架就像骨架新的方法是在骨架上长出的肌肉。我自己在实际研究中也发现很多看似新潮的方法只要回归到“前端对应关系是否可靠”和“后端误差是否收敛”这两个基本维度去分析优劣顿时变得分明。这篇论文给了我分析新方法的工具箱让我不至于被表面花哨的模块组成带偏判断。这一点我觉得比论文里的任何公式都更值钱。所以如果你问我现在还能不能从这篇论文里学到东西我会说能。任何一种技术只要你想长期做下去它的底层原理永远值得反复回顾。这个领域已经从特征点时代走到了学习时代但相机成像、几何投影、位姿求解这些物理约束不会变。最后分享一个我自己工作流里的小习惯每次设计新的VO模块我会先回到论文中的基本流程走一遍——定义坐标系、标定内参、提取特征、求位姿、做优化。如果哪个环节解释不清那就是我的理解有问题而不是算法本身需要什么新鲜的魔法。这条朴素的检查思路帮我避开了很多“堆模块但不知道为什么”的无效工作。

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询