图像特征检测算法SuperPoint和SuperGlue

SuperPoint

  • 背景与概述 :SuperPoint 是一个自监督的全卷积神经网络,用于提取图像中的兴趣点及其描述子。它在 2018 年由 Magic Leap 提出,通过在合成数据集上预训练一个基础检测器 MagicPoint,然后利用同胚适应技术对真实图像数据集进行标记,从而得到一个增强的检测器 SuperPoint,使其在真实世界图像上具有可靠性。

  • 网络结构 :其架构基于编码器 - 解码器结构。编码器是一个类似 VGG 的卷积神经网络,用于提取图像特征;解码器则分为两个分支,一个分支用于预测特征点的位置,另一个分支用于生成特征点的描述子。

  • 工作原理 :输入一张图像后,编码器对图像进行特征提取,得到特征图。然后,一个解码器分支通过对特征图的处理,使用 softmax 和非极大值抑制等操作,得到图像中特征点的位置。另一个解码器分支则对特征图进行插值等操作,生成每个特征点的描述子。

  • 优势 :能够在一张图像中找到具有高区分度的特征点,并为每个特征点生成具有强描述能力的向量描述子。SuperPoint 提取的特征点数量远大于传统方法如 SIFT 等,且具有较好的稳定性和可重复性,在不同的光照条件、视角变化和图像尺度下都能保持较好的性能。

  • 应用场景 :常用于图像匹配、三维重建、视觉定位、SLAM 等任务中,如在 SLAM 中,可作为前端的特征点提取模块,为后端的位姿估计和地图构建提供可靠的特征点信息。

SuperGlue

  • 背景与概述 :SuperGlue 是由 Magic Leap 和苏黎世联邦理工学院(ETH)合作开发的一种用于图像特征匹配的神经网络。它于 2020 年提出,在 CVPR2020 图像匹配挑战赛中排名第一,与 SuperPoint 配合使用效果极佳。

  • 网络结构 :主要由注意力图神经网络和最优匹配层组成。注意力图神经网络包括关键点编码和注意力聚合网络,关键点编码将关键点位置和描述子编码为一个向量,再通过多层感知机将低维向量映射为高维向量;注意力聚合网络则使用自注意力层和交叉注意力层交替更新特征点的表示。

  • 工作原理 :输入两组图像的特征点坐标和描述子,如图像 A 的特征点坐标 p_A、描述子 d_A 以及图像 B 的特征点坐标 p_B、描述子 d_B。首先对输入的特征点和描述子进行编码,得到初始的特征表示。然后通过自注意力机制和交叉注意力机制交替作用,聚合图像内和图像间的特征信息,更新特征点的表示。接着将匹配问题建模为一个可微的最优传输问题,使用Sinkhorn-Knopp 算法求解,得到特征点之间的匹配关系和匹配分数。

  • 优势 :能够充分利用图像内的特征关系以及两幅图像间的特征关系,对特征点进行更准确的匹配。它可以自动学习特征点之间的匹配模式,适应不同的场景和图像变化,具有很强的泛化能力,并且能够有效地处理特征点的可见性和遮挡问题。

  • 应用场景 :除了在图像匹配任务中表现出色外,还广泛应用于三维重建、视觉定位、目标识别等领域。例如在多视角三维重建中,通过匹配不同视角图像中的特征点,为三维点云的生成和模型的构建提供准确的对应关系。

superpoint_superglue_deployment

superpoint_superglue_deployment 是一个用于简化 SuperPoint 和 SuperGlue 模型部署的库。

安装

可以直接通过 pip 进行安装:

pip install superpoint_superglue_deployment

使用

  • 导入库 :先导入 opencv-python、numpy 等依赖库以及 superpoint_superglue_deployment 库中的 Matcher 模块。
  • 准备图像 :读取待匹配的两张图像,分别以彩色和灰度模式读取。
  • 初始化匹配器 :创建 Matcher 对象,并传入配置字典,其中可对 SuperPoint 和 SuperGlue 的相关参数以及是否使用 GPU 进行设置。
  • 进行匹配 :调用匹配器的 match() 方法,传入灰度图像数据,获取查询图和参考图的特征点、关键点描述符以及匹配结果。
  • 计算单应性矩阵 :利用 OpenCV 的 findHomography 函数,根据匹配结果计算单应性矩阵,以确定图像之间的变换关系。
  • 绘制匹配结果 :使用 OpenCV 的 drawMatches 函数将匹配结果可视化,并保存绘制后的图像。

