特征提取与深度神经网络(二)

关键点/角点检测

        2011论文-ORB关键点检测,比SIFT与SURF速度更快。

        ORB算法可以看出两个部分组成:快速关键点定位+BRIEF描述子生成

Fast关键点检测:

选择当前像素点P,阈值T,周围16个像素点,超过连续N=12个像素点大于或者小于P

优先现检测1、5、9、13循环所有的像素点。

特征提取

从关键点到特征描述子

基于关键点周围区域

浮点数表示与二值编码

描述子长度

描述子是指在计算机视觉和图像处理领域中用于表示图像或图像中的特征的数学特征向量或向量集合。描述子的目标是以紧凑的方式捕获图像的关键信息。使得在进行图像识别、检索、匹配等任务时能高效的比较和处理图像。描述子通常基于图像的局部特征点,比如角点、边缘点等,通过提取这些局部特征点的特征向量来描述图像。如以下图表:

ORB特征描述子生成步骤:

        提取特征关键点

        描述子方向指派

        特征描述子编码(二值编码32位)

orb.detectAndCompute提取图像关键点跟特征描述子,得到453个关键点,对应453x32的描述子矩阵

特征匹配算法

用于比较和匹配图像中特征点或描述子的算法。特征匹配算法的目标是在不同图像或视频帧中找到对应的特征点或描述子,从而实现目标跟踪、图像配准、物体识别。

常见的特征匹配算法包括:

        1、基于光流的匹配算法,需要通过追踪图像中像素的移动来匹配特征点。

        2、基于相似度度量,通过计算特征点或描述子之间的相似度来进行匹配。

        3、基于几何形状的匹配算法:通过比较特征点之间的几何关系来进行匹配

        4、基于优化方法的匹配算法:通过最小化匹配误差的优化方法来进行匹配

        5、基于机器学习的匹配算法:通过训练机器学习模型来实现特征匹配。

DMatch是OpenCV中用于表示特征匹配结果的数据结构。在OpenCV中,DMatch对象包含了两个特征点之间的距离和它们在特征点列表中的索引。通过DMatch对象,可以方便地获取匹配特征点之间的距离信息,以及它们在特征点列表中的索引位置,从而在特征匹配算法中进行匹配结果的分析和处理。

DMatch数据结构:

queryIdx

trainldx

distance,表示匹配最后得到的距离,值越小表示匹配程度越高。

暴力匹配算法实现

        使用SIFT算法检测关键点和描述子。接着,我们初始化了一个暴力匹配器,并使用KNN方法进行匹配。最后,我们应用了比率测试,筛选出最佳匹配,并将匹配结果绘制在一张新的图像中展示出来。

import cv2
import numpy as np# 读取图像
img1 = cv2.imread('image1.jpg', 0)  # queryImage
img2 = cv2.imread('image2.jpg', 0)  # trainImage# 初始化SIFT检测器
sift = cv2.SIFT_create()# 寻找关键点和描述子
kp1, des1 = sift.detectAndCompute(img1, None)
kp2, des2 = sift.detectAndCompute(img2, None)# 初始化暴力匹配器
bf = cv2.BFMatcher()# 使用KNN匹配
matches = bf.knnMatch(des1, des2, k=2)# 应用比率测试,以确保最佳匹配
good_matches = []
for m, n in matches:if m.distance < 0.75 * n.distance:good_matches.append([m])# 绘制匹配结果
img_matches = cv2.drawMatchesKnn(img1, kp1, img2, kp2, good_matches, None, flags=cv2.DrawMatchesFlags_NOT_DRAW_SINGLE_POINTS)# 显示匹配结果
cv2.imshow('Matches', img_matches)
cv2.waitKey(0)
cv2.destroyAllWindows()

KNN是K-Nearest Neighbors(K近邻)的缩写,是一种常用的机器学习算法。在KNN算法中,当需要对一个新样本进行分类或回归时,会找出与该样本最相似的K个训练样本(即最近的K个邻居),然后利用这K个样本的标签或属性值来进行分类或回归预测。

