直接法 vs 特征法:信息、曝光与计算预算的权衡
从光度残差与重投影残差出发对比直接法与特征法 VO,分析曝光模型、初值敏感度和嵌入式平台上的工程选型边界。

选 VO 前端时,团队里常见两派:特征法「稳、可解释、ORB-SLAM 证明了能产品化」;直接法「信息量大、不用提点、DSO/LSD 精度好看」。我两种都上过真机,结论不是谁碾压谁,而是你的光照是否可控、有没有 IMU、能不能承受曝光建模的复杂度。
残差定义决定一切
特征法(间接法):提取角点/边缘,建立 3D-2D 或 2D-2D 对应,最小化重投影误差:
r = π(K, T, P_j) - u_ij稀疏、每像素信息只用一次,但对特征提取质量极度敏感——弱纹理、运动模糊、重复纹理都是天敌。
直接法:在已知/估计深度图上,最小化光度误差:
r = I_ref(u) - I_cur(w(u; T, d))w 是 warp 函数,把参考帧像素投影到当前帧。每个像素都贡献约束,信息量大;但要求亮度恒定或仿射曝光模型,且对初值非常敏感——warp 错 5 像素,梯度指向错误方向。
特征法的工程画像
优点:
- 对光照变化相对鲁棒(描述子 + 鲁棒核)
- 天然支持回环(词袋)、重定位
- 计算可预测:特征数上限可控
缺点:
- 弱纹理场景特征数断崖(白墙、天空)
- 子像素精度受检测器限制
- 需要合理的 keyframe 策略保证视差
ORB-SLAM 系是特征法的标杆:四叉树均匀化、orientation histogram、DBoW2 回环。我在室内结构化环境用它很省心;一出户外强曝光变化,跟踪质量标志位就开始跳。
直接法的工程画像
LSD-SLAM(半稠密)、DSO(稀疏+光度)、SVO(半直接)代表不同取舍:
| 系统 | 策略 | 特点 |
|---|---|---|
| LSD-SLAM | 半稠密直接 | 深度滤波器维护,尺度漂移需回环 |
| DSO | 稀疏直接 + 曝光参数 | 联合优化 affine brightness,精度高 |
| SVO | 直接前端 + 特征后端 | 嵌入式友好折中 |
直接法的核心难点:
- 曝光模型:
I_cur ≈ a · I_ref + b,需联合估计或严格控光 - 初值:依赖 IMU 或高频 VO 给仿射 warp 好起点
- 边缘/遮挡:光度一致性在物体边界失效,需 outlier 剔除
户外自动驾驶场景,纯直接法常配合 IMU 做紧耦合 VIO;室内 LED 频闪 + 自动曝光,直接法经常比特征法更脆。
半直接:务实的中间路线
SVO 的思路我挺认同:前端用直接法快速估位姿(不用提特征),后端用特征做 BA 和回环。算力紧的嵌入式平台(无人机、小型 AGV)常走这条路——前端 30Hz 直接跟踪,后端 5Hz 特征 BA。
选型决策(我的个人清单)
优先特征法:
- 室内外混合、曝光不可控
- 需要词袋回环/重定位
- 团队熟悉 ORB-SLAM 生态
可试直接/半直接:
- 光照可控(实验室、工厂固定照明)
- 有 IMU 紧耦合给初值
- 算力紧但要稠密/半稠密信息(避障)
无论选哪种:
- 相机标定必须准(直接法对畸变更敏感)
- 监控跟踪质量指标:特征数 / 有效像素比例 / 残差中位数
- 丢失跟踪的门控与恢复策略比前端算法选择更重要
容易想错的地方
「直接法不用提特征所以更快」——光度 warp + 金字塔 + 曝光参数联合优化,总计算量未必比 ORB 少。「特征法精度低」——在正确 BA 后端下,特征法 subpixel 精度足够导航;直接法精度优势主要在弱 IMU、高精度重建场景。
曝光与 HDR
工厂里天窗/强反光会让直接法在同一帧内同时过曝和欠曝,仿射曝光模型 (a,b) 也不够。这类场景我会直接放弃纯直接法,或加 polarizer / 固定曝光,而不是硬调 DSO 参数。
光度标定
直接法有时需要 camera response linearization(gamma)或 vignetting 补偿。工业相机固定 gamma 时 DSO 的 (a,b) 够用;手机/网络摄像头 auto gamma 下,直接法往往不如 ORB 稳——这不是算法劣化,是传感器不在模型假设里。
事件相机
事件相机(DVS)可视为极端直接法——对比度极性而非强度。传统 DSO 不直接适用,但「光度 vs 特征」的权衡在 event VO 里同样存在:信息密度高,但对标定和运动模型更挑剔。
小结
直接法吃光照和初值;特征法吃纹理和匹配。现场选型先问环境,再问论文 SOTA。
参考
- Engel et al., LSD-SLAM / DSO
- Forster et al., SVO: Fast Semi-Direct Monocular Visual Odometry
- Mur-Artal et al., ORB-SLAM2 (特征法标杆)
相关
也可以看看
johan's blog