示例代码

import cv2
import numpy as np
from loguru import logger
from superpoint_superglue_deployment import Matcherdef main():# 读取图像query_image = cv2.imread("./data/images/one_pillar_pagoda_1.jpg")ref_image = cv2.imread("./data/images/one_pillar_pagoda_2.jpg")query_gray = cv2.imread("./data/images/one_pillar_pagoda_1.jpg", 0)ref_gray = cv2.imread("./data/images/one_pillar_pagoda_2.jpg", 0)# 初始化匹配器superglue_matcher = Matcher({"superpoint": {"input_shape": (-1, -1),"keypoint_threshold": 0.003,},"superglue": {"match_threshold": 0.5,},"use_gpu": True,})# 进行匹配query_kpts, ref_kpts, _, _, matches = superglue_matcher.match(query_gray, ref_gray)# 计算单应性矩阵M, mask = cv2.findHomography(np.float64([query_kpts[m.queryIdx].pt for m in matches]).reshape(-1, 1, 2),np.float64([ref_kpts[m.trainIdx].pt for m in matches]).reshape(-1, 1, 2),method=cv2.USAC_MAGSAC,ransacReprojThreshold=5.0,maxIters=10000,confidence=0.95,)logger.info(f"number of inliers: {mask.sum()}")matches = np.array(matches)[np.all(mask > 0, axis=1)]matches = sorted(matches, key=lambda match: match.distance)# 绘制匹配结果matched_image = cv2.drawMatches(query_image,query_kpts,ref_image,ref_kpts,matches[:50],None,flags=2,)cv2.imwrite("matched_image.jpg", matched_image)if __name__ == "__main__":main()

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

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

相关文章

nginx 和 springcloud gateway cors 跨域如何设置

在跨域资源共享(CORS)配置中,Nginx 和 API Gateway(如Spring Cloud Gateway、Kong等)是两种常见的解决方案,它们的配置逻辑和适用场景有所不同。以下是详细对比和配置示例: 一、核心区别 维度NginxAPI Gateway定位反向代理/Web服务器微服务流量入口配置位置基础设施层应…

电路笔记(信号):一阶低通RC滤波器 一阶线性微分方程推导 拉普拉斯域表达(传递函数、频率响应)分析

