在介绍完 HOG 这种刻画整体轮廓的全局特征之后,我们来看一个同样基于梯度、但更精细、更强大的局部特征——SIFT(Scale-Invariant Feature Transform,尺度不变特征变换)

如果 HOG 是为整张图制作一张“形状身份证”,那么 SIFT 就是为图像上一个个关键的“兴趣点”分别制作独特的“指纹”。更厉害的是,无论这个兴趣点对应现实中的物体被拉远拉近、旋转、还是被部分遮挡,SIFT 的指纹几乎都能保持不变。


一、SIFT 的核心目标:什么在变,我自岿然不动

SIFT 要解决的是一系列“不变性”难题:

  • 尺度不变性:同一个物体,拍大一点(特写)和拍小一点(远景),应该能认出是同一个点。

  • 旋转不变性:一张图旋转 90 度,特征描述子应该还能匹配得上。

  • 光照不变性:亮度变化、对比度变化不影响匹配。

  • 视角/仿射不变性(一定限度内):从不同角度拍摄,特征依然稳定。

为了实现这个目标,SIFT 设计了一套精巧的四步流程。


二、SIFT 特征提取的四步曲

第1步:尺度空间极值检测——找到无论远近都存在的“候选点”

想象你近视眼,摘下眼镜看一幅画,只能看清大轮廓;戴上眼镜,精细纹理才浮现。要找出画中真正稳定的特征点,就必须在不同模糊程度下都去观察一次

  • 构建高斯金字塔:SIFT 把图像层层缩小(像金字塔一样),每一层又用不同的高斯模糊程度去处理,模拟出不同尺度(近看/远看)的视觉效果。

  • 构建高斯差分(DoG)金字塔:在每一层内,用相邻的两个模糊程度相减。这相当于用“带通滤波器”去找出某个特定尺度下才显现的边缘和斑点。

  • 极值点检测:在 DoG 空间中,每一个像素点不仅要和自己周围的 8 个邻居比,还要和上一层、下一层的 9+9=18 个邻居比。只有当它是这 26 个点中的“最大值”或“最小值”时,才被认为是一个候选关键点

这一步,我们得到了一堆“在某个尺度下很突出”的点,但它们还很粗糙。

第2步:关键点精确定位——淘汰不稳定的“边缘户”

初筛出来的候选点很多都是沿边缘分布的,或者对比度极低,很容易被噪声淹没。这一步要把它们踢出局。

  • 精确定位亚像素坐标:通过对 DoG 函数进行泰勒展开,找到极值点的精确位置,精度能达到亚像素级别。

  • 剔除低对比度点:如果该点的对比度绝对值低于某个阈值,直接丢弃。

  • 剔除边缘响应点:边缘上的点很难精确定位,而且不稳定。SIFT 利用该点周围海森矩阵的特征值关系,计算一个“主曲率比值”。如果这个比值过大,说明该点在边缘上(一个方向变化剧烈,垂直方向平坦),像个刀刃,而不是像角点那样在各个方向都变化显著,因而被淘汰。

经过这一步筛选留下的,是真正稳定的关键点,而且每个关键点都被赋予了精确的坐标和它所属的尺度

第3步:方向分配——给每个点一个“指南针”

为了让特征在图片旋转后还能匹配,SIFT 需要为每个关键点确定一个“主场方向”。

  • 统计局部梯度:在以关键点为中心的周围圆形区域内,统计所有像素的梯度方向和大小,形成一个方向直方图(通常是 36 个柱,覆盖 0~360 度)。

  • 分配主方向:直方图的最高峰所对应的方向,就是该关键点的主方向。如果有其他峰值超过最高峰的 80%,则会再创建一个新的关键点,并赋予它这个次要方向,以增强匹配的稳定性。

  • 至此,每个关键点都拥有了坐标、尺度、方向三个核心属性

第4步:关键点描述子生成——制作独一无二的“指纹”

这是最后也是最关键的一步,为这个关键点建立一个能描述它周围“邻里环境”的特征向量。

  • 对齐主方向:把关键点周围的图像块旋转到它的主方向上,以消除旋转的影响。

  • 划分区域:把这个图像块划分成 4×4 = 16 个子区域。

  • 统计 8 方向梯度直方图:在每个子区域内,计算 8 个方向(0,45,90,...,315 度)的梯度累加值,形成一个 8 维的向量。

  • 拼接与归一化:把 16 个子区域的 8 维向量按顺序串起来,得到一个 128 维 的特征向量。最后对这个向量进行 L2 归一化,以应对光照变化。

这个 128 维的向量,就是该关键点的 SIFT 描述子。当两张图中两个关键点的 SIFT 描述子在欧氏距离上最近,且比值小于阈值时,我们就认为它们匹配上了。


三、SIFT 与 HOG 的对比

特性 HOG SIFT
特征粒度 全局特征,描述整张图 局部特征,描述一个个关键点
核心步骤 在密集网格的单元格里统计梯度方向 在稀疏且经筛选的关键点周围统计梯度方向
尺度不变性 无(除非构建图像金字塔分别计算) 天生具有,通过 DoG 空间筛选
旋转不变性 天生具有,通过分配主方向并对齐
典型应用 行人检测(配合 SVM) 图像拼接、3D 重建、对象识别

四、SIFT 的优缺点

突出优点:

  • 多变的鲁棒性:对尺度缩放、旋转、亮度变化、仿射变换(一定限度)、视角变化、噪声都相当稳定。

  • 特征丰富且独特:每一个关键点都拥有 128 维的信息,在大量特征库中也能进行近乎精确的匹配。

  • 可重复性高:同一场景在不同图像中能被大量检测出来。

主要局限:

  • 计算复杂度高:步骤多,速度慢,很难做到实时。

  • 专利问题(曾长期存在):SIFT 算法专利曾由英属哥伦比亚大学持有,虽然在 2020 年已到期,但历史上这限制了它在开源项目中的使用,也催生了像 SURF、ORB 等免专利替代算法。

  • 对弱纹理/模糊目标效果差:如果目标表面光滑,没有足够的纹理去产生稳定的角点或斑点,SIFT 就可能提取不到足够的关键点。


五、SIFT 的典型应用

  • 图像拼接/全景图:这是 SIFT 的成名作。找出多张有重叠的照片中大量的 SIFT 特征点,进行匹配,计算出单应性矩阵,就能把它们无缝拼成一张全景图。

  • 基于图像的 3D 建模:通过从不同角度拍摄的大量照片,提取 SIFT 特征点进行匹配和运动推断结构(SfM),重建出物体的三维点云。

  • 对象识别/检索:预先为物体提取 SIFT 特征库,当新图像到来时,进行特征匹配,投票决定物体的存在与位置。

  • 视觉里程计/即时定位与地图构建(SLAM):在机器人或自动驾驶中,SIFT 特征点可以用于连续帧之间的运动估计和环境建图。


六、总结框图

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