当前位置: 首页 > news >正文

图像特征提取-SIFT

文章目录

  • 一、定义与原理
  • 二、主要步骤
  • 三、特点与优势
  • 四、代码运用
  • 五、应用领域

图像特征提取中的SIFT(Scale-Invariant Feature Transform,尺度不变特征变换)是一种强大的局部特征提取算法,广泛应用于计算机视觉和图像处理领域。以下是对SIFT特征提取的详细解释:

一、定义与原理

SIFT算法通过检测图像中的局部特征点,并计算这些特征点的描述符,从而实现图像的匹配和识别。这些特征点具有尺度不变性和旋转不变性,即使图像发生尺度缩放、旋转或光照变化,也能够被准确识别和匹配。

二、主要步骤

SIFT特征提取主要包括以下四个步骤:

  • 尺度空间极值检测:

    • 首先,将图像转换为不同尺度的金字塔,每个尺度上的图像都经过高斯模糊处理。
    • 然后,在每个尺度上应用高斯差分算子(Difference of Gaussian,DoG)来检测潜在的极值点,这些极值点即为候选的关键点。
  • 关键点定位:

    • 对每个候选关键点进行精确定位,通过拟合精细的模型来确定其精确位置和尺度.
  • 排除掉低对比度和边缘响应过强的点,以提高关键点的稳定性和可靠性。

  • 方向分配:

    • 基于图像局部的梯度方向,为每个关键点分配一个或多个方向。
    • 使用直方图统计关键点邻域内像素的梯度方向和幅值,确定关键点的主方向和一个或多个辅方向。
  • 关键点描述:

    • 在关键点周围的邻域内,测量图像局部的梯度,并计算梯度方向和幅值。
    • 将邻域划分为若干个子区域(如4x4),在每个子区域内计算梯度直方图,并将所有子区域的直方图连接起来形成一个高维向量(如128维),作为关键点的描述符。

三、特点与优势

  • 尺度不变性:通过在不同尺度的图像上检测关键点,SIFT特征能够应对图像的尺度缩放变化。
  • 旋转不变性:为每个关键点分配方向信息,使得SIFT特征具有旋转不变性。
  • 光照和视角变化鲁棒性:由于SIFT特征是基于图像的局部梯度信息计算的,因此对光照和视角变化具有一定的鲁棒性。
  • 独特性:每个关键点的描述符都是唯一的,能够有效地区分不同的图像特征。

四、代码运用

import cv2  
import numpy as np  # 读取图像  
jijia = cv2.imread('3.png')  # 创建SIFT对象  
sift = cv2.SIFT_create()  # 检测关键点  
kp = sift.detect(jijia)  # 打印关键点的坐标  
for x in kp:  print(x.pt)  # 绘制关键点(不需要特殊标志)  
jijia_sift = cv2.drawKeypoints(jijia, kp, None, flags=0)  # 或者直接写 cv2.drawKeypoints(jijia, kp, None)  # 显示图像  
cv2.imshow('jijia_sift', jijia_sift)  
cv2.waitKey(0)  
cv2.destroyAllWindows()  # 不要忘记关闭所有窗口  # 计算描述符  
kp, des = sift.compute(jijia, kp)  # 打印关键点和描述符的形状  
print(np.array(kp).shape, des.shape)
  • 读取图像:读取目标图像

  • 创建SIFT对象 :使用cv2.SIFT_create()函数创建一个SIFT(尺度不变特征变换)对象。SIFT是一种用于图像特征检测的算法,能够检测出图像中的关键点,并基于这些关键点计算描述符,这些描述符对于图像的尺度缩放、旋转甚至光照变化都具有一定的不变性。

  • 检测绘制关键点并打印坐标:使用SIFT对象的detect()方法在图像jijia上检测关键点。检测到的关键点存储在列表kp中,每个关键点都是一个KeyPoint对象,包含关键点的位置(pt属性,一个包含(x, y)坐标的元组)、大小(size属性)、方向(angle属性)等信息。遍历关键点列表kp,并打印每个关键点的坐标。使用cv2.drawKeypoints()函数在原始图像jijia上绘制检测到的关键点。

  • 图像显示:将最后的结果图像显示。
    在这里插入图片描述

  • 计算并打印描述符:使用SIFT对象的compute()方法根据之前检测到的关键点kp和原始图像jijia计算描述符。打印描述符des的形状。

