原文:

http://www.cnblogs.com/ronny/p/4081362.html

Binary Robust Independent Elementary Features

www.cnblogs.com/ronny

1. BRIEF的基本原理

我们已经知道SIFT特征采用了128维的特征描述子,由于描述子用的浮点数,所以它将会占用512 bytes的空间。类似地,对于SURF特征,常见的是64维的描述子,它也将占用256bytes的空间。如果一幅图像中有1000个特征点(不要惊讶,这是很正常的事),那么SIFT或SURF特征描述子将占用大量的内存空间,对于那些资源紧张的应用,尤其是嵌入式的应用,这样的特征描述子显然是不可行的。而且,越占有越大的空间,意味着越长的匹配时间。

但是实际上SFIT或SURF的特征描述子中,并不是所有维都在匹配中有着实质性的作用。我们可以用PCA、LDA等特征降维的方法来压缩特征描述子的维度。还有一些算法,例如LSH,将SIFT的特征描述子转换为一个二值的码串,然后这个码串用汉明距离进行特征点之间的匹配。这种方法将大大提高特征之间的匹配,因为汉明距离的计算可以用异或操作然后计算二进制位数来实现,在现代计算机结构中很方便。下面来们提取一种二值码串的特征描述子。

BRIEF[1]应运而生,它提供了一种计算二值串的捷径,而并不需要去计算一个类似于SIFT的特征描述子。它需要先平滑图像,然后在特征点周围选择一个Patch,在这个Patch内通过一种选定的方法来挑选出来n d  nd个点对。然后对于每一个点对(p,q) (p,q),我们来比较这两个点的亮度值,如果I(p)>I(q) I(p)>I(q)则这个点对生成了二值串中一个的值为1,如果I(p)<I(q) I(p)<I(q),则对应在二值串中的值为-1,否则为0。所有n d  nd个点对,都进行比较之间,我们就生成了一个n d  nd长的二进制串。

对于n d  nd的选择,我们可以设置为128,256或512,这三种参数在OpenCV中都有提供,但是OpenCV中默认的参数是256,这种情况下,非匹配点的汉明距离呈现均值为128比特征的高斯分布。一旦维数选定了,我们就可以用汉明距离来匹配这些描述子了。

值得注意的是,对于BRIEF,它仅仅是一种特征描述符,它不提供提取特征点的方法。所以,如果你必须使一种特征点定位的方法,如FAST、SIFT、SURF等。这里,我们将使用CenSurE方法来提取关键点,对BRIEF来说,CenSurE的表现比SURF特征点稍好一些。

CenSurE特征检测子由三个步骤组成。首先利用积分图像计算双层高斯拉普拉斯滤波器响应,其次采用非极大值抑制检测局部极大值,最后滤除分布在边缘或线上的不稳定特征点。Agrawal等人提出的CenSurE特征检测子采用简单的双层滤波器来近似高斯拉普拉斯。

设CenSurE滤波器的内核尺寸为(2n+1)×(2n+1),外核尺寸为(4n+1)×(4n+1)。设In为内核权重系数,On为外核权重系数。为了使这种滤波器的DC响应为0,权重系数需满足下列等式:
On(4n+1)^2=In(2n+1)^2
(1)对尺度进行归一化:
In(2n+1)^2=In+1(2(n+1)+1)^2
(2)CenSurE采用线性尺度,即n=1,2,3,…,如图1所示。图1近似的双层LOG滤波器每个尺度的滤波器在图像的每个像素上计算。将尺度空间的每个点与本尺度的相邻位置以及相邻尺度的对应位置共26个邻域进行逐个比较,通过非极大值抑制得到的局部极值点。弱的响应被滤除,因为这些特征是不稳定的。
最后,用尺度适应的Harris方法计算主曲率的比率以去除位于边缘或线上的不稳定特征点。

总体来说,BRIEF是一个效率很高的提取特征描述子的方法,同时,它有着很好的识别率,但当图像发生很大的平面内的旋转。

2. 关于点对的选择

设我们在特征点的邻域块大小为S×S S×S内选择n d  nd个点对(p,q) (p,q),Calonder的实验中测试了5种采样方法:

1)在图像块内平均采样;

2)p p和q q都符合(0,125 S 2 ) (0,125S2)的高斯分布;

3)p p符合(0,125 S 2 ) (0,125S2)的高斯分布,而q q符合(0,1100 S 2 ) (0,1100S2)的高斯分布;

4)在空间量化极坐标下的离散位置随机采样

5)把p p固定为(0,0) (0,0),q q在周围平均采样

下面是上面5种采样方法的结果示意图。

2. OpenCV实现BRIEF

#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/features2d/features2d.hpp>using namespace cv;int main(int argc, char** argv)
{ Mat img_1 = imread("box.png"); Mat img_2 = imread("box_in_scene.png");// -- Step 1: Detect the keypoints using STAR Detector std::vector<KeyPoint> keypoints_1,keypoints_2; StarDetector detector; detector.detect(img_1, keypoints_1); detector.detect(img_2, keypoints_2);// -- Stpe 2: Calculate descriptors (feature vectors) BriefDescriptorExtractor brief; Mat descriptors_1, descriptors_2; brief.compute(img_1, keypoints_1, descriptors_1); brief.compute(img_2, keypoints_2, descriptors_2);//-- Step 3: Matching descriptor vectors with a brute force matcher BFMatcher matcher(NORM_HAMMING); std::vector<DMatch> mathces; matcher.match(descriptors_1, descriptors_2, mathces); // -- dwaw matches Mat img_mathes; drawMatches(img_1, keypoints_1, img_2, keypoints_2, mathces, img_mathes); // -- show imshow("Mathces", img_mathes);waitKey(0); return 0;
}

