CV(6)-SIFT和Hash
前言
仅记录学习过程,有问题欢迎讨论
SIFT:尺度不变特征变换:
- SIFT提取图像的局部特征,在尺度空间寻找极值点,并提取出其位置、尺度、方向信息。
- SIFT的应用范围包括物体辨别、机器人地图感知与导航、影像拼接、3D模型建立、手势识别、影像追踪等。
- SIFT算法的实质是在不同的尺度空间上查找关键点(特征点),计算关键点的大小、方向、尺度信息,利用这些信息组成关键点对特征点进行描述。
Sift特征的特点:
- 对视角变化、噪声等也存在一定程度的稳定性;
- 独特性,信息量丰富,适用于在海量特征数据中进行快速,准确的匹配;
- 多量性,即使少数几个物体也可以产生大量的SIFT特征向量
SIFT特征提取和匹配具体步骤
-
生成高斯差分金字塔(DOG金字塔),尺度空间构建
尺度空间:对图片有着不同的分辨率,模拟人对物体的观察(大尺度观察整体,小尺度观察细节)图像金字塔:不同分辨率的图片,从小到大;先滤波降噪,然后上下采样改变分辨率
高斯差分金字塔:高斯金字塔(每一层同尺寸但平滑效果不同,下一层缩小一倍)相邻两层相减,得到高斯差分金字塔(找出有变化的特征点)
-
空间极值点检测(关键点的初步查探)
特征点是由DOG空间的局部极值点组成的。为了寻找DoG的极值点,每一个像素点要和它所有的相邻点比较,看其是否比它的图像域和尺度域的相邻点大或者小。高斯金字塔L层 为 s+3(先确定s,s为极值点尺度,根据图像尺寸变化来标记金字塔的层数)
-
稳定关键点的精确定位
设置阈值来限制极值点范围 -
稳定关键点方向信息分配
获取关键点所在尺度空间的邻域,然后计算该区域的梯度和方向,根据计算得到的结果创建方向直方图。 -
关键点描述
对关键点周围像素区域分块,计算块内梯度直方图,生成具有独特性的向量,这个向量是该区域图像信息的一种抽象表述 -
特征点匹配
通过计算两组特征点的128维的关键点的欧式距离,欧式距离越小,则相似度越高。
常用OpenCV算法解析:
- OpenCV
opencv对于读进来的图片的通道排列是BGR,而不是主流的RGB
除了PIL读入的图片是img类之外,其他库读进来的图片都是以numpy 矩阵
图像的基本操作读取、显示、存储、将彩色像素转化为灰度
图像的几何变换:平移、缩放、旋转、插值(最近邻、双线性)
对比增强:线性变换、伽马变换、直方图均衡化。
边缘检测:Sobel、Canny
图像的二维滤波:cvFilter2D、高斯滤波、均值滤波、 - 最小二乘法
线性回归–最小二乘法:通过最小化误差平方和,找出数据的最佳函数匹配(适合参数较少场景) - RANSAC
随机采样一致性,给定一组(通常很小的)内群,存在一个程序可以估算最佳解释或最适用于这一数据模型的参数
它能从包含大量局外点的数据集中估计出高精度的参数,但是可能需要多次迭代。 - 哈希算法
汉明距离:比较二进制的不同位置的数目
均值哈希算法aHash:缩放后灰度后求所有像素平均值,大于平均值记1,生成hash值;对比指纹,相同位数越少越相似
差值哈希算法dHash(常用):和均值hash只是比较hash有变化,同行对比,大置1;准确度高且速度快!
感知哈希算法pHash:采用DCT(离散余弦变换)来降低频率
实现sift,最小二乘法,实现均值插值hash
"""
"""
1.使用sift 和最小二乘法,
2.实现均值插值hash
"""
import cv2
import pandas as pddef sift_demo(img):gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)sift = cv2.xfeatures2d.SIFT_create()keypoints, descriptor = sift.detectAndCompute(gray, None)img = cv2.drawKeypoints(image=img, outImage=img, keypoints=keypoints,flags=cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS,color=(51, 163, 236))cv2.imshow('sift_keypoints', img)cv2.waitKey(0)cv2.destroyAllWindows()# 通过最小化误差平方和,找出数据的最佳函数匹配(适合参数较少场景)
def least_square():sales = pd.read_csv('train_data.csv', sep='\s*,\s*', engine='python') # 读取CSVsales = sales.dropna() # 删除缺失值x = sales['X']y = sales['Y']n = len(x)x_mean = sum(x) / ny_mean = sum(y) / na = sum([(x[i] - x_mean) * (y[i] - y_mean) for i in range(n)]) / sum([(x[i] - x_mean) ** 2 for i in range(n)])b = y_mean - a * x_meanprint('y = %.2f*x + %.2f' % (a, b))return a, bdef mean_hash(img, width=8, high=8):# 缩放为8*8img = cv2.resize(img, (width, high), interpolation=cv2.INTER_CUBIC)# 转换为灰度图gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)# s为像素和初值为0,hash_str为hash值初值为''s = 0hash_str = ''# 遍历累加求像素和for i in range(8):for j in range(8):s = s + gray[i, j]# 求平均灰度avg = s / 64# 灰度大于平均值为1相反为0生成图片的hash值for i in range(width):for j in range(high):if gray[i, j] > avg:hash_str = hash_str + '1'else:hash_str = hash_str + '0'return hash_str# 插值hash
def pHash(img, width=8, high=9):# 缩放8*9img = cv2.resize(img, (width, high), interpolation=cv2.INTER_CUBIC)# 转换灰度图gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)hash_str = ''# 每行前一个像素大于后一个像素为1,反之置为0,生成感知哈希序列(string)for i in range(width):for j in range(width):if gray[i+1, j] > gray[i, j]:hash_str = hash_str + '1'else:hash_str = hash_str + '0'return hash_strif __name__ == '__main__':# img = cv2.imread("lenna.png")# sift_demo(img)a,b = least_square()print(a,b)# img = cv2.imread("lenna.png")# mash = mean_hash(img, width=8, high=8)# print(mash)## img = cv2.imread("lenna.png")# pmash = pHash(img, width=8, high=9)# print(pmash)
相关文章:
CV(6)-SIFT和Hash
前言 仅记录学习过程,有问题欢迎讨论 SIFT:尺度不变特征变换: SIFT提取图像的局部特征,在尺度空间寻找极值点,并提取出其位置、尺度、方向信息。SIFT的应用范围包括物体辨别、机器人地图感知与导航、影像拼接、3D模型建立、手势…...
javax.net.ssl.SSLPeerUnverifiedException: Hostname 192.168.13.13 not verified:
javax.net.ssl.SSLPeerUnverifiedException: Hostname 192.168.13.13 not verified: 前言: 之前需求推送数据是采用http:192.168.13.13:8000 后面业务需求修改为 https:192.168.13.13:443 修改后推送数据到第三方报以下异常, https://192.168.13.13:443…...
用Unity做没有热更需求的单机游戏是否有必要使用AssetBundle?
在使用Unity开发没有热更需求的单机游戏时,是否使用AssetBundle(AB包)是一个值得探讨的问题。以下是对此问题的详细分析: 一、AssetBundle的概述 AssetBundle是Unity中用于存储和加载游戏资源的打包文件,可以包含各种…...
WebRTC Simulcast 大小流介绍与优化实践
Simulcast 是 WebRTC 中的一种标准化技术 ,简称大小流。通过 Simulcast,客户端可以同时发送同一视频的多个版本。每个版本都以不同的分辨率和帧率独立编码,带宽较多的拉流端可以接收较高质量的视频流,带宽有限的拉流端则可以接收较…...
软件测试之测试用例
文章目录 测试用例测试用例的编写总结 测试用例 测试用例:描述测试点执行的文档(测试输入、执行条件、预期结果等) 作用 1.测试点能被精准执行 2.便于团队合作测试用例核心内容 用例编号、用例标题、所属模块、优先级、前置条件、测试步骤、测试数据、预期结果 测试用例的编写…...
Redis--通用命令学习
目录 一、引言 二、基础命令 1.set 2.get 3.keys 3.1 keys ? 3.2 keys * 3.3 keys [abe] 3.4 keys [^] 3.5 keys [a-b] 4.exists 5.delete 6.expire 7.ttl 8.type 三、Redis中的过期策略(面试题) 1.惰性删除 2.定期删除 …...
自动控制系统综合与LabVIEW实现
自动控制系统综合是为了优化系统性能,确保其可靠性、稳定性和灵活性。常用方法包括动态性能优化、稳态误差分析、鲁棒性设计等。结合LabVIEW,可以通过图形化编程、高效数据采集与处理来实现系统综合。本文将阐述具体方法,并结合硬件选型提供实…...
一篇文章学会HTML
目录 页面结构 网页基本标签 图像标签 超链接标签 文本链接 图像链接 锚链接 功能链接 列表 有序列表 无序列表 自定义列表 表格 跨列/跨行 表头 媒体元素 视频 音频 网站的嵌套 表单 表单元素 文本框 单选框 多选框 按钮 下拉框 文本域和文件域 表…...
48页PPT|2024智慧仓储解决方案解读
本文概述了智慧物流仓储建设方案的行业洞察、业务蓝图及建设方案。首先,从政策层面分析了2012年至2020年间国家发布的促进仓储业、物流业转型升级的政策,这些政策强调了自动化、标准化、信息化水平的提升,以及智能化立体仓库的建设࿰…...
React Props 完整使用指南
React Props 完整使用指南 1. 类组件中的 Props 1.1 基本使用 // 父组件 class ParentComponent extends React.Component {render() {return (<ChildComponent name"John"age{25}isStudent{true}hobbies{[reading, swimming]}/>);} }// 子组件 class Child…...
金融数据可视化实现
一、设计题目 金融数据可视化 二、设计目的 使学生掌握用Pandas第三方库数据计算、数据分析的知识与能力。Pandas是专门用于数据分析的库,其提供的read_excel()方法可以方便的读取xlsx格式的文件中的数据到Pandas中的DataFrame中。 DataFrame.plot(kindline)&am…...
逆袭之路(6)——解析数据世界的灵动基石——变量
困厄铸剑心,逆袭展锋芒。 寒苦凝壮志,腾跃绘华章。 我要逆袭。 目录 一、引言 二、变量的定义 三、变量的性质 (一)可变性 (二)有界性 (三)关联性 四、变量的类型 ÿ…...
【云原生】kubeadm搭建的kubernetes1.28集群上自建ingress-nginx服务
1、查询兼容性 先确认下kubernetes版本与ingress-nginx版本兼容性 Ingress-NGINX 版本支持的 k8s 版本Alpine 版本Nginx 版本Helm Chart 版本v1.12.0-beta.01.31, 1.30, 1.29, 1.283.20.31.25.54.12.0-beta.0v1.11.31.30, 1.29, 1.28, 1.27, 1.263.20.31.25.54.11.3v1.11.21.3…...
分布式协同 - 分布式事务_TCC解决方案
文章目录 导图Pre流程图2PC VS 3PC VS TCC2PC(Two-Phase Commit,二阶段提交)3PC(Three-Phase Commit,三阶段提交)TCC(Try-Confirm-Cancel)2PC、3PC与TCC的区别2PC、3PC与TCC的联系 导…...
两分钟解决:vscode卡在设置SSH主机,VS Code-正在本地初始化VSCode服务器
问题原因 remote-ssh还是有一些bug的,在跟新之后可能会一直加载初始化SSH主机解决方案 1.打开终端2.登录链接vscode的账号,到家目录下3.找到 .vscode-server文件,删掉这个文件4.重启 vscode 就没问题了...
SpringBoot3整合FastJSON2如何配置configureMessageConverters
在 Spring Boot 3 中整合 FastJSON 2 主要涉及到以下几个步骤,包括添加依赖、配置 FastJSON 作为 JSON 处理器等。下面是详细的步骤: 1. 添加依赖 首先,你需要在你的 pom.xml 文件中添加 FastJSON 2 的依赖。以下是 Maven 依赖的示例&#…...
数据库安全-redisCouchdb
1.redis未授权访问 默认端口:6379 1.1 Redis沙盒逃逸漏洞RCE-CVE-2022-0543 介绍:Redis 是一套开源的使用 ANSI C编写、支持网络、可基于内存亦可持久化的日志型、键值存储数据库,并提供多种语言的API。Redis 如果在没有开启认证的情况下,…...
java如何使用poi-tl在word模板里渲染多张图片
1、poi-tl官网地址 http://deepoove.com/poi-tl/ 2、引入poi-tl的依赖 <dependency><groupId>com.deepoove</groupId><artifactId>poi-tl</artifactId><version>1.12.1</version></dependency>3、定义word模板 释义…...
ASP.NET |日常开发中常见问题归纳讲解
ASP.NET |日常开发中常见问题归纳讲解 前言一、性能问题1.1 数据库访问性能1.2 视图状态(在ASP.NET Web Forms 中) 二、安全问题2.1 SQL 注入2.2 跨站脚本攻击(XSS) 三、状态管理问题3.1 会话状态(Session …...
Jenkins安全部署规范及安全基线
Jenkins安全部署规范及安全基线 进入安全设置界面启用安全Disable remember me访问控制——安全域(Security Realm)servlet容器代理(Delegate to servlet container)Jenkins专有用户数据库(Jenkins’ own user databas…...
stm32定时器输出比较----驱动步进电机
定时器输出比较理论 OC(Output Compare)输出比较输出比较可以通过比较CNT与CCR寄存器值的关系,来对输出电平进行置1、置0或翻转的操作,用于输出一定频率和占空比的PWM波形每个高级定时器和通用定时器都拥有4个输出比较通道高级定时器的前3个通道额外拥有死区生成和互补输出…...
文本文件和二进制文件
1.为什么使用文件 使用文件我们可以将数据直接存放在电脑的硬盘上,做到了数据的持久化。 2. 什么是文件 磁盘上的文件是文件。 但是在程序设计中,我们一般谈的文件有两种:程序文件、数据文件(从文件功能的角度来分类的)…...
Linux 常见用例汇总
注:本文为 Linux 常见用例文章合辑。 部分内容已过时,未更新整理。 检查 Linux 上的 glibc 版本 译者:joeren | 2014-11-27 21:33 问:检查 Linux 系统上的 GNU C 库(glibc)的版本? GNU C 库&…...
R9000P键盘失灵解决办法
问题描述 突然,就是很突然,我买的R9000P 2024不到三个月,键盘突然都不能用了,是所有键盘按键都无效的那种。(可以使用外接键盘) 解决办法 我本科室友说的好哈,全坏全没坏。 (该解…...
Windows、CentOS环境下搭建自己的版本管理资料库:GitBlit
可以搭建属于公司内部或者个人的Git服务器,方便程序代码及文档版本管理。 官网:http://www.gitblit.com/ Windows环境下安装 提前已经安装好了JDK。 官网下载Windows版的GitBlit。 将zip包解压到自己想要放置的文件夹下。 建立版本库路径,…...
《Web 应用项目开发:从构思到上线的全过程》
目录 一、引言 二、项目启动与需求分析 三、设计阶段 四、技术选型 五、开发阶段 六、测试阶段 七、部署与上线 八、维护与更新 九、总结 一、引言 在数字化浪潮席卷全球的当下,Web 应用如繁星般在互联网的苍穹中闪烁,它们形态各异,…...
ctf相关总结
CTF比赛定义: CTF(Capture The Flag)是一种信息安全竞赛形式,参赛队伍通过破解题目获取flag来得分。 比赛流程: 参赛队伍在题目平台上登录,选择题目进行解答,提交flag后由系统自动评分。 三…...
v3s点RGB屏 40pin 800x480,不一样的点屏,不通过chosen。
一、背景、目的、简介。 一般来说,通过uboot将屏幕参数传给kernel,是通过修改设备树。 uboot和kernel都需要屏幕点亮。uboot侧重于显示一张图片。而kernel则多是动画。 在这里,我先是找到了一个裸机点屏的代码。将其编译成静态库后&#x…...
学习笔记(prism--视频【WPF-prism核心教程】)--待更新
《一》框架介绍 prism是一个用于WPF…和winUI中构建的松散耦合,可维护和可测试的应用程序框架。帮助WPF开发人员以简化编写,维护和扩展来设计应用程序。 优点:遵循特定的约定,可自动将view/ViewModel建立DataContext的关系&#…...
从AI换脸到篡改图像,合合信息如何提升视觉内容安全?
本文目录 引言一、AI“真假之战”下的发展现状与考验挑战1.1 视觉内容安全现状与技术分类1.2视觉内容安全企业1.3视觉内容安全领域挑战 二、开山之石:引领视觉内容安全的创新之路2.1合合内容安全系统2.2发起编制相关技术规范2.3参与篡改检测挑战赛 三、视觉内容安全…...
12.12【java exp4】react table全局搜索tailwindcss 布局 (Layout) css美化 3. (rowId: number
react table 创建一个下拉菜单,允许用户选择要搜索的列。创建一个输入框,用于输入搜索关键词。根据用户的选择,动态地应用过滤器到指定的列 全局搜索 import React from react; import { useTable, useFilters, useGlobalFilter, useSortBy…...
‘pnpm’ 不是内部或外部命令,也不是可运行的程序或批处理文件。
‘pnpm’ 不是内部或外部命令,也不是可运行的程序或批处理文件。 1.情况: npm -v 和 node -v的都正常就是 pnpm-v 无效 检查环境变量也没看出问题 2.分析 没有正确添加环境变量 3.解决 找到npm的全局安装目录 npm list -g --depth 0这里出现了npm的全局安装…...
频繁拿下定点,华玉高性能中间件迈入商业化新阶段
伴随着智能驾驶渗透率的快速增长,中国基础软件市场开始进入黄金窗口期。 近日,华玉通软(下称“华玉”)正式获得某国内头部轨道交通产业集团的智能化中间件平台定点项目。这将是华玉在基础软件领域深耕和商业化发展过程中的又一重…...
装饰者模式
代码详解:【设计模式】Java 设计模式之装饰者模式(Decorator)_java 装饰者模式-CSDN博客 // 抽象构件角色 public interface Component {void operation(); }// 具体构件角色 public class ConcreteComponent implements Component {Override…...
【河南新标】豫财预〔2024〕105号-《关于省级政务信息化建设项目支出预算标准的规定》-费用标准解读系列29
2024年12月3日,河南省财政厅发布了《关于省级政务信息化建设项目支出预算标准的规定》豫财预〔2024〕105号。《关于省级政务信息化建设项目支出预算标准的规定 (试行)》(豫财预 〔2020〕81号)同时废止。新的豫财预〔20…...
Android 蓝牙开发-传输数据
概述 传统蓝牙是通过建立REFCCOM sockect来进行通信的,类似于socket通信,一台设备需要开放服务器套接字并处于listen状态,而另一台设备使用服务器的MAC地址发起连接。连接建立后,服务器和客户端就都通过对BluetoothSocket进行读写…...
使用VSCode Debugger 调试 React项目
一般我们调试代码时,用的最多的应该就是console.log方式了,还有的是使用Chrome DevTools 通过在对应的 sourcemap代码位置打断点进行调试,除了上面两种方式外还有一种更好用的调试方式: VSCode Debugger。 VSCode Debugger可以直…...
ArcGIS Pro 3.4新功能3:空间统计新特性,基于森林和增强分类与回归,过滤空间自相关
目录 应用 1:它是相关性还是托布勒第一定律? 应用 2:将空间带入非空间模型 结论 在 ArcGIS Pro 3.4 中,我们在新的空间组件实用程序(Moran 特征向量)工具集中发布了一个新工具 - 从字段过滤空间自相关。…...
Flink SQL Cookbook on Zeppelin 部署使用
简介:对于初学者来说,学习 Flink 可能不是一件容易的事情。看文档是一种学习,更重要的是实践起来。但对于一个初学者来说要把一个 Flink SQL 跑起来还真不容易,要搭各种环境,真心累。很幸运的是,Flink 生态…...
用二进制方式向文件读写一组数据
【例10.4】从键盘输入10个学生的有关数据,然后把它们转存到磁盘文件上去。 #include<stdio.h> struct Student{char name[20];int number;int age; }; int main(){int i;struct Student stu;FILE *fp;fp fopen("1.txt","wb");if(fp N…...
WebChat——一个开源的聊天应用
Web Chat 是开源的聊天系统,支持一键免费部署私人Chat网页的应用程序。 开源地址:https://github.com/loks666/webchat 目录树 TOC ??? 开始使用 & 交流?? 开箱即用 [这里是代码001] 使用 Docker 部署[这里是代码002] 使用 Docker-compose …...
易语言 OCR 文字识别
一.引言 文字识别,也称为光学字符识别(Optical Character Recognition, OCR),是一种将不同形式的文档(如扫描的纸质文档、PDF文件或数字相机拍摄的图片)中的文字转换成可编辑和可搜索的数据的技术。随着技…...
12.19问答解析
概述 某中小型企业有四个部门,分别是市场部、行政部、研发部和工程部,请合理规划IP地址和VLAN,实现企业内部能够互联互通,同时要求市场部、行政部和工程部能够访问外网环境(要求使用OSPF协议),研发部不能访问外网环境…...
重温设计模式--设计模式七大原则
文章目录 1、开闭原则(Open - Closed Principle,OCP)定义:示例:好处: 2、里氏替换原则(Liskov Substitution Principle,LSP)定义:示例:好处&#…...
【Python-中级】Python中的线程池:ThreadPoolExecutor
Python中的线程池:from concurrent.futures import ThreadPoolExecutor 在Python中,实现多线程编程的方法有很多,而ThreadPoolExecutor 是一个简单且高效的线程池工具。它提供了高层次的接口,用于并发地运行任务,同时隐藏了许多复杂的底层细节,非常适合日常的多线程任务…...
【终端工具】FinalShell v4.5.12 官方版
1.下载地址 【终端工具】FinalShell v4.5.12 官方版 2.简介 FinalShell是一款免费的跨平台远程管理工具,专为开发者和运维人员设计。它支持通过 SSH、SFTP 等方式连接到 Linux 和 Windows 服务器,提供类似于终端的操作界面。除了常规的远程登录功能&a…...
Windows11 家庭版安装配置 Docker
1. 安装WSL WSL 是什么: WSL 是一个在 Windows 上运行 Linux 环境的轻量级工具,它可以让用户在 Windows 系统中运行 Linux 工具和应用程序。Docker 为什么需要 WSL: Docker 依赖 Linux 内核功能,WSL 2 提供了一个高性能、轻量级的…...
基于SSM(Spring + Spring MVC + MyBatis)框架构建一个图书馆仓储管理系统
基于SSM(Spring Spring MVC MyBatis)框架构建一个图书馆仓储管理系统是一个涉及多个功能模块的项目,包括但不限于图书管理、读者管理、借阅管理、归还管理等。 1. 环境准备 确保你已经安装了以下工具和环境: Java Developmen…...
《智驱新材合成:AI 点亮创新路径之光》
在科技浪潮汹涌澎湃的当下,新材料的探寻成为众多领域突破发展瓶颈的关键钥匙。而人工智能(AI)作为前沿科技的璀璨星辰,正以其独特的创新光芒照亮新材料合成路径的未知之境,引发了科研界与产业界的广泛关注与热议&#…...
【C++ 基础】命名空间
命名空间 命名空间 头文件:内有许多库函数(相当于书柜),对库函数进行管理 命名空间:内有许多函数(相当于书柜的一个分区),对函数进行管理 语法格式 namespace 命名空间标识符{...命名空间成员}//花括号…...