OpenCV:SIFT关键点检测与描述子计算

ops/2025/2/6 21:21:59/

目录

1. 什么是 SIFT?

2. SIFT 的核心步骤

2.1 尺度空间构建

2.2 关键点检测与精细化

2.3 方向分配

2.4 计算特征描述子

3. OpenCV SIFT API 介绍

3.1 cv2.SIFT_create()

3.2 sift.detect()

3.3 sift.compute()

3.4 sift.detectAndCompute()

4. SIFT 关键点检测与描述子计算示例

5. SIFT 的应用场景

总结


1. 什么是 SIFT?

SIFT(Scale-Invariant Feature Transform,尺度不变特征变换) 是由 David Lowe 在 1999 年提出的一种关键点检测与描述子计算方法。它的核心优势是: 尺度不变性:可以检测不同大小的特征点。

  • 旋转不变性:特征点不受旋转影响。
  • 光照鲁棒性:能够适应不同光照条件。
  • 稳定可靠:适用于图像匹配、目标识别、目标跟踪等任务。

SIFT 主要由 关键点检测(Keypoint Detection)特征描述子计算(Descriptor Computation) 两个部分组成。本文将详细介绍 SIFT 的原理,并结合 OpenCV 实现 SIFT 关键点检测和特征描述子的计算。


2. SIFT 的核心步骤

SIFT 主要包括以下几个关键步骤:

2.1 尺度空间构建

  • 通过 高斯金字塔 生成不同尺度的图像。
  • 计算 高斯差分 ,在多尺度空间找到潜在的关键点。

2.2 关键点检测与精细化

  • 通过泰勒展开对关键点进行精细调整,去除边缘响应和低对比度点。

2.3 方向分配

  • 计算关键点周围的 梯度直方图,赋予每个关键点一个主方向,使其具有旋转不变性。

2.4 计算特征描述子

  • 在关键点周围生成一个 128 维的 特征向量(描述子)。
  • 该描述子用于匹配和识别相似特征点。

3. OpenCV SIFT API 介绍

在 OpenCV 中,SIFT 由 cv2.SIFT_create() 提供,主要有以下三个核心函数:

3.1 cv2.SIFT_create()

创建 SIFT 关键点检测器和特征提取器。

sift = cv2.SIFT_create()

3.2 sift.detect()

用于 关键点检测,返回检测到的 keypoints(关键点列表)。

keypoints = sift.detect(gray, None)

3.3 sift.compute()

用于 计算描述子,返回关键点 keypoints 及其对应的 descriptors(特征向量)。

keypoints, descriptors = sift.compute(gray, keypoints)

3.4 sift.detectAndCompute()

同时进行关键点检测和描述子计算,推荐使用:

keypoints, descriptors = sift.detectAndCompute(gray, None)

返回值说明

  • keypoints:关键点列表,每个关键点包含坐标、尺度、方向等信息。
  • descriptors:特征描述子矩阵,形状为 (N, 128),其中 N 是关键点个数,每个关键点对应一个 128 维特征向量。

4. SIFT 关键点检测与描述子计算示例

# 关键点与描述子
# 关键点: 位置、大小和方向
# 描述子:记录了关键点周围对其有贡献的像素点的一组向量值,
# 其不受仿射变换、光照变换等影响# 描述子的作用是进行特征匹配import cv2
import numpy as np# 读取图像
image = cv2.imread("D:\\resource\\filter\\shudu.jpg")# 灰度化
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)# 创建SIFT对象
sift = cv2.xfeatures2d.SIFT_create()# 关键点检测 与 计算描述子
key_points,des = sift.detectAndCompute(gray, None)
print(des)# 将keypoints绘制出来
cv2.drawKeypoints(gray, key_points, image)# 显示结果
cv2.imshow("image", image)
cv2.waitKey(0)
cv2.destroyAllWindows()

▶️运行结果:

\

▶️打印描述子:

5. SIFT 的应用场景

