第3章 视觉SLAM特征点与光流法

本章聚焦于视觉SLAM前端核心:特征提取与匹配、光流跟踪,以及ORB与SIFT的工程对比。大厂面试中“复现能力”是高频考察点,要求候选人不仅理解原理,更能从工程实现角度阐述优化策略与效果权衡。

特征点与光流法 特征提取 ORB/SIFT/FAST 特征匹配 暴力匹配/FLANN 光流跟踪 LK稀疏/稠密 复现能力 公司侧高频追问 ▸ 回答框架:先分类讨论特征点与光流各自的适用场景 ▸ 复现能力:必须从源码实现(OpenCV/ORB-SLAM2)出发讲解 ▸ 加分点:结合实时性、光照鲁棒性、嵌入式部署

知识结构表格:特征点方法对比

维度 ORB SIFT 光流(LK)
旋转不变性中(灰度质心法)强(主方向)无(需补偿)
尺度不变性需图像金字塔固有金字塔光流
计算速度快(~ ms)慢(~ 百ms)快(稀疏点)
光照鲁棒性中好差(灰度不变假设)
公司侧偏好主流(ORB-SLAM)高精度场景VIO / 稠密重建

面试问答卡片

面试问题1:ORB与SIFT在SLAM中的选型依据是什么?

考察点:特征点原理理解、工程实时性、实际项目权衡。

回答框架:从旋转/尺度不变性、计算效率、匹配鲁棒性三个维度对比,结合具体项目场景(如嵌入式 vs 服务器)说明选型逻辑。

示例回答:“ORB使用FAST角点+BRIEF描述子,利用灰度质心法获取旋转,通过图像金字塔实现尺度不变性,计算速度约为SIFT的10倍。在ORB-SLAM2中0.5s内完成300点提取+匹配,而SIFT实时性不足。因此移动端/无人机首选ORB;若场景尺度剧烈变化且计算资源充沛,可选SIFT。”

可能追问:①如何保证ORB的旋转不变性精度?②能否用深度学习特征替代?③在弱纹理场景下特征点退化的解决方案?

避坑提醒:不要只背优缺点,必须结合实际帧率、特征点数量、匹配时间等具体数值(如30FPS下每帧特征点提取时间<10ms)。

面试问题2:光流法在SLAM前端的优缺点及改进方法?

考察点:光流数学基础(亮度不变、小运动、空间一致)、优缺点、工程改进。

回答框架:先阐述LK光流三大假设,再说明稀疏光流/稠密光流在SLAM中的典型应用,最后给出常见失败场景(快速运动、光照突变)的改进策略。

示例回答:“LK光流基于灰度不变性,计算速度快、无需提取描述子,但对大位移和光照敏感。改进方法包括:①构建图像金字塔处理大位移;②结合IMU预积分补偿快速运动;③使用反向组合算法提高效率。在VINS-Mono中,稀疏光流跟踪角点可稳定维持200个点,帧间平移<30°时鲁棒性较好。”

可能追问:①光流与特征点法如何融合?②亮度不变假设破坏时如何处理?③如何处理遮挡?

避坑提醒:避免只背公式,要能说出代码中OpenCV的calcOpticalFlowPyrLK参数设置(如winSize、maxLevel、criteria)及影响。

面试问题3:公司侧要求“复现能力”时,应如何准备?

考察点:代码阅读能力、模块独立复现、缺陷修复经验。

回答框架:①提出复现的粒度(单模块 vs 完整系统);②展示对ORB-SLAM2源码关键模块(如特征提取、地图点管理)的理解;③说明自己曾修复过的bug(如尺度漂移、初始化失败)。

示例回答:“我曾在ORB-SLAM2中复现并优化特征提取模块:将ORBextractor参数开放为ros param,并加入平行线剔除以过滤低质量点。复现时需注意图像金字塔层数、fast阈值对跟踪质量的影响,加载TUM数据集后跟踪成功率从85%提升至93%。”

可能追问:①复现过程中遇到工程问题(如内存泄露、线程安全)如何解决?②如何验证复现结果与原文一致?③能否手写光流跟踪的核心迭代步骤?

避坑提醒:不要只讲理论,一定要提具体代码模块(如ORBmatcher::SearchByProjection),并说明调试工具(如日志、可视化)。

项目案例模板

项目名称:基于ORB-SLAM2的室内机器人自主定位系统

业务背景:面向仓储AGV,要求低成本单目视觉+IMU实现±5cm定位精度,在光照变化和部分遮挡场景下稳定运行。

规模指标:5000m²仓库,15台AGV;定位精度RTK对比误差<0.05m;跟踪帧率30FPS;初始化时间<2s。

技术栈:ORB-SLAM2(C++)、OpenCV、Eigen、ROS、Intel Realsense D435。

核心难点:①弱纹理货架区域特征点缺失导致跟踪丢失;②快速转弯时光流跟踪失败;③多机器人重复场景下地图融合。

面试高频追问:①如何解决特征缺失?答:引入边缘特征点+光流金字塔扩大搜索窗口。②光流与特征点结合的优化?答:特征点丢失时启用光流预测位姿,采用RANSAC剔除离群点。③分布式系统下的实时性?答:每个AGV独立运行ORB-SLAM2轻量版,前端特征提取+跟踪<15ms。

可迁移回答话术:“该场景下我采用特征点+光流融合策略:在快速运动时使用光流跟踪,避免重新提取特征;在光照突变时通过直方图均衡化增强灰度一致性。通过将特征提取与光流放在不同线程,整体延迟降低30%。”