点击上方“3D视觉工坊”,选择“星标”

干货第一时间送达

编辑丨当SLAM遇见小王同学

声明: 本文只是个人学习记录,侵权可删。论文版权与著作权等全归原作者所有,小王自觉遵守《中华人民共和国著作权法》与《伯尔尼公约》等国内外相关法律,本文禁止转载!!

在刚刚发布的OpenCV4.5中更新了很多新特性:

  • 从4.5版本开始,OpenCV将正式使用Apache2协议,从而避免专利算法带来的潜在纠纷

  • SIFT专利到期,代码被移到主库

  • 对RANSAC算法进行了改进

  • 新增了实时单目标跟踪算法SiamRPN++

还有其他重要更新,这里就不再叙述。值得一提的是,BELID描述子也被添加进去了。

BEBLID全称是Boosted Efficient Binary Local Image Descriptor,多项实验证明能够提高图像匹配精度,同时减少执行时间。

# Comment or uncomment to use ORB or BEBLID
descriptor = cv.xfeatures2d.BEBLID_create(0.75)
# descriptor = cv.ORB_create()
kpts1, desc1 = descriptor.compute(img1, kpts1)
kpts2, desc2 = descriptor.compute(img2, kpts2)

更多细节可以参考:

https://towardsdatascience.com/improving-your-image-matching-results-by-14-with-one-line-of-code-b72ae9ca2b73
https://github.com/iago-suarez/beblid-opencv-demo/blob/main/demo.ipynb

这里说一下结论吧,经过这个作者测试,将ORB描述符替换为BEBLID,就可以将这两个图像的匹配结果提高14%.

下面详细介绍一下这个BEBLID描述子.

作者提出了一种有效的图像描述符BELID。其有效性的关键是对一组图像特征进行有区别的选择,且计算量要求非常低。实验是在电脑和智能手机上进行,BELID的精确度与SIFT相似,执行时间与最快的算法ORB相当。

介绍

局部图像是用于匹配存在强烈外观变化的图像,如光照变化或几何变换。它们是许多计算机视觉任务的基本组成部分,如3D重建、SLAM、图像检索、位姿估计等。它们是最流行的图像表示方法,因为局部特征是独特的,视点不变的。

为了产生一个局部图像表示,我们必须检测一组显著的图像结构,并为每个结构提供描述。对于各种如角、线和区域,有大量非常有效的检测器,它们可以用实数或二进制描述符来描述。目前SIFT描述子仍然被认为是“黄金标准”技术。

本文给出了一种有效的描述子。特征使用积分图像来有效地计算一对图像正方形区域的平均灰度值之间的差。作者使用一个增强算法来区分地选择一组特征,并将它们组合起来产生强描述。实验结果表明,该方法提高了计算速度,执行时间接近ORB,精度与SIFT相似,它能够为手头的任务选择最佳的特征。

BELID

在本节中,作者提出了一种描述图像局部区域的有效算法,其速度和SIFT一样快。其速度的关键是使用少量、快速和选择性的特征。描述子使用一组使用BoostedSCC算法选择的K个特征,该算法是对AdaBoost的改进。

设 是由一对对图像patches组成的训练集,标记 {−1,1}。其中 = 1表示两个patch对应相同的显著性图像结构, =−1表示不同的显著性图像结构.

训练过程将损失降到最低

其中 ,它依赖于特征提取函数f: X→R和一个阈值T.给定f和T,通过含T的f(x)来定义weak learner,

1. 阈值平均盒弱学习者

效率的关键是选择一个f(x),它既具有判别性,又能快速计算。我们定义特征提取函数f(x)

I(t)是像素的灰度值t和R (p, s)是大小的正方形盒子集中在带有尺寸s的像素p。因此,f计算像素的平均灰度值之间的差异( , s)和R( ,s)。图2中的红色和蓝色方块代表,分别( , s)和R ( , s)。加快f的计算,作者使用积分图像的输入图像。一旦S可用,方框中的灰度和可以通过4次内存访问和4次算术运算来计算。