SIFT 具有 尺度、旋转、光照不变性,适用于以下场景:

应用领域应用案例
图像匹配物体识别、全景拼接、商标识别
目标跟踪机器人视觉导航、运动检测
特征提取三维重建、立体匹配
图像检索通过 SIFT 关键点匹配数据库图像
自动驾驶车道检测、SLAM(同时定位与建图)

总结

  • SIFT 是经典的特征检测算法,可用于关键点检测、特征描述和图像匹配。
  • OpenCV 提供了 cv2.SIFT_create() API,可以高效检测关键点并计算 128 维特征描述子。
  • SIFT 具有鲁棒性强、匹配精度高的特点,适用于 目标识别、图像匹配、三维重建 等任务。
  • 若计算速度是关键因素,可考虑 ORB(免费)或 SURF(更快,但有专利限制)。

 继续学习中,后续补充其它特征检测与特征匹配相关的知识!


http://www.ppmy.cn/ops/156249.html

相关文章

OSPF邻接关系无法建立之MTU问题

OSPF中路由器间从邻居到建立完全邻接需满足以下条件: 1、邻居之间网络通 2、建立邻接的接口不能为OSPF被动接口 3、两台路由器的HELLO时间间隔和DEAD时间间隔必须一致 4、两台路由器的router-id 必须不同 5、如果开了OSPF认证,认证方式和KEY必须一致 6、两台路由器建立…

FreeRTOS学习 --- 列表和列表项

列表和列表项的简介 列表是 FreeRTOS 中的一个数据结构,概念上和链表有点类似,列表被用来跟踪 FreeRTOS中的任务。 列表项就是存放在列表中的项目 列表相当于链表,列表项相当于节点,FreeRTOS 中的列表是一个双向环形链表。 列表…

AWS门店人流量数据分析项目的设计与实现

这是一个AWS的数据分析项目,关于快消公司门店手机各个门店进店人流量和各个产品柜台前逗留时间(利用IoT设备采集)和销售数据之间的统计分析,必须用到但不限于Amazon Kensis Data Stream,Spark Streaming,Sp…

本地Ollama部署DeepSeek R1模型接入Word

目录 1.本地部署DeepSeek-R1模型 2.接入Word 3.效果演示 4.问题反馈 上一篇文章办公新利器:DeepSeekWord,让你的工作更高效-CSDN博客https://blog.csdn.net/qq_63708623/article/details/145418457?spm1001.2014.3001.5501https://blog.csdn.net/qq…

使用 Postman 进行 API 测试:从入门到精通

使用 Postman 进行 API 测试:从入门到精通 使用 Postman 进行 API 测试:从入门到精通一、什么是 API 测试?二、Postman 简介三、环境搭建四、API 测试流程1. 收集 API 文档2. 发送基本请求示例:发送 GET 请求示例代码(…

【Linux】开发工具make/Makefile、进度条小程序

Linux 1.make/Makefile1.什么是make和Makefile?2.stat命令3.Makefile单个文件的写法4.Makefile多个文件的写法 2.进度条1.回车\r、换行\n2.缓冲区3.进度条1.倒计时程序2.进度条程序 1.make/Makefile 1.什么是make和Makefile? 一个工程中的源文件不计其…

技术架构师成长路线(2025版)

目录 通用知识 计算机原理(1 - 2 个月) 数据结构(2 - 3 个月) 网络编程(1 - 2 个月) 软件工程(1 个月) 基础知识 Java 编程语言基础(2 - 3 个月) JVM&…

阿里 Java 岗个人面经分享(技术三面 + 技术 HR 面):Java 基础 +Spring+JVM+ 并发编程 + 算法 + 缓存

技术一面 20 分钟 1、自我介绍 说了很多遍了,很流畅捡重点介绍完。 2、问我数据结构算法好不好 挺好的(其实心还是有点虚,不过最近刷了很多题也只能壮着胆子充胖子了) 3、找到单链表的三等分点,如果单链表是有环的…