获取 YOLO 许可
返回 Ultralytics 术语表

Scale-Invariant Feature Transform (SIFT)

尺度不变特征变换(SIFT)是一种经典算法,可检测关键点并生成在缩放和旋转下保持稳定的 128 维描述符。

尺度不变特征变换(SIFT)是一种经典的计算机视觉算法,可在图像中检测独特的局部关键点,并用一个 128 维向量描述每个关键点;图像缩放或旋转时,该向量基本保持不变。匹配这些描述符可以让软件关联从不同距离和角度拍摄的同一场景的两张照片,这也是将重叠照片拼接成全景图的方式。SIFT 是一种人工设计的特征提取方法,不同于卷积神经网络学习得到的特征图。

起源与核心思想#

不列颠哥伦比亚大学的 David Lowe 在 1999 年 ICCV 论文《基于局部尺度不变特征的目标识别》中介绍了 SIFT,并在 2004 年发表于《国际计算机视觉杂志》的论文《从尺度不变关键点提取独特图像特征》中作了完整阐述。SIFT 特征具有尺度和旋转不变性,并且在相当大范围的仿射畸变、3D 视角变化、噪声和光照变化下都能稳健匹配。该方法曾获专利,专利于 2020 年到期。OpenCV在 4.4.0 版本中将 SIFT 从 contrib 仓库移入主库。

物体在照片中的尺寸并不固定,因此检测器必须在各种尺寸下寻找结构。SIFT 通过反复以逐渐增强的程度应用高斯模糊,并按称为八度的组进行下采样,从而构建尺度空间。

SIFT 的工作原理#

该算法分为四个阶段:

  1. 尺度空间极值检测:相邻模糊层级之间的差异(高斯差分)可以近似充当斑点检测器。如果一个像素在空间和尺度上都比其 26 个邻居更大或更小,它就会成为候选点。
  2. 关键点定位:将候选点细化到亚像素精度。对比度较低的点以及位于边缘上的点会被丢弃,因为它们不稳定。
  3. 方向分配:统计每个关键点周围局部梯度方向的直方图,以确定主方向;之后的所有测量都相对于该方向进行。这使算法具有旋转不变性。
  4. 描述符构建:将邻域划分为 4 x 4 网格,每个单元格包含一个 8 个区间的梯度直方图。这样共得到 4 x 4 x 8 = 128 个值,并对其进行归一化以降低对光照的敏感度。

通过欧氏距离比较描述符。Lowe 比率检验仅在最佳邻居明显比次佳邻居更近时才保留匹配。使用k 近邻搜索并设定 k = 2,即可获得这两个距离。

import cv2
from ultralytics.utils import ASSETS

# Load a sample image in grayscale and a half-size copy
img = cv2.imread(str(ASSETS / "bus.jpg"), cv2.IMREAD_GRAYSCALE)
small = cv2.resize(img, None, fx=0.5, fy=0.5)

# Detect keypoints and compute 128-dimensional descriptors
sift = cv2.SIFT_create()
kp1, des1 = sift.detectAndCompute(img, None)
kp2, des2 = sift.detectAndCompute(small, None)

# Match half-size descriptors to full-size ones, then apply Lowe's ratio test
pairs = cv2.BFMatcher().knnMatch(des2, des1, k=2)
good = [m for m, n in pairs if m.distance < 0.8 * n.distance]
print(f"{len(good)} of {len(kp2)} half-size keypoints matched at full size")

输出的计数表示在半尺寸图像中找到的关键点有多少能在全尺寸图像中再次识别出来,这体现了尺度不变性。

应用场景#

SIFT 成为几何视觉任务中的默认局部特征:

  • 全景图拼接:Brown 和 Lowe 的自动全景图拼接方法(IJCV 2007)会匹配重叠照片之间的 SIFT 特征,并估计单应性来对齐照片;这种对齐步骤称为图像配准。
  • 3D 重建:Photo Tourism(Snavely、Seitz 和 Szeliski,2006)会匹配游客照片中的 SIFT 特征,并利用极线几何恢复相机姿态和稀疏的3D 结构。
  • 机器人定位:Se、Lowe 和 Little(2001)使用 SIFT 地标进行移动机器人定位与建图,这是现代视觉 SLAM的前身。
  • 实例识别:Lowe 在 2004 年的论文中展示了如何在杂乱且部分遮挡的场景中,仅凭 3 个匹配特征识别出一辆玩具火车和一只青蛙。

