使用AffNet和HardNet进行图像匹配

news2024/12/26 21:28:07

一、说明

        我们有一个任务是找到与给定查询图像最匹配的图像。首先,我们在OpenCV中尝试了使用SIFT描述符和基于Flann的匹配器的经典图像匹配。结果是完全错误的。然后是词袋...最后,找到了AffNet和HardNet。

二、关于AffNet和HardNet

        本文专门介绍如何进行应用实验,不对AffNet和HardNet原理进行详细说明。

AffNet是一种学习具有硬负常数损失的局部仿射协变区域的新方法,其性能优于最先进的词袋图像检索和宽基线立体声。

AffNet培训(来自原始论文)

        HardNet 是一种新颖的紧凑学习特征描述符,在标准匹配和检索基准测试上显示了与手工制作和学习描述符相关的最先进的卓越性能,并且在 GPU 上计算速度很快(作者论文)。它在github上公开可用。

        以下是使用 AffNet 匹配通过极端仿射变换捕获的图像的一个很好的例子

在这里,作者在一篇论文中更详细地描述了这种方法。关于硬网的好介绍。

三、代码获取

 从 github 克隆存储库:

git clone https://github.com/ducha-aiki/affnet.git

        然后移动到该文件夹。

        启动 Jupyter :

jupyter notebook

        并在文件夹示例中打开笔记本 SIFT-AffNet-HardNet-kornia-matching.ipynb。首先安装所有必需的库。在笔记本顶部创建一个单元格并运行

!pip install kornia pydegensac extract_patches

        如果您有 OpenCV 版本 4,则可能会收到函数 SIFT_create 的错误:“函数/特性未实现此算法已获得专利,并在此配置中被排除;”。SIRF 和 SURF 在 opencv > 3.4.2.16 中不再可用。安装旧版本的OpenCV:

pip install opencv-python==3.4.2.16
pip install opencv-contrib-python==3.4.2.16

        有三个管道:

  • DoG-AffNet-OriNet-HardNet (使用 AffNetJIT、OriNetJIT、提取 SIFT 键点、HardNet 描述符等)
  • DoG-Affine-OriNet-HardNet
  • DoG-OriNet-HardNet

当使用DoG-AffNet-OriNet-HardNet管道对作者提供的图像进行AffNet匹配时,我们得到以下结果

30.0 inliers found

        对于这些图像来说非常好。

        对于管道DoG-AffNet-OriNet-HardNet

18.0 inliers found

对于管道DoG-OriNet-HardNet

25.0 inliers found

当我们在室内场景比赛的图像上测试AffNet时,没有任何调整参数就很兴奋。这里不需要对AffNet进行再培训。

要集成 AffNet,您只需安装所需的库并下载预训练的模型权重

wget https://github.com/ducha-aiki/affnet/raw/master/convertJIT/AffNetJIT.pt
wget https://github.com/ducha-aiki/affnet/raw/master/convertJIT/OriNetJIT.pt
wget https://github.com/ducha-aiki/affnet/raw/master/test-graf/img1.png
wget https://github.com/ducha-aiki/affnet/raw/master/test-graf/img6.png
wget https://github.com/ducha-aiki/affnet/raw/master/test-graf/H1to6p

将 Jupyter 笔记本转换为 python 脚本

jupyter nbconvert SIFT-AffNet-HardNet-kornia-matching.ipynb --to python

默认情况下,CPU 由 PyTorch 使用

dev = torch.device('cpu')

您可以切换到上面的GPU注释行和取消注释的后续行

#dev = torch.device('cuda')

就是这样。祝您在解决匹配图像的问题时好运。

四、结论

        我们在上文讲述了如何在python环境用AffNet和HardNet实现图像匹配,试图实现这种功能的读者可以照着套路进行应用,至于更多的原理,我们将在其它文中详细论述。 我们从这些幻灯片中了解了AffNet和HardNet的组合。

普里瓦洛夫·弗拉基米尔

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

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

相关文章

什么是浮动(float)?如何清除浮动?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 浮动(Float)和清除浮动⭐ 浮动的使用⭐ 清除浮动1. 空元素法(Empty Element Method)2. 使用 Clearfix Hack3. 使用 Overflow ⭐ 写在最后 ⭐ 专栏简介 前端入门之旅:探索Web开发…

《Java-SE-第三十七章》之反射

前言 在你立足处深挖下去,就会有泉水涌出!别管蒙昧者们叫嚷:“下边永远是地狱!” 博客主页:KC老衲爱尼姑的博客主页 博主的github,平常所写代码皆在于此 共勉:talk is cheap, show me the code 作者是爪哇岛的新手,水平很有限&…

【Vue-Router】嵌套路由

footer.vue <template><div><router-view></router-view><hr><h1>我是父路由</h1><div><router-link to"/user">Login</router-link><router-link to"/user/reg" style"margin-left…

Selenium 测试用例编写

编写Selenium测试用例就是模拟用户在浏览器上的一系列操作&#xff0c;通过脚本来完成自动化测试。 编写测试用例的优势&#xff1a; 开源&#xff0c;免费。 支持多种浏览器 IE&#xff0c;Firefox&#xff0c;Chrome&#xff0c;Safari。 支持多平台 Windows&#xff0c;Li…

【C语言】const修饰普通变量和指针

大家好&#xff0c;我是苏貝&#xff0c;本篇博客是系列博客每日一题的第一篇&#xff0c;本系列的题都不会太难&#xff0c;如果大家对这种系列的博客感兴趣的话&#xff0c;可以给我一个赞&#x1f44d;吗&#xff0c;感谢❤️ 文章目录 一.const修饰普通变量二.const修饰指…

