论文地址: GMS: Grid-based Motion Statistics for Fast, Ultra-robust Feature Correspondence
工程地址:github链接

1. 介绍

  该论文提出基于网格的运动统计的方法用于特征匹配,总体思想是针对特征匹配问题,本质上是一个基于统计的解决方法,可以快速区分出正确的匹配和错误的匹配,即将较高的特征点匹配数量转化为较高质量的匹配,使得算法更加快速和鲁棒,如图(1)所示:  该论文认为运动的平滑性导致了匹配的特征点周围的区域有较多匹配的点,因此可以通过计数周围区域的匹配点个数来判断一个匹配正确与否。之前的特征匹配的论文多认为匹配的质量受特征不变性和区别是否明显的影响,本文从一个新的角度来分析,认为原始特征的数量也能够影响匹配的质量。而找到更多特征显然比设计全新的匹配器更加简单,GMS就是这样一个简捷的解决方法,综合来看论文的贡献在于:

  • 将运动平滑性转化为统计问题以判别错误的匹配,使得困难场景上的匹配更加高效
  • 一个有效的基于网格的打分器,能够与实时的特征匹配器结合
  • 证明了GMS系统具有更好的效果(SIFT,SURF,LIFT)

2. 论文提出的方法

  给出一组不同角度的同一场景的图像,特征的匹配即是一幅图中的一个像素/特征点与另一幅图像中的相同点被识别为相似,如果运动是平滑的,领域像素点和特征会共同移动,可以有以下假设:
假设一运动的平滑性使得匹配周围出现一个相似区域的出现,真匹配中两幅图上这样的区域位置移动平滑,假匹配则运动不平滑
包围着相应图像特征的区域{a,b},如下图所示,真匹配xix_ixi​周围的区域是{a,b},一部分真匹配周围的小区域也相同,论文认为真匹配的区域中会有更多相同的区域。
  假设一表明真匹配区域会共享许多相同的小区域,由此提出一个统计方法GMS能够可靠地分辨出真假匹配,论文第三节介绍了用于区域打分的网格算法。

2.1 分析用到的符号

  图像对{Ia,IbI_a,I_bIa​,Ib​}分别有{N,MN,MN,M}个特征,χ=\chi=χ={x1,x2,x3,...,xi,...,xNx_1,x_2,x_3,...,x_i,...,x_Nx1​,x2​,x3​,...,xi​,...,xN​}是所有匹配的特征的区域的集合.χ\chiχ的势为N,目标是将集合χ\chiχ中的真匹配和假匹配区别开来。上图中图像的对应区域{Ia,IbI_a,I_bIa​,Ib​}在图中表示为{a,ba,ba,b},每一个都有{n,mn,mn,m}个特征,χi⊆χ\chi_i \subseteq\chiχi​⊆χ是对应的匹配xix_ixi​的区域内的匹配,SiS_iSi​是区域内支持真匹配的计量/分数,有
(1)Si=∣χi∣−1S_i=|\chi_i|-1\tag{1}Si​=∣χi​∣−1(1)

  -1表示减去了原始的匹配

2.2 统计时的其他限制

  由于特征周围区域选取的较小,论文不考虑区域内的相似的情况,只考虑相同或不同。令faf_afa​表示区域a内n个支撑特征中的一个,给定faf_afa​匹配成功的概率为t,论文需要找到一个阈值来判断{a,ba,ba,b}是真匹配,下图给出了论文推到用到的符号。

下图则给出了faf_afa​的事件空间,faf_afa​在图像b中的相似特征落在区域b(即事件fabf_a^bfab​)或者没有(fabˉ\bar {f_a^b}fab​ˉ​)。匹配要么是真(fatf_a^tfat​),要么是假(faff_a^ffaf​)。给定Tab即当前匹配为真匹配,fabT^{ab}即当前匹配为真匹配,f_a^bTab即当前匹配为真匹配,fab​表示事件fatf_a^tfat​和一部分faff_a^ffaf​的并集,给定Fab即当前匹配为假匹配,fabF^{ab}即当前匹配为假匹配,f_a^bFab即当前匹配为假匹配,fab​必然是faff_a^ffaf​的子集。

  论文还做出了一个假设:即假设二若faf_afa​是一个错误的匹配,则它的匹配可能出现在全图的任一位置
  这样当匹配错但还是匹配到区域b中的概率可以表示为:
(2)p(fab∣faf)=βm/Mp(f_a^b|f_a^f)=\beta m/M\tag{2}p(fab​∣faf​)=βm/M(2)

  其中m表示区域b中的特征数,β\betaβ是一个因子,使得假设更加strong,当β=1\beta=1β=1时是一个通常的情况。
  令pt=p(fab∣Tab)p_t=p(f_a^b|T^{ab})pt​=p(fab​∣Tab)时给定图像中的相同位置{a,b},特征faf_afa​的在图像b中最相似的特征点落在区域b中的概率,其中包含匹配正确或者匹配错误但仍在区域b中,根据贝叶斯法则和事件fat,faff_a^t,f_a^ffat​,faf​于TabT^{ab}Tab独立,可得最后计算结果,如下所示:

  同理有pf=p(fab∣Fab)p_f=p(f_a^b|F^{ab})pf​=p(fab​∣Fab),即错误匹配且落在区域b中,计算如下所示:

  由于每个特征是否匹配相互独立,使用假设一和公式3,4可以近似得到SiS_iSi​的分布,是一个二项分布的形式,如下所示:

  公式5的重点在于真匹配和假匹配都有区域内支持特征的分数,但是S的分布却大不相同,也就是S的概率分布函数可能是双峰的,使得S的分数成为区别真假匹配的有效因子,下图说明了真匹配和假匹配区域内支持特征的分数统计的不同分布(横轴是当前匹配周围区域内支持为真的特征点fatf_a^tfat​的数量也就是S,纵轴应该是可信度,但是个人觉得这个边界不应该这样,即便有特殊情况,右端S越大真匹配的可信度会慢慢降低,或者左端S越大假匹配的可信度越来越大,但也不应该有这么大的空间, 貌似不是可信度,不管是什么总感觉不太对~):

2.3 选取多个区域

  运动通常在很大的一个区域上都是平滑的,然而假设一需要足够小的区域,在较大区域中可能真匹配的区域中会包含不支持的特征点,反之也一样。这会导致真假匹配随分数的分布区别不明显,由此提出另一个假设:假设三如运动在一个较大的区域平滑,真匹配周围的多个小区域都相似,也就是分数高。这样会得到一个更加一般的分数计算方式,即:

  其中K表示不相交的区域的个数{ak,bka^k,b^kak,bk}是预测得到的区域对,χakbk⊆χ\chi_{a^kb^k} \subseteq\chiχakbk​⊆χ是落在区域对{ak,bka^k,b^kak,bk}上的匹配的子集,分数的分布如下所示:

  假设三的意思就是说运动在一个较大的区域内也平滑(个人认为),计算分数的时候考虑与区域a邻近的更大的区域,这样做会增大真假匹配的差异。相应的均值和方差可以通过如下方式计算:

2.4 分析

  Partionability Score

  这个因数即算法的真假匹配的区分能力,用均值的差除以标准差的和表示真匹配和假匹配区别的大小即两个分布的距离,算法目标就是要最大化这个P值。
  Quantity-Quality equivalence

  即给定mt>mfm_t >m_fmt​>mf​,真假匹配的区别随着特征数的增大而增大,也就是说对于较难分析的场景需要更多的特征数,如下图所示,第一层代表的传统方法主要是通过增加描述符来获得更好的效果,第三个对较大范围的变形建模效果就最好;第二层的GMS方法能够使用ORB实现相同的效果,仅仅增加了特征的数量而已。

  Motion Prediction:增加特征数量在实际应用中很困难,公式10表明我们可以增加K,即增加加入分数计算的区域的个数,这也是论文使用的方式。
  Practical Applicability:在特征数量足够多的时候,GMS相当有效,给定10000个均匀分布的特征,参数取{m=n=25,β=1,t=0.5,K=1m=n=25,\beta=1,t=0.5,K=1m=n=25,β=1,t=0.5,K=1},因此SiS_iSi​的均值和标准差为:

  这个区别已经很大,而且此时K=1,这证明了GMS匹配能力十分强大。
  Relationshop to descriptors:真假匹配的区别大小和概率t的关系可以通过以下式子给出:

  也就是特征越强,即概率为1,则P趋向于无穷大

