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

news2024/11/16 5:39:36

关键点/角点检测

        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.coloradmin.cn/o/1658668.html

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

相关文章

SparkSQL概述

1.1. SparkSQL介绍 SparkSQL&#xff0c;就是Spark生态体系中的构建在SparkCore基础之上的一个基于SQL的计算模块。SparkSQL的前身不叫SparkSQL&#xff0c;而是叫做Shark。最开始的时候底层代码优化、SQL的解析、执行引擎等等完全基于Hive&#xff0c;总是Shark的执行速度要比…

SpringCloud:认识微服务

程序员老茶 &#x1f648;作者简介&#xff1a;练习时长两年半的Java up主 &#x1f649;个人主页&#xff1a;程序员老茶 &#x1f64a; P   S : 点赞是免费的&#xff0c;却可以让写博客的作者开心好久好久&#x1f60e; &#x1f4da;系列专栏&#xff1a;Java全栈&#…

让数据更「高效」一点!IvorySQL在Neon平台上的迅速部署和灵活应用

IvorySQL本身就是一个100%兼容PostgreSQL最新内核的开源数据库系统&#xff0c;而Neon Autoscaling Platform通常支持多种数据库和应用程序。将IvorySQL集成到该平台后&#xff0c;可以进一步增强与其他系统和应用程序的兼容性&#xff0c;同时更全面的体验IvorySQL的Oracle兼容…

lint 代码规范,手动修复,以及vscode的第三方插件eslint自动修复

ESlint代码规范 不是语法规范&#xff0c;是一种书写风格&#xff0c;加多少空格&#xff0c;缩进多少&#xff0c;加不加分号&#xff0c;类似于书信的写作格式 ESLint:是一个代码检查工具&#xff0c;用来检查你的代码是否符合指定的规则(你和你的团队可以自行约定一套规则)…

【3dmax笔记】032: 编辑顶点

一、编辑顶点概述 (1)启动安装好的3dmax软件。 (2)选择顶视图,用图形画出一个矩形。 (3)选择矩形,右击鼠标,将矩形转换成可编辑样条线。 (4)进入顶点层级。 展开可编辑样条线,选择顶点层级(快捷键为1,在不展开样条线的情况下也可以选择顶点层级)。选择后,可以…

python:做柱状图

import matplotlib.pyplot as plt # 数据 categories [A, B, C, D] values [23, 45, 56, 78] # 创建柱状图 plt.bar(categories, values) # 添加标题和标签 plt.title(柱状图示例) plt.xlabel(类别) plt.ylabel(数值) # 显示图形 plt.show() D:\software\新建文件夹\python\L…

TODESK远程开机的原理

在现代计算机技术飞速发展的背景下&#xff0c;远程控制软件成为我们日常工作中不可或缺的工具。其中&#xff0c;ToDesk作为一款高效且易用的远程控制软件&#xff0c;备受用户青睐。那么&#xff0c;ToDesk远程开机的原理是什么呢&#xff1f;本文将为你揭晓这个秘密。 KKVie…

[淘宝销量]—采集分析—实例参考▶

[干货] 本文爬取淘宝的搜索结果&#xff0c;包含标题、价格、原价、店铺、月销量字段。将结果保存成csv格式&#xff0c;并作简单分析。以手机为例。【淘宝销量】 用到的python库&#xff1a;selenium、urllib、pyquery、pandas。 1.爬取页面分析 1.1 获取URL 打开淘宝&am…

Python | Leetcode Python题解之第79题单词搜索

题目&#xff1a; 题解&#xff1a; class Solution:def exist(self, board: List[List[str]], word: str) -> bool:def dfs(i, j, k):if not 0 < i < len(board) or not 0 < j < len(board[0]) or board[i][j] ! word[k]: return Falseif k len(word) - 1: r…

Linux线程(一)初识线程

目录 一、什么是线程 二、线程和进程的区别 三、线程的操作 1、创建线程 2、获取线程ID 3、线程的终止与等待 4、线程分离 一、什么是线程 在Linux中&#xff0c;线程&#xff08;thread&#xff09;是一种轻量级进程&#xff08;Light-weight Process, LWP&#xff09…