检测器通常计算局部结构的方位和尺度。为了BEBLID描述符不受欧几里得变换的影响,作者用底层的局部结构来定位和缩放我们的测量值。

2. 优化弱学习者权值

BoostedSCC算法选择K个弱学习者及其相应的权值。等式1中BoostedSCC优化的损耗函数可以看作是一种度量学习方法,其中度量矩阵a是对角的

其中h(w)是K个弱学习者对图像patch的w响应向量。在这种情况下,不考虑不同弱学习者响应之间的依赖关系。此时,给定图像patch w的BELID-U(未优化)描述符计算为 ,其中使 =

进一步,通过对特征 之间的相关性进行建模,估计整个矩阵A可以改善相似函数。FP-Boost估计最小值

采用随机梯度下降法估计对称的a和 是一项困难的工作。因此,该算法从K个弱学习器和由BoostedSCC找到的α开始。第二个学习步骤非常快,因为所有弱学习者的反应都可以预先计算出来

在未优化的描述符的情况下,必须分解相似函数s(x,y)来计算x和y的独立描述子。假设A是一个对称矩阵,可以使用它的特征分解来选择特征值最大的D个特征向量

实验

不同的场景:巴黎圣母院,约塞米蒂国家公园和纽约的自由女神像。在SIFT检测到的局部结构周围裁剪PATCH。

作者用三种方法来比较性能:

  • FPR-95.: 这是一个PATCH验证问题中95%的召回误报率。当开发BEBILD描述符时,作者希望能够匹配大部分的局部结构,比如说95%的召回率,但是有尽可能少的误报。因此,在PATCH验证问题中,描述符的FPR-95越低越好。

  • AUC: PATCH验证问题中ROC曲线下的面积。它提供了一个良好的整体测量,因为它考虑了曲线上的所有操作点,而不是像FPR-95案例中只有一个。

  • mAP.: 在PATCH验证、图像匹配和PATCH检索这三个任务中,每个任务的平均精度,在HPatches基准中定义。

作者已经在Python中实现了BoostedSCC、FP-Boost和阈值平均盒弱学习者的学习和测试部分。为了优化A矩阵,使用了固定学习率为10 - 8和批量2000个样本的随机梯度下降算法。同时也在c++中实现了使用OpenCV处理输入图像。作者使用这个实现来测量BELID在不同平台上的执行时间。

1. PATCH验证实验

在这里,首先探索维度数的影响。在图3中,显示了AUC和FPR-95值作为维数(“N维”)的函数。在BELID的例子中,使用K = 512,并计算B从512维减少到图中给出的一个。

首先运行BoostedSSC来选择512个弱学习者。通过从这个初始集合中移除最后的弱学习者,作者改变了图3中BELID- u曲线的维数。对于BELID,丢弃了B的最后一列,它们对应于与最小特征值相关的缩放特征向量

从图3可以看出,boosting过程选择的特征最多只在一点上对最终判别有贡献。在128个弱学习者之后,每个新特征提供的改进非常小。在256之后,没有得到任何改进,这意味着最后一个是多余的。优化后的BELID性能优于BELIDU,BELID得分最低FPR-95有128个尺寸。

2. Hpatches数据集实验

图5显示了用HPathces工具获得的各种BELID配置和其他竞争方法的结果.作者得到了与之前实验相同的情况,所有的BELID配置都比SIFT好,69.57 vs 63.35,比ORB好得多。

然而,在另外两个任务中,BEBILD描述子落后于SIFT。这是一个预期的结果,因为作者没有为这些任务优化描述子。总之,BELID在所有任务中提供的结果接近SIFT,并优于ORB。

3. 不同平台的执行时间

在最后的实验中,作者测试了c++实现的BELID处理图像的时间,呈现了由来自8个不同场景的48张800×640图像组成的Mikolajczyk数据集的执行时间。

作者将执行时间与OpenCV库中的其他相关描述子进行比较。为此运行ORB ,、SIFT 、 LBGM和BinBoost。结果在表1中。

