0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

OpenCV新增描述子BEBLID

新机器视觉 来源:当SLAM遇见小王同学 作者:当SLAM遇见小王同学 2021-09-22 14:16 次阅读

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

  • 从4.5版本开始,OpenCV将正式使用Apache2协议,从而避免专利算法带来的潜在纠纷
  • SIFT专利到期,代码被移到主库
  • 对RANSAC算法进行了改进
  • 新增了实时单目标跟踪算法SiamRPN++

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

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

#CommentoruncommenttouseORBorBEBLID
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

CODE:https://github.com/iago-suarez/BEBLID.git

PDF:http://www.dia.fi.upm.es/~pcr/publications/PRL_2020_web_BEBLID.pdf

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

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

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

介绍

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

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

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

BELID

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

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

训练过程将损失降到最低

fd1680f8-0b47-11ec-8fb8-12bb97331649.png

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

fd284446-0b47-11ec-8fb8-12bb97331649.png

1. 阈值平均盒弱学习者

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

fd32fcc4-0b47-11ec-8fb8-12bb97331649.png

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

fd414afe-0b47-11ec-8fb8-12bb97331649.png

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

2. 优化弱学习者权值

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

fd6b9642-0b47-11ec-8fb8-12bb97331649.png

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

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

fd75fccc-0b47-11ec-8fb8-12bb97331649.png

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

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

fd7ee29c-0b47-11ec-8fb8-12bb97331649.png

实验

不同的场景:巴黎圣母院,约塞米蒂国家公园和纽约的自由女神像。在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维减少到图中给出的一个。

fd875b66-0b47-11ec-8fb8-12bb97331649.png

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

fd94d91c-0b47-11ec-8fb8-12bb97331649.png

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

2. Hpatches数据集实验

fdb796d2-0b47-11ec-8fb8-12bb97331649.png

图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中。

fdcd0666-0b47-11ec-8fb8-12bb97331649.png

就速度而言,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。

编辑:jq
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 代码
    +关注

    关注

    30

    文章

    4536

    浏览量

    66496
  • SLAM
    +关注

    关注

    22

    文章

    376

    浏览量

    31569
  • OpenCV
    +关注

    关注

    29

    文章

    609

    浏览量

    40710
  • orb
    orb
    +关注

    关注

    0

    文章

    21

    浏览量

    9850

原文标题:OpenCV新增描述子BEBLID:提高图像匹配精度,减少执行时间

文章出处:【微信号:vision263com,微信公众号:新机器视觉】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    最新OpenCV专题出炉啦~最全OpenCV教程及各种图像处理、目标跟踪、识别案例

    OpenCV基础知识及应用领域设计,包含OpenCV教程、OpenCV识别、OpenCV跟踪及OpenCV图像处理,充分翔实的向大家
    发表于 07-06 14:41

    【WRTnode2R试用体验】+WRTnode添加OpenCV支持

    求 一个参数,即要编译的软件包名,在本例中是"opencv"。所有其他信息都通过宏来获得,这提供了一种内在的简洁性。比如BuildPackage需要软件包的一大串描述信息,我们并不
    发表于 11-04 00:03

    请问OpenCV处理视频数据失败这个应该怎么解决呢?

    问题描述及复现步骤:在Ubuntu18.04上编译代码时遇到的问题:对example中示例代码rknn_yolov5_demo进行修改以处理视频文件。但\\rknpu2-master
    发表于 01-10 14:24

    怎样去解决移植opencv3.4.13遇到的imshow问题呢?

    问题描述及复现步骤:移植 OPENCV  系统 ubuntu20 官方固件  opencv:3.4.13  编译中遇到2个问题:  1。编译器的问题,SDK编译器为gcc-10.3 ,目标系统为
    发表于 02-07 15:53

    SE5盒上安装了libsophon、和sophon-mw的包之后运行opencv resize报错如何解决?

    在SE5盒上安装了libsophon、和sophon-mw的包之后,运行简单的opencv resize,出现了如下错误 [/workspace/middleware-soc/bm_opencv
    发表于 09-18 08:10

    最全OpenCV教程及图像处理、目标跟踪、识别案例

    本专题主要帮助读者快速入门 OpenCV,而无需到处搜寻参考资料,为你免除大量自行搜索的时间,本专题主要给大家介绍OpenCV基础知识及应用领域设计,包含OpenCV教程、OpenCV
    发表于 07-06 14:11
    最全<b class='flag-5'>OpenCV</b>教程及图像处理、目标跟踪、识别案例

    OpenCV进行基本绘图_《OpenCV3编程入门》书本配套源

    OpenCV3编程入门》书本配套源代码:用OpenCV进行基本绘图
    发表于 05-11 16:46 34次下载

    opencv备忘单

    opencv备忘单,opencv_cheatsheet,opencv_tutorials,opencv_user,opencv2refman
    发表于 08-25 15:52 0次下载

    opencv基础的学习手册

    OpenCV (Open Source Computer Vision Library: http://opencv.org) is an open-source BSD-licensed
    发表于 08-25 15:52 0次下载

    The OpenCV User Guide

    The OpenCV User Guide Release 2.4.8.0,英文版OpenCV的用户指南。
    发表于 08-26 14:12 0次下载

    OpenCV3.1的使用教程之图像特征描述的详细资料说明

    本文档的主要内容详细介绍的是OpenCV3.1的使用教程之图像特征描述的详细资料说明
    发表于 01-06 08:00 13次下载

    基于OpenCV3.1的图像特征描述功能实现

    本文档的主要内容详细介绍的是OpenCV3.1的使用教程之图像特征描述的详细资料说明。
    发表于 03-29 14:26 10次下载

    OpenCV4.x可实现加载模型与执行推断

    OpenCV4.x发布以后,有很多新的特性与黑科技支持,无论是支持OpenVINO加速、图计算模块、二维码识别,还是DNN中新增加的人脸检测与识别模型,作为OpenCV开发者的我深深被吸引,几乎只要有时间就会一个一个的去发现与之
    的头像 发表于 07-30 11:58 721次阅读

    MCU如何部署OpenCV

    本文是一个小系列的第一篇,MCU部署OpenCV的“先跑篇”,稍后会陆续有“配置篇”、“实战篇”、“进阶篇”、“优化篇”,带您牵手OpenCV,进入OpenCV的广阔世界。
    的头像 发表于 11-03 09:12 1680次阅读

    在JetsonNano上编译OpenCV源码与OpenCV C++ YOLOv5程序演示

    Jetson Nano自带的OpenCV版本比较低,Jetpack4.6对应的OpenCV版本为4.1的,有图为证。
    的头像 发表于 11-10 11:28 2313次阅读