Keypoints
**关键点(keypoint)**是图像中一个具有可重复几何结构的显著位置——角点、斑点或边缘交汇处——能够在同一场景的另一幅图像中被再次找到。**描述子(descriptor)**是编码关键点周围局部外观的紧凑数值签名,使得在视角和光照变化下仍能跨图像匹配。检测器(detector)(找到位置)与描述子(descriptor)(编码内容)共同构成了基于特征的SLAM前端的基本词汇。
关键点有用的两个特性:
- 可重复性(Repeatability):同一个物理点在不同视角、尺度或光照下能被再次检测到。
- 独特性(Distinctiveness):其描述子与其他点的描述子有足够的差异,使匹配不产生歧义。
经典谱系
| 方法 | 检测器 | 描述子 | 备注 |
|---|---|---|---|
| SIFT (2004) | 尺度空间中的DoG斑点 | 128维梯度直方图 | 精度很高;CPU上速度慢 |
| FAST (2006) | 16像素圆周上连续的明/暗弧段 | 无 | 极快的角点测试 |
| ORB (2011) | oFAST(FAST + 灰度质心方向) | rBRIEF,256位二进制 | SLAM主力(ORB-SLAM) |
| AKAZE (2013) | 非线性扩散尺度空间 | 二进制(M-LDB) | 相比高斯尺度空间更好地保留边缘 |
SIFT在尺度空间中检测斑点:图像与不断增大尺度的高斯核卷积,,高斯差分(Difference of Gaussians)近似高斯拉普拉斯斑点检测器。关键点是在空间和尺度上的局部极值,通过二次拟合精细化到亚像素精度,并根据对比度和边缘响应进行筛选。描述子从局部梯度直方图中确定一个主方向,然后构建一个的8-bin梯度直方图网格——一个128维向量,为光照不变性进行归一化。SIFT非常精确但速度慢(在CPU上处理一张高分辨率图像大约需要一秒),这限制了它在实时SLAM中的应用。
FAST走向了另一个极端:如果以像素为中心、半径为3的圆周上16个像素中有连续个像素相比均超过阈值地更亮或更暗,则该像素为角点。一个加速测试首先只检查四个方位像素——如果通过的少于三个,就不可能是角点。FAST没有描述子,也没有方向或尺度信息;它是一个需要与描述子搭配使用的检测基元。
ORB是实时SLAM几乎普遍采用的组合方案。它通过灰度质心为FAST添加方向信息——利用patch矩,方向为——并将BRIEF的二进制采样模式按旋转以获得旋转不变性(rBRIEF)。256位描述子只需32字节,匹配时使用XOR + popcount指令计算的汉明距离——足够快,能在每帧中匹配数千个特征。尺度不变性来自在图像金字塔上进行检测。
AKAZE用非线性扩散滤波而非高斯模糊来构建其尺度空间,这样能更好地保留边缘,在边界附近获得更精确的关键点;“加速”部分指的是快速显式扩散(FED),它将计算成本降到了实用水平。
从检测到匹配
检测只是前端的一半;几何部分消费的是匹配结果:
- 暴力匹配(Brute force):将每个描述子与其他所有描述子逐一比较——浮点描述子(SIFT、SuperPoint)用L2距离,二进制描述子(ORB、BRIEF)用汉明距离。**Lowe比率测试(Lowe’s ratio test)**过滤有歧义的匹配:只有当最近距离明显小于次近距离时才接受(例如)。
- 近似搜索:FLANN在随机化kd树(浮点描述子)和局部敏感哈希(二进制描述子)之间进行选择,以支持大规模匹配。
- 几何验证:存活下来的匹配仍可能包含外点;对极几何或PnP模型上的RANSAC完成最后的清理。
每帧都进行检测与匹配的替代方案是跟踪(tracking):用金字塔Lucas-Kanade(KLT)在连续帧之间跟踪关键点,并用正向-反向检查剔除不可靠的轨迹——成本更低,是许多VIO系统的标准前端。
SLAM系统在此基础上的补充
- 空间分布:当所有特征都聚集在一个有纹理的物体上时,精度会受损。ORB-SLAM风格的系统在图像网格上强制每个单元格的特征数量预算(并用四叉树细化),使特征覆盖整幅画面。
- 非极大值抑制和每层阈值防止检测器在同一个角点上多次触发。
- 金字塔记录:一个特征被检测到的金字塔层级定义了对应地图点日后能被重新检测到的尺度范围。
学习型的一代
学习型检测器/描述子用为可重复性和独特性训练的网络取代了手工设计。SuperPoint采用自监督训练:先在合成形状上预训练,再通过在合成同调变换下对真实图像自标注进行微调(“同调自适应”);一个共享编码器同时馈送一个检测头(关键点分数图)和一个描述子头(稠密描述子图)。R2D2预测两张独立的图——可重复性(这个点会再次被检测到吗?)和可靠性(它的描述子是否具有独特性?)——只保留两者都高的点,这在无纹理或重复纹理区域很有帮助。这些通常在更后面的层级与SuperGlue等学习型匹配器配对使用。
在SLAM流水线中,关键点是下游一切工作的原材料:用于初始化和本质矩阵估计的2D-2D对应关系,用于位姿跟踪(PnP)的2D-3D对应关系,三角化为3D地图点,以及用于回环检测的视觉词袋场景识别。
对SLAM的意义
基于特征的(间接)SLAM——从PTAM到ORB-SLAM3的主流范式——完全立足于关键点:所检测特征的质量、速度和分布决定了整个系统精度与鲁棒性的上限。理解检测器/描述子的权衡(精度与帧率、二进制与浮点描述子、手工设计与学习型)对于读论文以及为你的计算预算选择前端这一非常实际的任务都至关重要。