Keypoints

**关键点(keypoint)**是图像中一个具有可重复几何结构的显著位置——角点、斑点或边缘交汇处——能够在同一场景的另一幅图像中被再次找到。**描述子(descriptor)**是编码关键点周围局部外观的紧凑数值签名,使得在视角和光照变化下仍能跨图像匹配。检测器(detector)(找到位置)与描述子(descriptor)(编码内容)共同构成了基于特征的SLAM前端的基本词汇。

关键点有用的两个特性:

经典谱系

方法检测器描述子备注
SIFT (2004)尺度空间中的DoG斑点128维梯度直方图精度很高;CPU上速度慢
FAST (2006)16像素圆周上连续的明/暗弧段极快的角点测试
ORB (2011)oFAST(FAST + 灰度质心方向)rBRIEF,256位二进制SLAM主力(ORB-SLAM)
AKAZE (2013)非线性扩散尺度空间二进制(M-LDB)相比高斯尺度空间更好地保留边缘

SIFT尺度空间中检测斑点:图像与不断增大尺度的高斯核卷积,L(x,y,σ)=G(x,y,σ)I(x,y)L(x,y,\sigma) = G(x,y,\sigma) * I(x,y)高斯差分(Difference of Gaussians)D(x,y,σ)=L(x,y,kσ)L(x,y,σ)D(x,y,\sigma) = L(x,y,k\sigma) - L(x,y,\sigma)近似高斯拉普拉斯斑点检测器。关键点是DD在空间和尺度上的局部极值,通过二次拟合精细化到亚像素精度,并根据对比度和边缘响应进行筛选。描述子从局部梯度直方图中确定一个主方向,然后构建一个4×44\times4的8-bin梯度直方图网格——一个128维向量,为光照不变性进行归一化。SIFT非常精确但速度慢(在CPU上处理一张高分辨率图像大约需要一秒),这限制了它在实时SLAM中的应用。

FAST走向了另一个极端:如果以像素pp为中心、半径为3的圆周上16个像素中有连续n12n \ge 12个像素相比IpI_p均超过阈值tt地更亮或更暗,则该像素为角点。一个加速测试首先只检查四个方位像素——如果通过的少于三个,pp就不可能是角点。FAST没有描述子,也没有方向或尺度信息;它是一个需要与描述子搭配使用的检测基元。

ORB是实时SLAM几乎普遍采用的组合方案。它通过灰度质心为FAST添加方向信息——利用patch矩mpq=x,yxpyqI(x,y)m_{pq} = \sum_{x,y} x^p y^q I(x,y),方向为θ=atan2(m01,m10)\theta = \mathrm{atan2}(m_{01}, m_{10})——并将BRIEF的二进制采样模式按θ\theta旋转以获得旋转不变性(rBRIEF)。256位描述子只需32字节,匹配时使用XOR + popcount指令计算的汉明距离——足够快,能在每帧中匹配数千个特征。尺度不变性来自在图像金字塔上进行检测。

AKAZE用非线性扩散滤波而非高斯模糊来构建其尺度空间,这样能更好地保留边缘,在边界附近获得更精确的关键点;“加速”部分指的是快速显式扩散(FED),它将计算成本降到了实用水平。

从检测到匹配

检测只是前端的一半;几何部分消费的是匹配结果:

每帧都进行检测与匹配的替代方案是跟踪(tracking):用金字塔Lucas-Kanade(KLT)在连续帧之间跟踪关键点,并用正向-反向检查剔除不可靠的轨迹——成本更低,是许多VIO系统的标准前端。

SLAM系统在此基础上的补充

学习型的一代

学习型检测器/描述子用为可重复性和独特性训练的网络取代了手工设计。SuperPoint采用自监督训练:先在合成形状上预训练,再通过在合成同调变换下对真实图像自标注进行微调(“同调自适应”);一个共享编码器同时馈送一个检测头(关键点分数图)和一个描述子头(稠密描述子图)。R2D2预测两张独立的图——可重复性(这个点会再次被检测到吗?)和可靠性(它的描述子是否具有独特性?)——只保留两者都高的点,这在无纹理或重复纹理区域很有帮助。这些通常在更后面的层级与SuperGlue等学习型匹配器配对使用。

在SLAM流水线中,关键点是下游一切工作的原材料:用于初始化和本质矩阵估计的2D-2D对应关系,用于位姿跟踪(PnP)的2D-3D对应关系,三角化为3D地图点,以及用于回环检测的视觉词袋场景识别。

对SLAM的意义

基于特征的(间接)SLAM——从PTAM到ORB-SLAM3的主流范式——完全立足于关键点:所检测特征的质量、速度和分布决定了整个系统精度与鲁棒性的上限。理解检测器/描述子的权衡(精度与帧率、二进制与浮点描述子、手工设计与学习型)对于读论文以及为你的计算预算选择前端这一非常实际的任务都至关重要。

动手实践

相关条目