五、应用领域

SIFT特征提取算法在图像匹配、物体识别、三维重建、机器人导航、增强现实等领域有着广泛的应用。例如,在图像匹配中,可以利用SIFT特征提取算法提取两幅图像的关键点并进行匹配,从而实现图像的拼接或目标定位;在物体识别中,可以利用SIFT特征建立物体的特征库,并与待识别图像中的特征进行比对,从而实现物体的快速识别。

综上所述,SIFT特征提取算法是一种高效、稳定的图像特征提取方法,在计算机视觉和图像处理领域具有重要的应用价值。

相关文章:

图像特征提取-SIFT

文章目录 一、定义与原理二、主要步骤三、特点与优势四、代码运用五、应用领域 图像特征提取中的SIFT(Scale-Invariant Feature Transform,尺度不变特征变换)是一种强大的局部特征提取算法,广泛应用于计算机视觉和图像处理领域。以…...

ElasticSearch分页查询性能及封装实现

Es的分页方式 fromsize 最基本的分页方式,类似于SQL中的Limit语法: //查询年龄在12到32之间的前15条数据 {"query":{"bool":{"must":{"range":{"user_age":{"gte":12,"lte":3…...

Python精选200Tips:176-180

针对图像的经典卷积网络结构进化史及可视化 P176--LeNet-5【1988】模型结构说明模型结构代码模型结构可视化 P177--AlexNet【2012】模型结构及创新性说明模型结构代码模型结构可视化 P178--VGGNet【2014】VGG19模型结构及创新性说明VGG19模型结构代码VGG19模型结构可视化 P179-…...

【Kotlin 集合概述】可变参数vararg、中缀函数infix以及解构声明(二十)

导读大纲 1.1 使用集合: vararg、infix 调用和解构声明1.1.1 扩展 Java 集合 API1.1.2 vararg: 接受任意数量参数的函数1.1.3 处理pairs: Infix 调用和解构声明 1.1 使用集合: vararg、infix 调用和解构声明 本节将介绍 Kotlin 标准库中用于处理集合的一些函数 同时,还介绍一些…...

unity安装报错问题记录

unity安装报错问题记录 今天下载了unity,一路安装下来,遇到了两个问题: Microsoft Visual Studio Community 2022 Install failed: Validation Failed 查询资料提到本机已安装,实际本机未安装。 解决了半天,大致有…...

秋招|面试|群面|求职

秋招|面试|群面|求职 自我介绍30s-1min,首先是清楚的介绍自己的名字/专业等个人信息,面试岗位,也可以介绍一下对于岗位的理解。然后介绍一下过往经历中最亮眼的几点,主要是为了突出和岗位的适配程度。群面,我觉得最重…...

【Kubernetes】日志平台EFK+Logstash+Kafka【理论】

一,日志处理方案 方案一,【EFK】:Elasticsearch Fluentd(或Filebeat) Kibana Elasticsearch(简称:ES):实时,分布式存储,可扩展,日…...

基于SpringBoot+Vue+MySQL的教学资料管理系统

系统展示 管理员后台界面 教师后台界面 系统背景 在当今信息化高速发展的时代,教育机构面临着日益增长的教学资料管理需求。为了提升教学管理的效率,优化资源的配置与利用,开发一套高效、便捷的教学资料管理系统显得尤为重要。基于SpringBoot…...

动态规划day45:编辑距离|115. 不同的子序列、583. 两个字符串的删除操作、72. 编辑距离(动规终极好题)

动态规划day45:编辑距离|115. 不同的子序列、583. 两个字符串的删除操作、72. 编辑距离(动规终极好题) 115. 不同的子序列583. 两个字符串的删除操作72. 编辑距离(动规终极好题) 115. 不同的子序列 给你两个字符串 s 和 t ,统计并返回在 s 的 子序列 中…...

剑指 offer 刷题集