在分类问题中,KNN根据K个最近邻居的类别进行投票,将投票数最多的类别作为新样本的类别;在回归问题中,KNN根据K个最近邻居的属性值进行平均或加权平均来预测新样本的属性值。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/9333.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Flutter笔记:Widgets Easier组件库 - 使用标签(Tag)

Flutter笔记 Widgets Easier组件库 - 使用标签&#xff08;Tag&#xff09; - 文章信息 - Author: 李俊才 (jcLee95) Visit me at CSDN: https://jclee95.blog.csdn.netMy WebSite&#xff1a;http://thispage.tech/Email: 291148484163.com. Shenzhen ChinaAddress of this …

电路板维修【一】

最近喜欢上了电路板维修&#xff0c;经常看很多博主的维修视频&#xff0c;觉得还是颇有收获的&#xff08;维修板子原来有方法可循&#xff09;&#xff0c;于是做笔记如下&#xff1a; 一.【修了半天也没找到问题&#xff0c;原来是检查方向错了&#xff0c;变频油烟机板维修…

LifeCycle之ProcessLifeCycleOwner

问题&#xff1a;想要知道应用程序当前处在前台、后台、或从后台回到前台&#xff0c;想要知道应用的状态&#xff0c; LifeCycle提供了ProcessLifeCycleOwner的类&#xff0c;方便我们知道整个应用程序的生命周期情况 ProcessLifeCycleOwner 使用方法 1.首先添加依赖 imple…

如何设置内网打印机端口网络穿透到公网

打印机是当前公司企业办公输出纸质文件处理过程中必不可少的工具设备。出差在外&#xff0c;我们经常会面对需要远程使用公司内部打印机复印或打印各种文件资料的情况&#xff0c;或不在家又需要远程访问家里打印机进行打印的情况。这时候&#xff0c;就必须学会远程打印的方法…

C++类和对象(三) 缺省值 | static成员 | 内部类

前言&#xff1a; 这是关于类和对象的最后一篇文章&#xff0c;当然还是基础篇的最后一篇&#xff0c;因为类的三大特性继承&#xff0c;封装和多态都还没有讲&#xff0c;少年&#xff0c;慢慢来。 缺省值&#xff1a; 之前讲过&#xff0c;在C11的新标准中&#xff0c;支持为…

vue3 - 图灵

目录 vue3简介整体上认识vue3项目创建Vue3工程使用官方脚手架创建Vue工程[推荐] 主要⼯程结构 数据双向绑定vue2语法的双向绑定简单表单双向绑定复杂表单双向绑定 CompositionAPI替代OptionsAPICompositionAPI简单不带双向绑定写法CompositionAPI简单带双向绑定写法setup简写⽅…

【机器学习之 sklearn 基础教程】

文章目录 机器学习之 sklearn 基础教程1. 引言2. 安装 sklearn3. 数据集3.1 加载数据集3.2 数据集划分 4. 数据预处理4.1 特征缩放4.2 编码分类特征 5. 模型训练与评估5.1 模型训练5.2 模型评估5.3 交叉验证 6. 模型调参7. 模型调参&#xff08;续&#xff09;7.1 GridSearchCV…

【C++后端项目】负载均衡OJ服务器

文章目录 一、演示项目二、所用技术与开发环境所用技术开发环境 三、项目宏观结构I. 风格&#xff1a;仿leetcodeII. 结构&#xff1a;Browser-Server模式III. 编写思路&#xff1a;编译服务 -> OJ服务 -> 前端设计 四、关于Git分支管理✨4.1 Git 分支结构4.2 Git 分支命…

mac电脑如何安装java

