【进阶OpenCV】 (3)--SIFT特征提取
文章目录
- sift特征提取
- 一、基本原理
- 二、特点
- 三、代码实现
- 1. 函数方法
- 2. 检测图像中的关键点
- 3. 绘制关键点
- 4. 计算关键点描述符
- 5. 输出特征坐标点
- 总结
sift特征提取
SIFT(Scale-Invariant Feature Transform,尺度不变特征变换)特征检测是一种在图像处理和计算机视觉领域广泛使用的算法,主要用于特征点检测和特征匹配。
SIFT特征具有对旋转、尺度缩放、亮度变化等保持不变性,是一种非常稳定的局部特征。
一、基本原理
SIFT算法通过在不同尺度空间中寻找关键点,并计算这些关键点的局部特征描述子,从而实现图像的特征匹配和识别。
关键点(也称为特征点或兴趣点)是指图像中一些具有独特性和稳定性的局部特征区域。
其基本原理包括以下几个步骤:
- 构建尺度空间:通过对原始图像进行多次高斯模糊和降采样,构建出高斯金字塔,以在不同尺度下检测出特征点。
- 检测关键点:利用高斯差分(DoG)图像检测尺度空间中的极值点,这些极值点被认为是潜在的关键点。
- 定位关键点位置:通过泰勒展开式对DoG图像进行拟合,精确定位关键点的位置,并排除低对比度和边缘响应的干扰。
- 确定关键点方向:基于图像局部的梯度方向,为每个关键点分配一个或多个主方向,以保证特征描述子的旋转不变性。
- 生成特征描述子:在关键点周围的邻域内,测量图像局部的梯度,并将这些梯度变换成一种表示形式,生成具有128维特征向量的特征描述子。
二、特点
- 图像的局部特征:对旋转、尺度缩放、亮度变化保持不变,对视角变化、仿射变换、噪声也保持一定程度的稳定性。
- 独特性好:信息量丰富,适用于海量特征库进行快速、准确的匹配。
- 多量性:即使是很少几个物体也可以产生大量的SIFT特征。
- 高速性:经优化的SIFT匹配算法甚至可以达到实时性。
- 扩招性:可以很方便的与其他的特征向量进行联合。
三、代码实现
原始图片:
1. 函数方法
- 创建sift特征的提取对象:
cv2.SIFT_create() / cv2.xfeatures2d.SIFT_create() -----> 创建一个sift特征的提取对象
- 检测图像中的关键点:
sift.detect(img)
- 绘制关键点:
drawKeypoints(image,keypoints,outImage,color=None,flags=None)
参数:
-- image:原始图像
-- keypoints:从原图中获得的关键点,这也是画图时所用到的数据
-- outImage:输出图像,可以是原图也可以是None
-- color:颜色设置,更改画笔颜色
-- flags:绘图功能的标识设置
- 计算关键点描述符:
sift.compute() ---> 输出关键点的形状和描述符的形状
2. 检测图像中的关键点
# 检测图像中的关键点
# cv2.SIFT_create() / cv2.xfeatures2d.SIFT_create() -----> 创建一个sift特征的提取对象
#sift.detect(img) -----> 在图像中查找关键点yf = cv2.imread("tu.jpg")
yf_gray = cv2.cvtColor(yf,cv2.COLOR_BGR2GRAY)
sift = cv2.SIFT_create() # 创建sift对象
kp = sift.detect(yf_gray) # 查找关键点
3. 绘制关键点
yf_sift = cv2.drawKeypoints(yf,kp,None,flags=cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS)
cv2.imshow('yf_sift',yf_sift)
cv2.waitKey(0)
4. 计算关键点描述符
主要用于方便后期进行特征匹配:
# 使用sift.compute()计算关键点描述符,方便后期的特征匹配
kp,des = sift.compute(yf,kp)
print(np.array(kp).shape,des.shape)
# 输出关键点的形状和描述符的形状
# np.array(kp).shape表示关键点的数量和属性
# des.shape表示描述符的数量和属性
-------------------
(764,) (764, 128)
5. 输出特征坐标点
# 输出特征点坐标
# .pt:将隐藏的坐标数据显示出来
for i in kp:print(f"特征点坐标为:{i.pt}")
----------------------
展示部分结果:
特征点坐标为:(5.986441612243652, 704.0958862304688)
特征点坐标为:(6.146509647369385, 192.4614715576172)
特征点坐标为:(6.952261447906494, 719.527587890625)
特征点坐标为:(11.127826690673828, 497.750732421875)
特征点坐标为:(11.127826690673828, 497.750732421875)
总结
本篇介绍了:
- sift特征提取的作用是描绘出图中的特征点
- 如何获得特征点的信息,以便于特征匹配
相关文章:
【进阶OpenCV】 (3)--SIFT特征提取
文章目录 sift特征提取一、基本原理二、特点三、代码实现1. 函数方法2. 检测图像中的关键点3. 绘制关键点4. 计算关键点描述符5. 输出特征坐标点 总结 sift特征提取 SIFT(Scale-Invariant Feature Transform,尺度不变特征变换)特征检测是一种…...
HarmonyOS/OpenHarmony Audio 实现音频录制及播放功能
关键词:audio、音频录制、音频播放、权限申请、文件管理 在app的开发过程中时常会遇见一些需要播放一段音频或进行语音录制的场景,那么本期将介绍如何利用鸿蒙 audio 模块实现音频写入和播放的功能。本次依赖的是 ohos.multimedia.audio 音频管理模块&am…...
css 中 ~ 符号、text-indent、ellipsis、ellipsis-2、text-overflow: ellipsis、::before的使用
1、~的使用直接看代码 <script setup> </script><template><div class"container"><p><a href"javascript:;">纪检委</a><a href"javascript:;">中介为</a><a href"javascript:…...
Activiti 工作流大致了解
一、什么是 Activiti 简而言之,就是系统的流程图,如:请假审批流程、账单审批流程等。 二、mysql与pom配置 mysql要使用jdbc:mysql://localhost:3306/activiti?autoReconnecttrue pom文件要添加关键依赖 <!--activiti核心依赖--> &…...
速盾:高防 CDN,网站安全的有力保障
在当今数字化时代,网站安全已成为企业和个人关注的焦点。随着网络攻击手段的不断升级,传统的安全防护措施已经难以满足需求。而高防 CDN(Content Delivery Network,内容分发网络)的出现,为网站安全提供了有…...
宝塔搭建nextcould 30docker搭建onlyoffic8.0
宝塔搭建nextcould 宝塔搭建nextcould可以参考这两个博文 我搭建的是30版本的nextcould,服务组件用的是下面这些,步骤是一样的,只是版本不一样而已 nginx 1.24.0 建议选择nginx,apache没成功。 MySQL 8.0以上都可以 php 8.2.…...
【源码+文档+调试讲解】交通信息管理系统
摘 要 智能交通信息管理系统是一种基于计算机技术的软件系统,旨在提高交通管理的效率和服务质量。通过该系统可以实现智能交通管理的全面管理和优化。智能交通信息管理系统具备集成管理功能。它能够整合智能交通管理的各个业务环节,包括个人中心、用户管…...
小阿轩yx-案例:Ansible剧本文件实践
小阿轩yx-案例:Ansible剧本文件实践 Playbook 介绍 什么是 playbook playbook 顾名思义,即剧本,现实生活中演员按照剧本表演在 ansible 中,由被控计算机表演,进行安装,部署应用,提供对外的服…...
【ShuQiHere】深入理解微架构(Microarchitecture):LC-3 的底层实现 ️
【ShuQiHere】🖥️ 微架构(Microarchitecture) 是计算机体系结构中的重要概念,它定义了如何将 指令集架构(Instruction Set Architecture, ISA) 转化为实际硬件。通过微架构,我们可以理解计算机…...
Ubuntu24.04.1系统下VideoMamba环境配置
文章目录 前言第一步:基本的环境创建第二步:causal-conv1d和mamba_ssm库的安装第三步:安装requirements.txt 前言 VideoMamba环境的配置折磨了我三天,由于Mamba对Cuda的版本有要求,因此配置环境的时候Cuda版本以及各种…...
c++第十二章续(队列结构类模拟)
队列类 设计类,需要开发公有接口和私有实现 Queue类接口 公有接口: 默认初始化,和可以用显式初始化覆盖默认值 Queue类的实现 如何表示队列数据: 一种方法是使用new动态分配一个数组,它包含所需的元素数。不过&…...
数据集-目标检测系列-豹子 猎豹 检测数据集 leopard>> DataBall
数据集-目标检测系列-豹子 猎豹 检测数据集 leopard>> DataBall 数据集-目标检测系列-豹子 猎豹 检测数据集 leopard 数据量:5k 想要进一步了解,请联系。 DataBall 助力快速掌握数据集的信息和使用方式,会员享有 百种数据集&#x…...
基于ESP8266—AT指令连接阿里云+MQTT透传数据(3)
MQTT_RX设备为接收(订阅)数据的Topic,使用ESP8266通过AT指令实现。 首先需要串口通信软件,如 SSCOM、PuTTY、SecureCRT 等串口调试工具,功能丰富,支持常见的串口调试功能,用于发送AT指令。 以下是ESP8266通过AT指令连接阿里云MQTT服务的步骤: 1、初始化WiFi 发送下面…...
redis的数据结构,内存处理,缓存问题
redisObject redis任意数据的key和value都会被封装为一个RedisObject,也叫redis对象: 这就redis的头信息,占有16个字节 redis中有两个热门数据结构 1.SkipList,跳表,首先是链表,和普通链表有以下差异&am…...
机器学习模型评估与选择
前言 承接上篇讲述了机器学习有哪些常见的模型算法,以及使用的场景,本篇将继续讲述如何选择模型和评估模型。几个概念了解一下: 经验误差:模型在训练集上的误差称之为经验误差;过拟合:模型在训练集上表现…...
Web认识 -- 第一课
文章目录 前言一、HTML是什么?二、了解Web1. 基本概念2.Web标准3. Web构成1.前端1. HTML2.CSS3. javaScript4.常见浏览器介绍 2.Web标签构成1.结构标准2.表现标准 -- css3. 行为标准 -- javaScript 总结 前言 这里是我们进入前端学习的开端,在本次更新之后我会陆续…...
Recaptcha2 图像识别 API 对接说明
Recaptcha2 图像识别 API 对接说明 本文将介绍一种 Recaptcha2 图像识别2 API 对接说明,它可以通过用户输入识别的内容和 Recaptcha2验证码图像,最后返回需要点击的小图像的坐标,完成验证。 接下来介绍下 Recaptcha2 图像识别 API 的对接说…...
6种MySQL高可用方案对比分析
大家好,我是 V 哥,关于 MySQL 高可用方案,在面试中频频出现,有同学在字节面试就遇到过,主要考察你在高可用项目中是如何应用的,V 哥整理了6种方案,供你参考。 MySQL的高可用方案有多种…...
FastAPI: websocket的用法及举例
1. Websocket 1.1 Websocket介绍 WebSocket 是一种在单个TCP连接上进行全双工通信的协议,允许客户端和服务器之间相互发送数据,而不需要像传统的HTTP请求-响应模型那样频繁建立和断开连接。 全双工通信(Full-Duplex Communication)是一种通信模式&#…...
JavaSE——面向对象2:方法的调用机制、传参机制、方法递归、方法重载、可变参数、作用域
目录 一、成员方法 (一)方法的快速入门 (二)方法的调用机制(重要) (三)方法的定义 (四)注意事项和使用细节 1.访问修饰符(作用是控制方法的使用范围) 2.返回的数据类型 3.方法名 4.形参列表 5.方法体 6.方法调用细节说明 (五)传参机制 1.基本数据类型的传参机制 …...
Vue+Flask
App.vue 首先要安装 npm install axios<template><div><h1>{{ message }}</h1><input v-model"name" placeholder"Enter your name" /><input v-model"age" placeholder"Enter your age" /><…...
深入剖析 Android Lifecycle:构建高效稳定的应用
在 Android 开发中,管理应用组件的生命周期是至关重要的。正确处理生命周期事件可以确保应用的性能、稳定性和用户体验。Android Framework 提供了一系列的机制来管理应用组件的生命周期,而android.arch.lifecycle库则为我们提供了更简洁、更灵活的方式来…...
ElasticSearch分词器、相关性详解与聚合查询实战
目录 1. ES分词器详解 1.1 基本概念 1.2 分词发生时期 1.3 分词器的组成 切词器:Tokenizer 词项过滤器:Token Filter 字符过滤器:Character Filter 1.4 倒排索引的数据结构 2. 相关性详解 2.1 什么是相关性(Relevance&am…...
删除二叉树中以x为根节点的子树(包括根结点)
已知二叉树以二叉链表存储,编写算法完成:对于树中每个元素值为x的结点,删除以它为根的子树,并释放相应的空间。 思想: 删除二叉树采用后序遍历。先删除左子树,然后右子树,最后根。 利用层次遍…...
Netty 与 WebSocket之间的关系
WebSocketProtocolHandler 和 Netty 在处理 WebSocket 连接时扮演不同的角色,但它们通常是一起使用的,尤其是在基于 Netty 的项目中。为了更好地理解它们之间的区别,我们首先需要了解 WebSocket 和 Netty 的基本概念。 WebSocket WebSocket…...
通信工程学习:什么是CSMA/CA载波监听多路访问/冲突避免
CSMA/CA:载波监听多路访问/冲突避免 CSMA/CA(Carrier Sense Multiple Access/Collision Avoidance),即载波监听多路访问/冲突避免,是一种用于数据传输时避免各站点之间冲突的算法,尤其适用于无线局域网&…...
JAVA并发编程系列(13)Future、FutureTask异步小王子
美团本地生活面试:模拟外卖订单处理,客户支付提交订单后,查询订单详情,后台需要查询店铺备餐进度、以及外卖员目前位置信息后再返回。 时间好快,一转眼不到一个月时间,已经完成分享synchronized、volatile、…...
【python爬虫可以获取到谷歌影像吗?】如何有效下载谷歌影像?
【python爬虫可以获取到谷歌影像吗?】如何有效下载谷歌影像? 【python爬虫可以获取到谷歌影像吗?】如何有效下载谷歌影像? 文章目录 【python爬虫可以获取到谷歌影像吗?】如何有效下载谷歌影像?前言1. 使用…...
Windows 上安装 PostgreSQL
Windows 上安装 PostgreSQL PostgreSQL 是一款功能强大的开源关系数据库管理系统,广泛用于各种应用场景。在 Windows 系统上安装 PostgreSQL 相对简单,但需要遵循一系列步骤。本文将详细介绍在 Windows 上安装 PostgreSQL 的过程,并提供一些关键的配置和优化建议。 一、下…...
Vue 技术进阶 day2 数据监视的原理、其他内置指令、自定义指令、生命周期、组件化、VueComponent构造函数
目录 1.Vue监测数据的原理 1.1 原理 1.1.1 数据劫持 1.1.2 观察者模式(Vue内部的实现) 1.1.3 更新组件 1.1.4 计算属性和侦听器 1.2 后添加属性做响应式(Vue.set / vm.$set) 1.3 对象和数组的响应式 1.4 数据监视案例 2.指令 2.1 内置指令 2.…...
专业网站建设搭建/广州市口碑seo推广
打印机用久了难免会出现故障,在打印过程中可能会遇到各种各样的迷惑行为,比如:打印乱码、条纹、黑点、阴影等。今天小编就来给大家说说激光打印机的迷惑行为:打印一半如何解决。原图打印一半01检查打印机 检查打印机查看是否是打印…...
企业网站源码生成器/新手小白怎么做跨境电商
一:挂载 1) fdisk -l |grep sd 查看分区情况 或者fdisk -l 2) mkdir -p /data/disk1 创建数据存储目录 mkdir -p /data/disk2 mkdir -p /data/disk3 ...... 3) mkfs.xfs /dev/sdb 格式化sdb磁盘 mkfs.xfs /dev/sdc 格式化sdc磁盘 mkfs…...
wordpress Campress/郑州网站推广电话
我又开新坑啦:QTREE系列. 刚开始以为QTREE就是LCT,然后发现第一题是个树链剖分,于是以为QTREE就是树链剖分.写完后发现第二题是个树上倍增. 综上,QTREE就是树上询问的一些题. 来源:http://172.20.6.3/Categories.asp?page11&orderASC&channelID&c8 #include<io…...
linux网站建设论文/爱论坛
介绍: 这是一个用vuejs2.0和element搭建的后台管理界面。 相关技术: vuejs2.0:渐进式JavaScript框架,易用、灵活、高效,似乎任何规模的应用都适用。 element:基于vuejs2.0的ui组件库。 vue-routerÿ…...
深圳英文网站设计/广州网站营销seo费用
存储基础知识三 文件系统 2009-10-09 17:32:58标签:存储 文件系统 [推送到技术圈] 一、概述文件系统定义了把文件存储于磁盘时所必须的数据结构及磁盘数据的管理方式。我们知道,磁盘是由很多个扇区(Sector)组成的ÿ…...
本地做网站教程/公司网站设计报价
最近更新的博客 华为OD机试 - 简易压缩算法(Python) | 机试题算法思路 【2023】 华为OD机试题 - 获取最大软件版本号(JavaScript) 华为OD机试 - 猜字谜(Python) | 机试题+算法思路 【2023】 华为OD机试 - 删除指定目录(Python) | 机试题算法思路 【2023】 华为OD机试 …...