目录 数组 1. LCR 121. 寻找目标值 - 二维数组 2. LCR 120. 寻找文件副本 3. LCR 128. 库存管理 I 4. LCR 131. 砍竹子 I 5. LCR 132. 砍竹子 II 6. LCR 135. 报数 7. LCR 139. 训练计划 I 8. LCR 158. 库存管理 II 9. LCR 159. 库存管理 III 10. LCR 160. 数据流中…...

C++在线开发环境搭建(WEBIDE)

C在线开发环境搭建 一、环境说明1.1 系统基础环境说明1.1 docker-ce社区版安装 二、codeserver构建2.1 构建codeserver环境的docker容器2.2 构建docker镜像2.3 运行docker2.4 运行展示 三、构建codeserver中的c开发环境3.1 插件下载3.2 插件安装 四、其他知识4.2 code-server配…...

重磅首发!大语言模型LLM学习路线图来了!

ChatGPT的出现在全球掀起了AI大模型的浪潮,2023年可以被称为AI元年,AI大模型以一种野蛮的方式,闯入你我的生活之中。 从问答对话到辅助编程,从图画解析到自主创作,AI所展现出来的能力,超出了多数人的预料&…...

neo4j关系的创建删除 图的删除

关系的创建和删除 关系创建 CREATE (:Person {name:"jack"})-[:LOVE]->(:Person {name:"Rose"})已有这个关系时,merge不起效果 MERGE (:Person {name:"Jack" })-[:LOVE]->(:Person {name:"Rose"})关系兼顾节点和关…...

【WRF运行第三期】服务器上运行WRF模型(官网案例-Hurricane Matthew)

【WRF运行第三期】运行WRF模型(官网案例-Hurricane Matthew) 官网案例-Hurricane Matthew介绍0 创建DATA文件夹1 WPS预处理1.1 解压GRIB数据(ungrib.exe)1.1.1 解压GRIB数据---GFS(Matthew案例研究数据)1.1…...

基于springboot的书店图书销售管理系统的设计与实现 (含源码+sql+视频导入教程)

👉文末查看项目功能视频演示获取源码sql脚本视频导入教程视频 1 、功能描述 基于springboot的书店图书销售管理系统拥有三个角色 管理员:用户管理、角色管理、权限管理、店铺管理等商家:图书管理、上架图书、访问量统计、销售总额统计、订单…...

Spring MVC 基本配置步骤 总结

1.简介 本文记录Spring MVC基本项目拉起配置步骤。 2.步骤 在pom.xml中导入依赖&#xff1a; <dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>6.0.6</version><scope>…...

HCIP--以太网交换安全(一)

以太网交换安全概述&#xff1a;以太网交换安全是一系列技术和策略的集合&#xff0c;旨在保护以太网交换机免受各种网络攻击和威胁。 端口隔离 一、端口隔离概述&#xff1a; 作用&#xff1a;可以实现同一个VLAN内端口的隔离 优势&#xff1a; 端口隔离功能为用户提供了更…...

PyQt5中关于QLineEdit的空输入报错的简单处理

PyQt5中关于QLineEdit的空输入报错的简单处理 前言分析原因解决办法总结 前言 在PyQt5的界面中对于数据的输入&#xff0c;最常用的就是QLineEdit控件&#xff0c;该控件作为基本的数据输入控件已经能满足我们的简单使用。在使用过程&#xff0c;出现闪退情况&#xff0c;发现…...

【前端】ES12:ES12新特性

文章目录 1 逻辑赋值操作符2 数字分隔符3 replaceAll4 Promise.any5 WeakRef6 FinalizationRegistry 1 逻辑赋值操作符 逻辑赋值操作符 ??、&&、 ||。 let a true let b false //a && b //false a || b ; //true console.log(a)let obj {name:"ker…...

语音识别(非实时)

1.环境 python &#xff1a;3.10.14 2.完整代码 import whisper #whisper import wave # 使用wave库可读、写wav类型的音频文件 import pyaudio # 使用pyaudio库可以进行录音&#xff0c;播放&#xff0c;生成wav文件 def record(time): # 录音程序# 定义数据流块CHUNK …...