1、检查当前系统的 Java 版本 打开终端,输入以下命令查看当前 Java 版本 /usr/bin/java -version 2、前往 Java 官网下载 Java JDK 打开 Java 官网 (https://www.java.com/zh-CN/download/) 并下载最新版本的 Java JDK。 3、安装 Java JDK 双击下载的 .dmg 文件启动安装程序…

Springboot集成Netflix-ribbon、Consul实现负载均衡调用-09

Consul简介 Consul是一个开源的服务发现和配置管理工具&#xff0c;具有跨平台、运行高效等特点。它由HashiCorp公司开发&#xff0c;并使用Go语言编写。Consul主要用于实现分布式系统中的服务发现、健康检查、键值存储等功能。 核心功能 服务发现&#xff1a;Consul通过DNS…

Node.js版本管理工具nvm安装

1.下载nvm https://github.com/coreybutler/nvm-windows/releaseshttps://github.com/coreybutler/nvm-windows/releases 2.安装nvm 双击打开下载好的压缩包解压出的文件 目录中不要有中文 这个是配置切换node版本后的存储位置 然后一路下一步就行了 3.安装并使用node 安装…

LPDDR5电路设计的新功能

最近因为需要使用到LPDDR5&#xff0c;快速地浏览了JEDEC标准文档&#xff0c;发现与前几代相比出现了一些新的电路设计功能&#xff0c;总结为如下三点&#xff1a; 1. CK/WCK/RDQS时钟方案&#xff1b; 2. 电源的PDN设计目标&#xff1b; 3. DQ, DMI和RDQS的Rx端DFE均衡技术。…

LLM大语言模型(十五):LangChain的Agent中使用自定义的ChatGLM,且底层调用的是remote的ChatGLM3-6B的HTTP服务

背景 本文搭建了一个完整的LangChain的Agent&#xff0c;调用本地启动的ChatGLM3-6B的HTTP server。 为后续的RAG做好了准备。 增加服务端role&#xff1a;observation ChatGLM3的官方demo&#xff1a;openai_api_demo目录 api_server.py文件 class ChatMessage(BaseModel…

Unity 性能优化之GPU Instancing(五)

提示&#xff1a;仅供参考&#xff0c;有误之处&#xff0c;麻烦大佬指出&#xff0c;不胜感激&#xff01; 文章目录 前言一、GPU Instancing使用方法二、使用GPU Instancing的条件三、GPU Instancing弊端四、注意五、检查是否成功总结 前言 GPU Instancing也是一种Draw call…

AppImage 创建快捷方式

AppImage是什么&#xff1f; AppImage 是一个可下载的 Linux 文件&#xff0c;它内部包含一个应用程序和应用程序所需的一切&#xff08;库、图标、字体等&#xff09;。 官网 https://appimage.org/ 如何运行 AppImage 很简单&#xff0c;下载一个 AppImage&#xff0c;给…

PowerShell ⇒ Excel 批量创建Excel

New-Object -ComObject Excel.Application&#xff1a;创建Excel对象[System.Runtime.Interopservices.Marshal]::ReleaseComObject($excel) | Out-Null 用来显式释放 Excel COM 对象的资源&#xff0c;以确保在脚本执行完成后&#xff0c;释放 Excel 进程和相关资源&#xff0…

揭秘:让代码更优雅的七大面向对象设计秘诀

软件项目中&#xff0c;需求是不断变化的&#xff0c;需求也是项目中最难把控的&#xff0c;需求的变更也是无法避免的。我们写的软件程序&#xff0c;如何能实现拥抱变化&#xff0c;使我们的软件达到可维护和可复用&#xff0c;这是一代代软件工程师不断追寻的真理。 导致一个…

接口数据脱敏实现方案

背景 敏感信息如手机号、身份证、邮箱等信息需要脱敏后展示给前台&#xff0c;如果需要查看&#xff0c;则需要申请权限&#xff0c;查询时需要记录操作日志。 方案 通过JsonSerializer和注解&#xff0c;在json序列化的时候做脱敏操作 此处使用redis存储了加密后的key和明…

认养小游戏功能介绍

认养小游戏通常模拟了真实的农业生产过程&#xff0c;让玩家能够在线上体验种植、养殖的乐趣。以下是一些常见的认养小游戏功能介绍&#xff1a; 选择认养的农产品&#xff1a;首先&#xff0c;玩家可以从游戏中提供的多种农产品中选择自己想要认养的种类&#xff0c;如蔬菜、…

【Java一些注解知识】

RequestMapping RequestMapping是Spring框架中的一个注解&#xff0c;用于将HTTP请求映射到特定的处理方法上。通过使用RequestMapping注解&#xff0c;我们可以指定处理方法应该处理的URL路径和HTTP请求方法。 下面是一个简单的示例&#xff1a; 假设我们有一个UserControl…