Spring事务控制

目录 1、什么是事务控制 2、编程式事务控制 2.1、简介 2.2、相关对象 2.2.1、PlatformTransactionManager 2.2.2、TransactionDefinition 2.2.2.1、事务隔离级别 2.2.2.2、事务传播行为 2.2.3、TransactionStatus 3、声明式事务控制 3.1、简介 3.2、区别 3.3、⭐作…

Unity实现异步加载场景

一&#xff1a;创建UGUI 首先我们在LoginCanvas登入面板下面创建一个Panel,取名为LoadScreen,再在loadScreen下面创建一个Image组件&#xff0c;放置背景图片&#xff0c;然后我们再在lpadScreen下面继续创建一个Slider,这个是用来加载进度条的&#xff0c;我们改名为LoadSlid…

【考研数学】概率论与数理统计 | 第一章——随机事件与概率(1)

文章目录 一、随机试验与随机事件1.1 随机试验1.2 样本空间1.3 随机事件 二、事件的运算与关系2.1 事件的运算2.2 事件的关系2.3 事件运算的性质 三、概率的公理化定义与概率的基本性质3.1 概率的公理化定义3.2 概率的基本性质 写在最后 一、随机试验与随机事件 1.1 随机试验 …

Docker-使用数据卷、文件挂载进行数据存储与共享

一、前言 默认情况下&#xff0c;在Docker容器内创建的所有文件都只能在容器内部使用。容器删除后&#xff0c;数据也跟着删除&#xff0c;虽然通常我们不会删除容器&#xff0c;但是一旦宿主机发生故障&#xff0c;我们重新创建容器恢复服务&#xff0c;那么之前容器创建的文…

Matlab图坐标轴数值负号改为减号(change the hyphen (-) into minus sign (−, “U+2212”))

在MATLAB中&#xff0c;坐标轴负数默认符号是 - &#xff0c;如下图所示 x 1:1:50; y sin(x); plot(x,y)可通过以下两语句将负号修改为减号&#xff1a; set(gca,defaultAxesTickLabelInterpreter,latex); yticklabels(strrep(yticklabels,-,$-$));或者 set(gca, TickLabe…

安装mmcv失败

安装mmcv时报错 pip install mmcv这里只需要按照提示升级一下pip就可以了 pip install --upgrade pip然后安装成功

OCT介绍和分类

前言&#xff1a;研究方向和OCT有关&#xff0c;为了方便以后回顾&#xff0c;所以整理了OCT相关的一些内容。 OCT介绍和分类 OCT介绍分类时域OCT频域OCT扫频OCT谱域OCT OCT介绍 名称&#xff1a;OCT、光学相干层析成像术、Optical Coherence Tomography。 概念&#xff1a;O…

添加vue devtools扩展工具+添加后F12不显示Vue图标

前言&#xff1a;在开启Vue学习之旅时&#xff0c;遇到问题两个问题&#xff0c;第一添加不上vue devtools扩展工具&#xff0c;第二添加完成后&#xff0c;F12不显示Vue图标。查阅了很多博客&#xff0c;自己解决了问题&#xff0c;故写此博客记录。如果你遇到和我一样的问题&…

Docker容器与虚拟化技术:Docker架构、镜像管理

目录 一、理论 1.Doker概述 2.Docker核心概念 3.Docker安装 4.Docker的镜像管理命令 二、实验 1.Docker安装 2.查看Docker信息 3.Docker的镜像管理命令 三、问题 1.如何注册Docker账号 2.如何设置Docker公共存储库 四、总结 一、理论 1.Doker概述 (1) IT架构 裸…

request发送http请求

今天正式开始为大家介绍接口自动化&#xff0c;相信很多做测试的朋友&#xff0c;都用过一些工具&#xff0c;比如jmeter&#xff0c;loadrunner&#xff0c;postman等等&#xff0c;所以今天先给那些基础不太好的同学&#xff0c;先讲讲postman如何来测接口以及如何用pthon代码…

T113-S3 Tina-Linux -- 2.开发板使用

1. 硬件环境 1.1 开发板 型号&#xff1a;100ASK_T113-PRO Base V1.1&#xff08;韦东山&#xff09;配置&#xff1a;CPU&#xff1a;T113-S3&#xff0c;RAM&#xff1a;128MB&#xff0c;ROM&#xff1a;128MB 2. 各模块使用 2.1 wifi wifi模组型号&#xff1a;XR829…

数学建模(三)整数规划

视频推荐&#xff1a;B站_数学建模老哥 一、整数规划基本原理 数学规划中的变量&#xff08;部分或全部&#xff09;限制为整数时&#xff0c;称为整数规划。若在线性规划模型中&#xff0c;变量限制为整数&#xff0c;则称为整数线性规划。目前所流行的求解整数规划的方法&am…

C语言刷题训练【第11天】

大家好&#xff0c;我是纪宁。 今天是C语言笔试刷题训练的第11天&#xff0c;加油&#xff01; 文章目录 1、声明以下变量&#xff0c;则表达式: ch/i (f*d – i) 的结果类型为&#xff08; &#xff09;2、关于代码的说法正确的是&#xff08; &#xff09;3、已知有如下各变…

微PE工具箱实现U盘重装Windows系统

教程来源 U盘重装Windows系统&#xff08;微PE工具箱&#xff09;_哔哩哔哩_bilibili 加上自己的一丢丢理解&#xff0c;如果你觉得长视频看了犯困&#xff0c;不如看看我的理解文章说不定能够帮助到你 准备工作 到这个网站使用迅雷下载免费无插件的官方镜像MSDN, 我告诉你…