使用AffNet和HardNet进行图像匹配

一、说明

        我们有一个任务是找到与给定查询图像最匹配的图像。首先,我们在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的组合。

普里瓦洛夫·弗拉基米尔

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【C++初阶】string类的常见基本使用

👦个人主页:Weraphael ✍🏻作者简介:目前学习C和算法 ✈️专栏:C航路 🐋 希望大家多多支持,咱一起进步!😁 如果文章对你有帮助的话 欢迎 评论💬 点赞&#x1…

zabbix自动注册服务器以及部署代理服务器

文章目录 Zabbix自动注册服务器及部署代理服务器一.zabbix自动注册1.什么是自动注册2.环境准备3.zabbix客户端配置4.在 Web 页面配置自动注册5.验证自动注册 二.部署 zabbix 代理服务器1.分布式监控的作用:2.环境部署3.代理服务器配置4.客户端配置5.web页面配置5.1 …

Opencv-C++笔记 (17) : 模板匹配

文章目录 1--概念2-- 方法3 结果3.1 ROI区域的获取使用自适应目标匹配 1–概念 opencv 提供了一个专门用于模板匹配的函数 cv::matchTemplate();其调用方式如下: void cv::matchTemplate(cv::InputArray image, // 用于搜索的输入图像, 8U 或 32F, 大小 W-Hcv::Inpu…

LabVIEW使用图像处理进行交通控制性能分析

LabVIEW使用图像处理进行交通控制性能分析 采用普雷维特、拉普拉斯、索贝尔和任意的空间域方法对存储的图像进行边缘检测,并获取实时图像。然而,对四种不同空间域边缘检测方法的核的性能分析。 以前,空路图像存储在数据库中,道路…

drawio----输出pdf为图片大小无空白(图片插入论文)

自己在写论文插入图片时为了让论文图片放大不模糊,啥方法都试了,最后摸索出来这个。 自己手动画图的时候导出pdf总会出现自己的图片很小,pdf的白边很大如下如所示,插入论文的时候后虽然放大不会模糊,但是白边很大会显…

看完《孤注一掷》:原来这类人最容易被电信诈骗!

最近,你看了诈骗电影《孤注一掷》吗? “想成功先发疯,不顾一切向钱冲;拼一次富三代,拼命才能不失败;今天睡地板,明天当老板!”诈骗工厂里的被骗去打黑工的人们一次次高呼着朗朗上口…

HTTPS 的加密流程

目录 一、HTTPS是什么? 二、为什么要加密 三、"加密" 是什么 四、HTTPS 的工作过程 1.对称加密 2.非对称加密 3.中间人攻击 4.证书 总结 一、HTTPS是什么? HTTPS (Hyper Text Transfer Protocol Secure) 是基于 HTTP 协议之上的安全协议&…

c语言——拷贝数组

这段代码是一个简单的数组拷贝示例。它的功能是将一个原始数组 original 的内容拷贝到另一个数组 copied 中,并输出两个数组的元素。 代码执行过程如下: 首先,在 main() 函数中定义了一个整型数组 original,并初始化了它的元素。…

【java毕业设计】基于SSM+MySql的人才公寓管理系统设计与实现(程序源码)--人才公寓管理系统

基于SSMMySql的人才公寓管理系统设计与实现(程序源码毕业论文) 大家好,今天给大家介绍基于SSMMySql的人才公寓管理系统设计与实现,本论文只截取部分文章重点,文章末尾附有本毕业设计完整源码及论文的获取方式。更多毕业…

shell脚本之正则表达式

目录 一.常见的管道命令1.1sort命令1.2uniq命令1.3tr命令1.4cut命令1.5实例1.5.1统计当前主机连接状态1.5.2统计当前主机数 二.正则表达式2.1正则表达式的定义2.2常见元字符(支持的工具:find,grep,egrep,sed和awk&…

23.8.16日总结

原先写的评论是每级评论用缩进来区分,所以最多设置的是九级评论,修改了排版和格式: 还有管理员页面,查看文章时可以进行点赞,收藏的操作,现在进行了修改,将相关操作隐藏。 还有点击查看未发布…

语聚AI公测发布,大语言模型时代下新的生产力工具

语聚AI 公测发布 距离语聚AI内测上线已经过去近1个月。 这期间,我们共邀请了近百位资深用户与行业专家加入语聚AI产品体验。通过大家的热情参与积极反馈,我们不断优化并完善了语聚AI的功能与使用体验。 经过研发团队不懈的努力,今天语聚AI终…

深入源码分析kubernetes informer机制(三)Resync

[阅读指南] 这是该系列第三篇 基于kubernetes 1.27 stage版本 为了方便阅读,后续所有代码均省略了错误处理及与关注逻辑无关的部分。 文章目录 为什么需要resyncresync做了什么 为什么需要resync 如果看过上一篇,大概能了解,client数据主要通…

B树和B+树区别

B树和B树的区别 B树 B树被称为平衡树,在B树中,一个节点可以有两个以上的子节点。B树的高度为log M N。在B树中,数据按照特定的顺序排序,最小值在左侧,最大值在右侧。 B树是一种平衡的多分树,通常我们说m阶…

Unity-Linux部署WebGL项目MIME类型添加

在以往的文章中有提到过使用IIS部署WebGL添加MIME类型使WebGL项目在浏览器中能够正常加载,那么如果咱们做的是商业项目,往往是需要部署在学校或者云服务器上面的,大部分情况下如果项目有接口或者后台管理系统,后台基本都会使用Lin…

arcgis pro 3.0.2 安装及 geemap

arcgis pro 3.0.2 安装及 geemap arcgis pro 3.0.2 安装 arcgis pro 3 版本已经很多了,在网上找到资源就可以进行安装 需要注意的是:有的文件破解文件缺少,导致破解不成功。 能够新建地图就是成功了! geemap安装 1.需要进行环…

FL Studio 21最新for Windows-21.1.0.3267中文解锁版安装激活教程及更新日志

FL Studio 21最新版本for Windows 21.1.0.3267中文解锁版是最新强大的音乐制作工具。它可以与所有类型的音乐一起创作出令人惊叹的音乐。它提供了一个非常简单且用户友好的集成开发环境(IDE)来工作。这个完整的音乐工作站是由比利时公司 Image-Line 开发…

Flutter源码分析笔记:Widget类源码分析

Flutter源码分析笔记 Widget类源码分析 - 文章信息 - Author: 李俊才 (jcLee95) Visit me at: https://jclee95.blog.csdn.netEmail: 291148484163.com. Shenzhen ChinaAddress of this article:https://blog.csdn.net/qq_28550263/article/details/132259681 【介绍】&#x…

Spring源码深度解析一(IOCDI)

1. Spring架构设计 Spring框架是一个分层架构,他包含一系列的功能要素,并被分为大约20个模块 2. 设计理念 Spring是面向Bean的编程(BOP:Bean Oriented Programming),Bean在Spring中才是真正的主角。Bean在…

物联网工程应用实训室建设方案

一、物联网工程应用系统概述 1.1物联网工程定义 物联网工程(Internet of Things Engineering)是一种以信息技术(IT)来改善实体世界中人们生活方式的新兴学科,它利用互联网技术为我们的日常生活活动提供服务和增益&am…