SIFT

SIFT(Scale-Invariant Feature Transform,尺度不变特征变换) 由David Lowe于2004年发表,是尺度与旋转不变局部特征的里程碑式算法。它确立了检测器+描述子的模板,ORB、AKAZE、SuperPoint等算法至今仍沿用这一模板,并且在匹配精度上(例如在COLMAP式离线重建中)仍是黄金标准。

关键点检测:尺度空间中的斑点

SIFT检测的是斑点(blob)而不是角点,并且是跨尺度检测的,这样无论同一个世界结构在图像中显得大还是小,都能被找到。通过用不断增大的尺度 σ\sigma 的高斯核对图像进行卷积来构建高斯尺度空间

L(x,y,σ)=G(x,y,σ)I(x,y)L(x, y, \sigma) = G(x, y, \sigma) * I(x, y)

相邻尺度之间的**高斯差分(Difference of Gaussians, DoG)**以极低的代价近似尺度归一化的高斯拉普拉斯算子(一种斑点检测器):

D(x,y,σ)=L(x,y,kσ)L(x,y,σ)D(x, y, \sigma) = L(x, y, k\sigma) - L(x, y, \sigma)

尺度空间被组织成若干组(octave)(每组之间图像下采样2倍),每组内又有若干个尺度——这是一个图像金字塔,金字塔的每一层内又有多个模糊级别。

关键点是 DD 在空间和尺度上的局部极值:每个采样点与其在 (x,y,σ)(x, y, \sigma) 构成的 3×3×33 \times 3 \times 3 立方体内的26个邻居进行比较。候选点随后经过:

  1. 精细化到亚像素/亚尺度精度,通过在极值点周围拟合一个二次函数(对 DD 做二阶泰勒展开)实现;
  2. 按对比度过滤——D|D| 值较小的极值不稳定,会被剔除;
  3. 按边缘响应过滤——DoG在边缘方向上响应很强,而边缘上的定位很差。与Harris检测类似,通过对主曲率之比(DD2×22 \times 2 Hessian矩阵的特征值之比)设阈值,只保留斑点状、定位良好的点。

描述子:128维梯度直方图

匹配

SIFT描述子是浮点向量,用L2距离进行比较。用Lowe比率测试过滤模糊匹配:只有当 d1/d2<0.8d_1 / d_2 < 0.8 时才接受最近邻,其中 d1,d2d_1, d_2 分别是到最近邻和次近邻的距离。对于大型数据库,近似最近邻结构(kd树、FLANN)替代了暴力搜索——SIFT的128维已接近kd树实用性的极限。

计算代价

SIFT精度很高但速度较慢——在CPU上,处理一张高分辨率图像大约需要一秒量级——这也是实时SLAM历史上转而采用FAST/ORB的原因,也是在线场景下需要SIFT级鲁棒性时会使用GPU实现或二值化替代方案的原因。

对SLAM的意义

动手实践

相关条目