在 Ultralytics YOLO 目标跟踪中,BoT-SORT 会补偿帧间的相机运动;在跟踪器配置中设置 gmc_method: sift,即可使用 SIFT 匹配来估算相机运动,而非使用默认的稀疏光流。

SIFT 能够在不同视图中匹配同一物理点,因此适用于对应关系和几何分析。目标检测则会预测物体的类别和位置。模板匹配会滑动固定图块,遇到尺度或旋转变化时就会失效。

与 ORB 相比,SIFT 速度较慢。ORB 是 Rublee 等人在 2011 年提出的一种二进制描述符,旨在作为 SIFT 和 SURF 的替代方案。SIFT 在无纹理表面以及视角变化非常大时也表现不佳;对于类别级识别,学习型模型在很大程度上已经取代了它。

在 Lowe 2004 年的测试中,对于具有随机尺度和旋转变化、30 度深度旋转及 2% 噪声的图像,与 40,000 个关键点进行匹配时,剔除距离比高于 0.8 的匹配可消除 90% 的错误匹配,同时丢弃不到 5% 的正确匹配。

探索解决方案

体育领域的计算机视觉

体育领域的计算机视觉

了解 Ultralytics YOLO 如何通过球员和球追踪、表现分析、教练洞察及运动员康复,推动体育视觉技术的发展。
了解详情
航空影像计算机视觉

航空影像计算机视觉

使用 Ultralytics YOLO 将无人机和航空影像转化为农业、水产养殖、保护工作和地理空间分析的实时洞察。
了解详情
航空航天中的计算机视觉

航空航天中的计算机视觉

使用 Ultralytics YOLO 将计算机视觉应用于航空航天领域,包括飞机检查、跑道 FOD 检测、机场地面作业和复合材料缺陷检测。
了解详情
安防领域的计算机视觉

安防领域的计算机视觉

使用 Ultralytics YOLO 模型守护每个场所。视觉 AI 可用于周界监控、威胁检测、车牌识别和工作场所安全。
了解详情
机器人领域的计算机视觉

机器人领域的计算机视觉

使用 Ultralytics YOLO 模型提升智能机器的能力。机器人领域的视觉 AI 可用于自主导航、感知、目标跟踪和实时控制。
了解详情
物流中的计算机视觉

物流中的计算机视觉

借助 Ultralytics YOLO 模型优化物流流程。视觉 AI 可用于包裹检查、分拣、车辆跟踪和仓库安全实时监控。
了解详情
零售中的计算机视觉

零售中的计算机视觉

借助 Ultralytics YOLO 模型重新构想零售。视觉 AI 可用于库存跟踪、货架监控、排队管理和更深入的客户洞察。
了解详情
医疗领域的计算机视觉

医疗领域的计算机视觉

借助 Ultralytics YOLO 模型构建医疗解决方案。医疗领域的视觉 AI 可加快医学影像处理、优化诊断并监测患者。
了解详情
制造业中的计算机视觉

制造业中的计算机视觉

利用 Ultralytics YOLO 模型优化制造流程。视觉 AI 可用于质量控制、缺陷检测、个人防护装备合规检查和装配线自动化。
了解详情
汽车领域的计算机视觉

汽车领域的计算机视觉

利用 Ultralytics YOLO 模型在汽车领域应用计算机视觉。视觉 AI 可提升道路安全、驾驶辅助和车辆自动化水平,让道路更智能。
了解详情
农业中的计算机视觉

农业中的计算机视觉

借助 Ultralytics YOLO 模型,将视觉 AI 引入智慧农业。为作物监测、牲畜追踪和精准农业提供支持,从而提高产量并实现更智能的生产。
了解详情

让我们携手构建 AI 的未来!

开启你的旅程,迎接机器学习的未来