就速度而言,BELID-U与ORB相当。事实上,BELID-U在桌面环境下和ORB一样快(0.41 ms vs 0.44 ms),在有限的CPU环境下更快(2.54 ms vs 6.49 ms)。这是意料之中的,因为两者都使用一组灰度值差异作为特征。LBGM使用与BELID相同的特征选择算法,但具有较慢的特征。因此,这个描述符需要与桌面设置中的SIFT相同的处理时间(19.77 ms vs 22.22 ms),但FPR-95稍好。

在桌面CPU上,BELID-128只需要3.08毫秒,大约是BELID-U和ORB的7倍。在智能手机CPU中,BELID128的时间也比BELID-U慢7倍左右。

结论

本文提出了一种有效的图像描述符BELID。在实验中,作者证明了它有非常低的计算要求,在准确度方面,BELID优于ORB,接近SIFT。

本文仅做学术分享,如有侵权,请联系删文。

下载1

在「3D视觉工坊」公众号后台回复:3D视觉即可下载 3D视觉相关资料干货,涉及相机标定、三维重建、立体视觉、SLAM、深度学习、点云后处理、多视图几何等方向。

下载2

在「3D视觉工坊」公众号后台回复:3D视觉github资源汇总即可下载包括结构光、标定源码、缺陷检测源码、深度估计与深度补全源码、点云处理相关源码、立体匹配源码、单目、双目3D检测、基于点云的3D检测、6D姿态估计源码汇总等。

下载3

在「3D视觉工坊」公众号后台回复:相机标定即可下载独家相机标定学习课件与视频网址;后台回复:立体匹配即可下载独家立体匹配学习课件与视频网址。

重磅!3DCVer-学术论文写作投稿 交流群已成立

扫码添加小助手微信,可申请加入3D视觉工坊-学术论文写作与投稿 微信交流群,旨在交流顶会、顶刊、SCI、EI等写作与投稿事宜。

同时也可申请加入我们的细分方向交流群,目前主要有3D视觉CV&深度学习SLAM三维重建点云后处理自动驾驶、多传感器融合、CV入门、三维测量、VR/AR、3D人脸识别、医疗影像、缺陷检测、行人重识别、目标跟踪、视觉产品落地、视觉竞赛、车牌识别、硬件选型、学术交流、求职交流、ORB-SLAM系列源码交流、深度估计等微信群。

一定要备注:研究方向+学校/公司+昵称,例如:”3D视觉 + 上海交大 + 静静“。请按照格式备注,可快速被通过且邀请进群。原创投稿也请联系。

▲长按加微信群或投稿

▲长按关注公众号

3D视觉从入门到精通知识星球:针对3D视觉领域的知识点汇总、入门进阶学习路线、最新paper分享、疑问解答四个方面进行深耕,更有各类大厂的算法工程人员进行技术指导。与此同时,星球将联合知名企业发布3D视觉相关算法开发岗位以及项目对接信息,打造成集技术与就业为一体的铁杆粉丝聚集区,近3000星球成员为创造更好的AI世界共同进步,知识星球入口:

学习3D视觉核心技术,扫描查看介绍,3天内无条件退款

圈里有高质量教程资料、可答疑解惑、助你高效解决问题

觉得有用,麻烦给个赞和在看~  