五一超级课堂---Llama3-Tutorial(Llama 3 超级课堂)---第一节 Llama 3 本地 Web Demo 部署

课程文档&#xff1a; https://github.com/SmartFlowAI/Llama3-Tutorial 课程视频&#xff1a; https://space.bilibili.com/3546636263360696/channel/collectiondetail?sid2892740&spm_id_from333.788.0.0 操作平台&#xff1a; https://studio.intern-ai.org.cn/consol…

全面解析C++11与C++20线程(含内容)

昨晚跟一些小伙伴做了第一次直播尝试&#xff0c;一起探讨了C11 thread与 C20的jthread&#xff0c;于此同时给大家出了几个问题&#xff0c;在直播之外不会公布答案&#xff0c;所以以后直播还是得跟着走起。 总共有22人参加直播&#xff0c;氛围相当不错&#xff0c;没有录播…

Linux 无名信号量(Semaphore)的使用

目录 一、无名信号量的概念二、无名信号量相关函数三、信号量的使用步骤四、应用场景五、测试代码 一、无名信号量的概念 Linux无名信号量&#xff08;Semaphore&#xff09;   在Linux操作系统中&#xff0c;信号量&#xff08;Semaphore&#xff09;是一种用于进程间或线程…

sqlite3命令行工具无法退出问题处理

一、背景&#xff1a; 软件使用的后台数据库为sqlite&#xff0c;linux主机系统层面使用sqlite3命令行工具登录数据库后&#xff0c;无法执行sql脚本&#xff0c;无法退出sqlite3。无法执行ctrlc&#xff0c;执行ctrlz后sqlite3前台进程被中断&#xff0c;但是该进程没有退出。…

字节发布文生图模型PuLID:高效身份ID特征定制,单张图像克隆AI虚拟分身

前言 字节研究团队近日提出了一种新型的文生图身份ID定制方法PuLID(Pure and Lightning ID Customization)。相较于传统的微调方法&#xff0c;PuLID无需复杂的参数优化就可以实现高效的身份ID定制&#xff0c;且能最大程度减少对原始模型行为的干扰。 PuLID是通过将轻量级的…

docker学习-docker常用其他命令整理

随便写写&#xff0c;后面有空再更新 镜像命令&#xff0c;容器命令已在之前略有更新&#xff0c;这次不写&#xff0c; 一、后台启动命令 # 命令 docker run -d 容器名 # 例子 docker run -d centos # 启动centos&#xff0c;使用后台方式启动 # 问题&#xff1a; 使用doc…

Electron学习笔记(一)

文章目录 相关笔记笔记说明 一、轻松入门 1、搭建开发环境2、创建窗口界面3、调试主进程 二、主进程和渲染进程1、进程互访2、渲染进程访问主进程类型3、渲染进程访问主进程自定义内容4、渲染进程向主进程发送消息5、主进程向渲染进程发送消息6、多个窗口的渲染进程接收主进程发…

OSError: image file is truncated (36 bytes not processed)解决方案

错误原因&#xff1a; 图像文件被损坏 解决方案&#xff1a; 代码开头添加如下两行代码&#xff1a; from PIL import ImageFile ImageFile.LOAD_TRUNCATED_IMAGES True

[华为OD] B卷 树状结构查询 200

题目&#xff1a; 通常使用多行的节点、父节点表示一棵树&#xff0c;比如 西安 陕西 陕西 中国 江西 中国 中国 亚洲 泰国 亚洲 输入一个节点之后&#xff0c;请打印出来树中他的所有下层节点 输入描述 第一行输入行数&#xff0c;下面是多行数据&#xff0c;每行以空…

远程开机与远程唤醒BIOS设置

远程开机与远程唤醒BIOS设置 在现代计算机应用中&#xff0c;远程管理和控制已成为许多企业和个人的基本需求。其中&#xff0c;远程开机和远程唤醒是两项非常实用的功能。要实现这些功能&#xff0c;通常需要在计算机的BIOS中进行一些特定的设置。以下是对远程开机和远程唤醒…