3. 用于快速打分的基于网格的方法

  论文第三节第一段主要介绍了什么是网格框架,说明了以下几个问题:

  • 通过网格单元进行高效的分数计算
  • 哪些网格单元应当视为计算支持特征的区域加入计算
  • 使用多少个网格单元
  • 怎样高效的计算阈值S

  第二段则介绍了算法的细节。

3.1 通过网格来解决问题

高效的分数计算.为每个特征匹配的区域打分的时间复杂度是O(N),NO(N),NO(N),N是特征数量。这样尽可能多地提高特征数量和实时的目标就有了冲突,论文将一幅图像划分为20×2020 \times 2020×20的不重复网格,这样算法的复杂度降为O(1)。实际上可能会有很多特征正好处于网格的边界,所以论文会调整网格的长宽进行三次的算法迭代得到分数。

将区域组合以更加鲁棒.公式6和10表明组合更多的区域能够增大真假匹配的区别,根据公式6选择一个3×33 \times 33×3区域如上图所示,可以得到对于每个单元对{i,ji,ji,j},分数SijS_{ij}Sij​为:

  其中∣χikjk∣|\chi_{i^kj^k}|∣χikjk​∣是单元格{ik,jki^k,j^kik,jk}之间的匹配,如下图所示,

使用多少个网格单元?使用较多的网格单元会提高匹配定位效果,但是会减少每个单元中特征的数量进而减弱真假匹配的区别,虽然增加K值可以避免但是却大大增加了计算时间,论文使用一个经验值即G=20×20G=20\times 20G=20×20和10000个特征。即每个网格25个特征。
真假匹配的阈值SijS_{ij}Sij​.通过真假匹配的分布来看,τ=mf+αsf\tau=m_f+\alpha s_fτ=mf​+αsf​,实际上是一个经验值,mfm_fmf​非常小而α\alphaα非常较大经验值取6从而使得算法拒绝更多的假匹配,近似地τ≈αsf≈αn\tau \approx \alpha{s_f} \approx \alpha \sqrt{n}τ≈αsf​≈αn​,从而有:

  ni是3×3n_i是3 \times 3ni​是3×3个网格的总特征数。

3.2 实现细节

  使用OpenCV ORB特征,特征数量设定为10000。纹理较强的图像的特征远远多于10000(特征会聚成一个点分布不均)→\to→将所有图片resize成固定大小,论文选择 480 X 640;纹理较弱的图像的特征少于10000→\to→特征阈值设为0。区域通过海明距离在GPU上计算,这一过程与CPU上的特征检测同时进行,这是两个比较耗时的步骤,进行运动网格数据统计的算法如下所示:

4. 实验

数据集描述

精确率和召回率

性能和速度

性能表现随阈值选取变化

不同场景下的性能表现

视频中的表现

欢迎关注 深度学习与数学  [每天获取免费的大数据、AI等相关的学习资源、经典和最新的深度学习相关的论文研读,算法和其他互联网技能的学习,概率论、线性代数等高等数学知识的回顾]