目录 RC 低通滤波器电路一阶线性微分方程推导拉普拉斯域表达(传递函数)传递函数 H ( s ) H(s) H(s)频率响应(令 s j ω s j\omega sjω)幅频特性:相位特性:Bode 图(线性系统频率响应&#x…

【Git】删除远程分支时,本地分支还能看到

当远程仓库的分支被删除后,本地通过 git branch -a 或 git remote show origin 仍能看到这些分支的引用,是因为本地存储的远程跟踪分支(位于 refs/remotes/origin/)未被同步更新。以下是解决方法: 解决方案&#xff1…

Cubase 通过 MIDIPLUS MIDI 键盘进行走带控制的设置方法

第一步,在官网下载xml配置文件。 https://midiplus.com/upload/202101/29/Xpro & Xpro_mini控制脚本(Cubase).zip 第二步,Cubase中按如图步骤添加映射。 将MIDI键盘连接到电脑后打开Cubase软件,点选菜单“工作室”->“工作室设置”&…

第十八章 Linux之Python定制篇——Python开发平台Ununtu

1. Ubuntu介绍 Ubuntu(友帮拓、优般图、乌班图)是一个以桌面应用为主的开源GUN/Linux操作系统,Ubuntu基于GUN/Linux,支持x86、amd64(即x64)和ppc架构,有全球专业开发团队(Canonical…

推荐轻量级文生视频模型(Text-to-Video)

1. ModelScope T2V by 阿里达摩院(推荐) 模型名:damo/text-to-video-synthesis 输入:一句文字描述(如:"a panda is dancing") 输出:2秒视频(16帧&#xff0c…

流编辑器sed

sed简介 sed是一种流编辑器,处理时,把当前处理的行存储在临时缓冲区中,称为模式空间,接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下行,这样不断重复&#xf…

商用密码基础知识介绍(上)

一、密码的基础知识 1、密码分类 根据《中华人民共和国密码法》,国家对密码实行分类管理,分为密码分为核心密码、普通密码和商用密码。 (1)核心密码、普通密码 核心密码、普通密码用于保护国家秘密信息,核心密码保护…

PROFINET主站S7-1500通过协议网关集成欧姆龙NJ系列TCP/IP主站

一、项目背景 某大型新能源电池生产企业,致力于提升电池生产的自动化水平和智能化程度。其生产线上,部分关键设备采用了不同的通信协议。在电池生产的前段工序,如原材料搅拌、涂布等环节,使用了西门子S7-1500系列PLC作为ROFINET协…

Vue3 + TypeScript + Element Plus + el-input 输入框列表按回车聚焦到下一行

应用效果:从第一行输入1,按回车,聚焦到第二行输入2,按回车,聚焦到第三行…… 一、通过元素 id,聚焦到下一行的输入框 关键技术点: 1、动态设置元素 id 属性为::id"input-appl…

FramePack 全面测评:革新视频生成体验

在 AI 视频生成领域,FramePack 自问世便备受瞩目,它凭借独特的技术架构,号称能打破传统视频生成对高端硬件的依赖,让普通电脑也能产出高质量视频。此次测评,我们将全方位剖析 FramePack,探究它在实际应用中…

html中的table标签以及相关标签

表格标签可以通过指定的标签完成数据展示 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>表格标签</title> </head> <body><table border"2"><!-- tr是表行 r…

springboot+vue3+vue-simple-uploader轻松实现大文件分片上传Minio

最近在写视频课程的上传&#xff0c;需要上传的视频几百MB到几个G不等&#xff0c;普通的上传都限制了文件的大小&#xff0c;况且上传的文件太大的话会超时、异常等。所以这时候需要考虑分片上传了&#xff0c;把需要上传的视频分成多个小块上传到&#xff0c;最后再合并成一个…

AI 重构代码实战:如何用飞算 JavaAI 快速升级遗留系统?

在企业数字化进程中&#xff0c;遗留系统如同陈旧的基础设施&#xff0c;虽承载着重要业务逻辑&#xff0c;但因技术落后、架构复杂&#xff0c;升级维护困难重重。飞算 JavaAI 的出现&#xff0c;为遗留系统的二次开发带来了新的转机&#xff0c;其基于智能分析与关联项目的技…

鸿蒙运动开发实战:打造专属运动视频播放器

##鸿蒙核心技术##运动开发##Media Kit&#xff08;媒体服务&#xff09;# 在当今数字化时代&#xff0c;运动健身已经成为许多人生活的一部分。今天我将在应用中添加视频播放器&#xff0c;帮助用户在运动前、运动后更好地进行热身和拉伸。这篇文章将从代码核心点入手&#xf…

一个包含15个界面高质量的电商APP客户端UI解决方案

一个包含15个界面高质量的电商APP客户端UI解决方案 您可以将其用于电商APP应用项目。包含一系列完整的界面设计元素&#xff0c;包括欢迎页、登录、注册、首页、产品分类、产品详情、尺码选择、购物车、订单、支付&#xff0c;覆盖电商APP的大部分界面。每个部分都精心设计&…

执行 PGPT_PROFILES=ollama make run下面报错,

执行 PGPT_PROFILESollama make run 下面报错&#xff0c; File "/home/powersys/.cache/pypoetry/virtualenvs/private-gpt-ZIwX6JeM-py3.11/lib/python3.11/site-packages/qdrant_client/http/api_client.py", line 108, in send_inner raise ResponseHandling…

【Docker基础】Docker核心概念:命名空间(Namespace)之User详解

目录 引言 1 基础概念回顾 1.1 命名空间概述 1.2 命名空间的类型 2 User命名空间详解 2.1 基本概念 2.2 工作原理 User命名空间的工作流程 User命名空间架构 3 应用场景 4 配置与使用 5 总结 引言 随着容器化技术的广泛应用&#xff0c;Docker已成为现代软件开发、…

DIDCTF-应急响应

前言 最近在学长分享应急响应与电子取证的知识&#xff0c;又恰逢期末周没有课&#xff0c;记录自己在取证道路的成长。 linux-basic-command 下载附件&#xff0c;得到Apache 服务器访问日志文件&#xff0c;根据题目要求找出排名前五的ip&#xff0c;题目提示写脚本&#…

MybatisPlus深入学习

今天深入的学习了一下mp&#xff0c;从头开始学习&#xff01;哈哈哈哈哈 本节只讲干的&#xff01; 我们上来先看一段代码&#xff0c;不知道你能不能看明白&#xff01; package com.itheima.mp.mapper;import com.baomidou.mybatisplus.core.conditions.query.QueryWrapp…