网络编程(Modbus进阶)

思维导图 Modbus RTU&#xff08;先学一点理论&#xff09; 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议&#xff0c;由 Modicon 公司&#xff08;现施耐德电气&#xff09;于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…...

Cursor实现用excel数据填充word模版的方法

cursor主页&#xff1a;https://www.cursor.com/ 任务目标&#xff1a;把excel格式的数据里的单元格&#xff0c;按照某一个固定模版填充到word中 文章目录 注意事项逐步生成程序1. 确定格式2. 调试程序 注意事项 直接给一个excel文件和最终呈现的word文件的示例&#xff0c;…...

模型参数、模型存储精度、参数与显存

模型参数量衡量单位 M&#xff1a;百万&#xff08;Million&#xff09; B&#xff1a;十亿&#xff08;Billion&#xff09; 1 B 1000 M 1B 1000M 1B1000M 参数存储精度 模型参数是固定的&#xff0c;但是一个参数所表示多少字节不一定&#xff0c;需要看这个参数以什么…...

SciencePlots——绘制论文中的图片

文章目录 安装一、风格二、1 资源 安装 # 安装最新版 pip install githttps://github.com/garrettj403/SciencePlots.git# 安装稳定版 pip install SciencePlots一、风格 简单好用的深度学习论文绘图专用工具包–Science Plot 二、 1 资源 论文绘图神器来了&#xff1a;一行…...

基于uniapp+WebSocket实现聊天对话、消息监听、消息推送、聊天室等功能,多端兼容

基于 ​UniApp + WebSocket​实现多端兼容的实时通讯系统,涵盖WebSocket连接建立、消息收发机制、多端兼容性配置、消息实时监听等功能,适配​微信小程序、H5、Android、iOS等终端 目录 技术选型分析WebSocket协议优势UniApp跨平台特性WebSocket 基础实现连接管理消息收发连接…...

CMake基础:构建流程详解

目录 1.CMake构建过程的基本流程 2.CMake构建的具体步骤 2.1.创建构建目录 2.2.使用 CMake 生成构建文件 2.3.编译和构建 2.4.清理构建文件 2.5.重新配置和构建 3.跨平台构建示例 4.工具链与交叉编译 5.CMake构建后的项目结构解析 5.1.CMake构建后的目录结构 5.2.构…...

零基础设计模式——行为型模式 - 责任链模式

第四部分&#xff1a;行为型模式 - 责任链模式 (Chain of Responsibility Pattern) 欢迎来到行为型模式的学习&#xff01;行为型模式关注对象之间的职责分配、算法封装和对象间的交互。我们将学习的第一个行为型模式是责任链模式。 核心思想&#xff1a;使多个对象都有机会处…...

成都鼎讯硬核科技!雷达目标与干扰模拟器,以卓越性能制胜电磁频谱战

在现代战争中&#xff0c;电磁频谱已成为继陆、海、空、天之后的 “第五维战场”&#xff0c;雷达作为电磁频谱领域的关键装备&#xff0c;其干扰与抗干扰能力的较量&#xff0c;直接影响着战争的胜负走向。由成都鼎讯科技匠心打造的雷达目标与干扰模拟器&#xff0c;凭借数字射…...

使用 SymPy 进行向量和矩阵的高级操作

在科学计算和工程领域&#xff0c;向量和矩阵操作是解决问题的核心技能之一。Python 的 SymPy 库提供了强大的符号计算功能&#xff0c;能够高效地处理向量和矩阵的各种操作。本文将深入探讨如何使用 SymPy 进行向量和矩阵的创建、合并以及维度拓展等操作&#xff0c;并通过具体…...

LOOI机器人的技术实现解析:从手势识别到边缘检测

LOOI机器人作为一款创新的AI硬件产品&#xff0c;通过将智能手机转变为具有情感交互能力的桌面机器人&#xff0c;展示了前沿AI技术与传统硬件设计的完美结合。作为AI与玩具领域的专家&#xff0c;我将全面解析LOOI的技术实现架构&#xff0c;特别是其手势识别、物体识别和环境…...