[1] Michael Calonder, Vincent Lepetit, Christoph Strecha, and Pascal Fua, “BRIEF: Binary Robust Independent Elementary Features”, 11th European Conference on Computer Vision (ECCV), Heraklion, Crete. LNCS Springer, September 2010.

图像局部特征(十)--BRIEF描述子相关推荐

  1. ehd边缘直方图描述子 matlab,第 2 章 局部图像描述子

    第 2 章 局部图像描述子 本章旨在寻找图像间的对应点和对应区域.本章将介绍用于图像匹配的两种局部描述子算法.本书的很多内容中都会用到这些局部特征,它们在很多应用中都有重要作用,比如创建全景图.增强现 ...

  2. 一种事件相机描述子——DART

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 一.背景知识 在物体分类.目标跟踪等问题下,我们经常需要提取物体的一些特征.传统图像中常使用描述子(例 ...

  3. 特征描述子提取公用接口

    OpenCV封装了一些特征描述子提取算法,使得用户能够解决该问题时候方便使用各种算法.这章用来计算的描述子提取被表达成一个高维空间的向量 vector.所有实现 vector 特征描述子子提取的部分继 ...

  4. opencv4.5.1的编译与使用(BEBLID 描述子)

    opencv4.5.1+contrib_4.5.1的编译与简单使用 0.概述 1.下载 1.1 opencv4.5.1下载 1.2 opencv_contrib-4.5.1下载 2.编译 3.简单例程 ...

  5. 图像局部特征(十一)--ORB描述子

     Oriented FAST and Rotated BRIEF www.cnblogs.com/ronny 这篇文章我们将介绍一种新的具有局部不变性的特征 -- ORB特征,从它的名字中可以看出 ...

  6. 图像局部特征(八)--斑点检测子SIFT/SURF区别总结

    原文: http://blog.csdn.net/cy513/article/details/4414352 http://blog.csdn.net/jwh_bupt/article/details ...

  7. 图像特征点及特征描述子总结

    参考博客 https://blog.csdn.net/qq_28193895/article/details/80845803 https://blog.csdn.net/u013989576/art ...

  8. image.merge图像有什么变化_图像特征工程:HOG特征描述子介绍

    介绍 在机器学习算法的世界里,特征工程是非常重要的.实际上,作为一名数据科学家,这是我最喜欢的方面之一!从现有特征中设计新特征并改进模型的性能,这就是我们进行最多实验的地方. 世界上一些顶级数据科学家 ...

  9. 图像局部特征(二十)--Textons

    转自:http://blog.csdn.net/jzwong/article/details/51815134 标题对应着一篇paper,链接在这里:http://idm.pku.edu.cn/sta ...

最新文章

  1. 合并道路_资质改革已经确定!盘点被合并的资质!有这资质的要注意了
  2. Bootstrap-table组合表头
  3. Android启动页黑屏及解决方案
  4. 教育谋定应用型高校 经济和信息化研究共建成都工业学院
  5. Boost:不受约束的bimap双图的测试程序
  6. JavaSE | 多线程
  7. 编译Bootstrap3
  8. 用python生成九九乘法表的指令_Python中生成九九乘法表的方法有哪几种?
  9. 剑指offer面试题[9]-裴波那契数列
  10. 小程序直播开发demo
  11. VS-c++ 项目新建文件夹
  12. python自动化怎么发微信_在python中使用itchat发送微信消息
  13. Nvidia Jetson AGX Xavier 安装 Swin-Transformer-Object-Detection
  14. 首都师范 博弈论 2 2 4划线法
  15. TRC病毒-宿主融合抑制剂研究丨4-氨基-1-叔丁基说明书
  16. 3D模型欣赏:MR4概念机器人 材质处理细致,金属质感细致
  17. 桐梓县春晖行动志愿者协会开展同心抗疫志愿服务保障工作
  18. Android数据存储安全实践
  19. ai修复图片 python_百度AI攻略:拉伸图像恢复
  20. C++求1-20的阶乘之和

热门文章

  1. Linux 中断学习之前言篇---中断之原理篇
  2. Android4.4 Input 输入上层分析
  3. Rtsp之rtp包解析
  4. 视频编解码(九):FFMPEG操作总结一
  5. Python报错:module ‘turtle’ has no attribute ‘pensize’
  6. linux 与win共享文件夹
  7. python爬虫数据存储文本_Python爬虫开发系列之五》数据存储为TXT、JSON格式
  8. vs python opencv配置_OPENCV入门教程二:opencv+VS2015开发环境配置
  9. python phpstudy_phpStudy后门分析及复现
  10. 6675温度波动大_现场温度仪表安装调试常见的故障分析与处理方法