CVPR2017-图像特征匹配-GMS:基于网格的运动统计的快速且极度鲁棒的图像特征匹配算法相关推荐

  1. Python+OpenCV:图像二进制鲁棒独立基本特征(BRIEF, Binary Robust Independent Elementary Features)

    Python+OpenCV:图像二进制鲁棒独立基本特征(BRIEF, Binary Robust Independent Elementary Features) 理论 We know SIFT us ...

  2. OpenCV中的二进制鲁棒独立基本特征——BRIEF

    OpenCV中的二进制鲁棒独立基本特征--BRIEF 1. 效果图 2. 源码 参考 这篇博客将介绍OpenCV中的二进制鲁棒独立基本特征.BRIEF是一种更快的特征描述符计算和匹配方法.它还提供了较 ...

  3. 特征匹配--GMS: Grid-based Motion Statistics for Fast, Ultra-robust Feature Correspondence

    GMS: Grid-based Motion Statistics for Fast, Ultra-robust Feature Correspondence CVPR2017 c++ code: h ...

  4. 基于深度学习的大规模vSLAM场景中的鲁棒视觉位置识别

    Towards a Robust Visual Place Recognition in Large-Scale vSLAM Scenarios Based on a Deep Distance Le ...

  5. Ultimate SLAM:结合事件、图像和惯性测量单元,在HDR和高速场景下实现鲁棒的视觉SLAM...

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 1 摘要 事件摄像机是受生物启发的视觉传感器,输出像素级亮度变化,而不是标准亮度帧.这些相机不会受到运 ...

  6. 计算机视觉与深度学习 | ORB特征匹配:基于OpenCV+Python(暴力匹配、FLANN)

    ===================================================== github:https://github.com/MichaelBeechan CSDN: ...

  7. OpenCV系列之BRIEF(二进制的鲁棒独立基本特征) | 四十二

    目标 在本章中, 我们将看到BRIEF算法的基础知识 理论 我们知道SIFT使用128维矢量作为描述符.由于它使用浮点数,因此基本上需要512个字节.同样,SURF最少也需要256个字节(用于64像素 ...

  8. OpenCV-Python BRIEF(二进制的鲁棒独立基本特征) | 四十二

    目标 在本章中,我们将看到BRIEF算法的基础知识 理论 我们知道SIFT使用128维矢量作为描述符.由于它使用浮点数,因此基本上需要512个字节.同样,SURF最少也需要256个字节(用于64像素) ...

  9. [论文笔记|特征点]GMS: Grid-based Motion Statistics for Fast, Ultra-robust Feature Correspondence

    摘要 提出了一种基于网格的运动统计方法(GMS)以剔除特征误匹配,该方法将平滑性约束融入到分离的统计框架中,并使用网格进行快速计算.GMS对于各种具有挑战性的图像变化是鲁棒的,包括视点.比例和旋转.它 ...

  10. opencv基础--图像模板匹配

    参考:https://blog.csdn.net/ivanhawking/article/details/83182692(该链接附载链接有处理多目标,旋转,缩放等匹配的方法) 1.概述 图像匹配是指 ...

最新文章

  1. 你是不是在混日子,看着一点就知道了
  2. 常见Web技术之间的关系,你知道多少?
  3. 2018年《DevOps 现状报告》新鲜出炉:行业脉动与团队发展指导一览
  4. mac mysql root不能登陆_Mac下新安装的MySQL无法登陆root用户解决方法
  5. JavaScript创建cookie
  6. 在IDEA上配置SonarLint以及代码质量分析报告模板
  7. python识别手写文字_深度学习---手写字体识别程序分析(python)
  8. PHP ThinkPHP 命名空间引入(use )
  9. matlab 设计数字滤波器,基于Matlab的FIR数字滤波器设计
  10. Cisco WLC 基础配置
  11. python实验楼工资计算器_挑战:完善工资计算器
  12. Altium Designer 2020 PCB 插入图片logo的方法
  13. 深入理解MySQL(2):详谈索引结构
  14. 用 Python MDL 开发时尚的 Material design 的网站
  15. DNS,二级域名泛解析
  16. 【02】2022.11最新超详细Vuforia图片识别教程
  17. .Net C# 发送带背景图html邮件(解决Outlook不显示背景图问题)
  18. 对“新手”特别重要!数据科学必备的数学基础清单
  19. ORACLE脚本中特殊字符转义
  20. 科技云报道:在线教育下半场,电子合同如何为教育赋能?

热门文章

  1. Elasticsearch 7.x Nested 嵌套类型查询 | ES 干货
  2. C#反射技术的简单操作(读取和设置类的属性)
  3. 09-部署配置kubedns插件
  4. C++ 单链表基本操作
  5. [FZYZOJ 1002] 雨天
  6. IDEA右键新建时没有Java Class选项
  7. ThingsBoard 提示Too many updates!
  8. 经典排序算法(二十一)--Cycle Sort
  9. epoll LT/ET 深度剖析
  10. 40. 数组中只出现一次的数字(C++版本)