BELID:增强的高效的局部图像描述符相关推荐

  1. PCA-SIFT:一个更鲜明地局部图像描述符

    本节主要对论文<PCA-SIFT: A More Distinctive Representation for Local Image Descriptors>中,前5部分进行Transt ...

  2. Java代码韦伯分布_第十五节、韦伯局部描述符(WLD,附源码)

    纹理作为一种重要的视觉线索,是图像中普遍存在而又难以描述的特征,图像的纹理特征一般是指图像上地物重复排列造成的灰度值有规则的分布.纹理特征的关键在于纹理特征的提取方法.目前,用于纹理特征提取的方法有很 ...

  3. BEBLID:增强的高效局部图像特征描述符

    (本文转载自:当SLAM遇见小王同学) 在前不久发布的OpenCV4.5中更新了很多新特性: 从4.5版本开始,OpenCV将正式使用Apache2协议,从而避免专利算法带来的潜在纠纷 SIFT专利到 ...

  4. Python计算机视觉:第二章 图像局部描述符

    第二章 图像局部描述符 2.1 Harris角点检测 2.1.2 在图像间寻找对应点 2.2 sift描述子 2.2.1 兴趣点 2.2.2 描述子 2.2.3 检测感兴趣点 2.2.4 描述子匹配 ...

  5. 计算机视觉--局部图像描述子

    第二章 局部图像描述子 (一)SIFT特征原理描述 1.SIFT综述 尺度不变特征转换(Scale-invariant feature transform或SIFT)是一种电脑视觉的算法用来侦测与描述 ...

  6. Python计算机视觉编程第二章——局部图像描述子

    Python计算机视觉编程 局部图像描述子 (一)Harris 角点检测器 (二)SIFT(尺度不变特征变换) 2.1 兴趣点 2.2 描述子 2.3 检测兴趣点 2.4 匹配描述子 (三)匹配地理标 ...

  7. 图像特征提取——韦伯局部描述符(WLD)

    一.原理及概述 韦伯局部描述符(WLD)是一种鲁棒性好.简单高效的局部特征描述符.WLD由两个部分组成:差分激励和梯度方向. 其具体算法是对于给定的一幅图像,通过对每个像素进行这两个分量的计算来提取其 ...

  8. 老卫带你学---WLD韦伯局部描述符

    WLD韦伯局部描述符也是一种可以衡量图像纹理信息的特征. 在大多的据不描述符中,Gabor小波和LBP是常见的两种.本文将主要介绍另外一种纹理的描述算子WLD(Weber's Local Descri ...

  9. 局部图像描述子【计算机视觉第二章】

    目录 什么是局部图像描述子 Harris角点检测算法 角点(corner points): 角点特征: Harris 角点检测算子: Harris 角点检测算法的基本思想: Harris 角点检测算法 ...

最新文章

  1. 标记三维点_细胞器相互作用过程的高速三维全景成像
  2. Chrome浏览器插件新建标签页插件Momentum
  3. ubuntu14安装python_ubuntu14.04 安装python3.7
  4. 湖北经济学院的计算机是否强,graphics-ch11-真实感图形绘制_湖北经济学院:计算机图形学_ppt_大学课件预览_高等教育资讯网...
  5. java9 反应编程_Java9第四篇-Reactive Stream API响应式编程
  6. Java并发编程之ReentrantLock重入锁
  7. java web文件上传详解_java web图片上传和文件上传实例详解
  8. [ABP开源项目]--vue+vuex+vue-router+EF的权限管理系统
  9. JS获取浏览器高度、屏幕高度、宽屏
  10. JS 常见的 6 种继承方式
  11. c语言编译bss和data,深入理解BSS段与data段的区别
  12. 今日学习在线编程题:小码哥的烦恼
  13. 正则表达式训练-QQ号校验
  14. ubuntu 启动 meld、diffuse失败
  15. 怎么把MP4视频进行压缩
  16. 如何修改Adobe Acrobat身份信息中的登录名
  17. 软工系列之--数据流图(DFD图)
  18. 实施工程师面常见问题
  19. Day24(ObjectString,MyThread,Properties,ThreadDaemon,ThreadJoin,ThreadPriority,ThreadSleepThreadStop)
  20. 深度学习新王者AutoML和NAS

热门文章

  1. gpu gems——第23章 头发动画和渲染
  2. 财经365视界|春运抢票,谁还相信加速包?
  3. SSM框架整合之中出现的一些问题及解决方法
  4. 智能车摄像头三轮PID参数调节
  5. JavaScript,nodejs实现保留n位小数点
  6. Python爬虫与一汽项目【一】爬取中海油,邮政,国家电网问题总结
  7. Locust(性能测试)
  8. 人工智能,机器学习,深度学习的区别
  9. 在王者荣耀角度下分析面向对象程序设计B中23种设计模式之桥接模式
  10. ns3学习(二)——tcp-NewReno