图像特征提取-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中导入依赖: <dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>6.0.6</version><scope>…...

HCIP--以太网交换安全(一)
以太网交换安全概述:以太网交换安全是一系列技术和策略的集合,旨在保护以太网交换机免受各种网络攻击和威胁。 端口隔离 一、端口隔离概述: 作用:可以实现同一个VLAN内端口的隔离 优势: 端口隔离功能为用户提供了更…...
PyQt5中关于QLineEdit的空输入报错的简单处理
PyQt5中关于QLineEdit的空输入报错的简单处理 前言分析原因解决办法总结 前言 在PyQt5的界面中对于数据的输入,最常用的就是QLineEdit控件,该控件作为基本的数据输入控件已经能满足我们的简单使用。在使用过程,出现闪退情况,发现…...
【前端】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 :3.10.14 2.完整代码 import whisper #whisper import wave # 使用wave库可读、写wav类型的音频文件 import pyaudio # 使用pyaudio库可以进行录音,播放,生成wav文件 def record(time): # 录音程序# 定义数据流块CHUNK …...
内存分配函数malloc kmalloc vmalloc
内存分配函数malloc kmalloc vmalloc malloc实现步骤: 1)请求大小调整:首先,malloc 需要调整用户请求的大小,以适应内部数据结构(例如,可能需要存储额外的元数据)。通常,这包括对齐调整,确保分配的内存地址满足特定硬件要求(如对齐到8字节或16字节边界)。 2)空闲…...

Lombok 的 @Data 注解失效,未生成 getter/setter 方法引发的HTTP 406 错误
HTTP 状态码 406 (Not Acceptable) 和 500 (Internal Server Error) 是两类完全不同的错误,它们的含义、原因和解决方法都有显著区别。以下是详细对比: 1. HTTP 406 (Not Acceptable) 含义: 客户端请求的内容类型与服务器支持的内容类型不匹…...

python打卡day49
知识点回顾: 通道注意力模块复习空间注意力模块CBAM的定义 作业:尝试对今天的模型检查参数数目,并用tensorboard查看训练过程 import torch import torch.nn as nn# 定义通道注意力 class ChannelAttention(nn.Module):def __init__(self,…...

智慧工地云平台源码,基于微服务架构+Java+Spring Cloud +UniApp +MySql
智慧工地管理云平台系统,智慧工地全套源码,java版智慧工地源码,支持PC端、大屏端、移动端。 智慧工地聚焦建筑行业的市场需求,提供“平台网络终端”的整体解决方案,提供劳务管理、视频管理、智能监测、绿色施工、安全管…...
条件运算符
C中的三目运算符(也称条件运算符,英文:ternary operator)是一种简洁的条件选择语句,语法如下: 条件表达式 ? 表达式1 : 表达式2• 如果“条件表达式”为true,则整个表达式的结果为“表达式1”…...

[ICLR 2022]How Much Can CLIP Benefit Vision-and-Language Tasks?
论文网址:pdf 英文是纯手打的!论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误,若有发现欢迎评论指正!文章偏向于笔记,谨慎食用 目录 1. 心得 2. 论文逐段精读 2.1. Abstract 2…...

如何将联系人从 iPhone 转移到 Android
从 iPhone 换到 Android 手机时,你可能需要保留重要的数据,例如通讯录。好在,将通讯录从 iPhone 转移到 Android 手机非常简单,你可以从本文中学习 6 种可靠的方法,确保随时保持连接,不错过任何信息。 第 1…...
Axios请求超时重发机制
Axios 超时重新请求实现方案 在 Axios 中实现超时重新请求可以通过以下几种方式: 1. 使用拦截器实现自动重试 import axios from axios;// 创建axios实例 const instance axios.create();// 设置超时时间 instance.defaults.timeout 5000;// 最大重试次数 cons…...
Spring AI 入门:Java 开发者的生成式 AI 实践之路
一、Spring AI 简介 在人工智能技术快速迭代的今天,Spring AI 作为 Spring 生态系统的新生力量,正在成为 Java 开发者拥抱生成式 AI 的最佳选择。该框架通过模块化设计实现了与主流 AI 服务(如 OpenAI、Anthropic)的无缝对接&…...
Hive 存储格式深度解析:从 TextFile 到 ORC,如何选对数据存储方案?
在大数据处理领域,Hive 作为 Hadoop 生态中重要的数据仓库工具,其存储格式的选择直接影响数据存储成本、查询效率和计算资源消耗。面对 TextFile、SequenceFile、Parquet、RCFile、ORC 等多种存储格式,很多开发者常常陷入选择困境。本文将从底…...