简单介绍

BRIEF是2010年的一篇名为《BRIEF:Binary Robust Independent Elementary Features》的文章中提出,BRIEF是对已检測到的特征点进行描写叙述,它是一种二进制编码的描写叙述子,摈弃了利用区域灰度直方图描写叙述特征点的传统方法,大大的加快了特征描写叙述符建立的速度,同一时候也极大的减少了特征匹配的时间,是一种非常高速,非常有潜力的算法。

BRIEF详细算法

因为BRIEF不过特征描写叙述子。所以事先要得到特征点的位置,能够利用FAST特征点检測算法Harris角点检測算法或SIFT、SURF等算法检測特征点的位置。

接下来在特征点邻域利用BRIEF算法建立特征描写叙述符。

算法过程例如以下:

1、为降低噪声干扰,先对图像进行高斯滤波(方差为2。高斯窗体为9x9)。

2、以特征点为中心,取SxS的邻域窗体。在窗体内随机选取一对(两个)点,比較二者像素的大小,进行例如以下二进制赋值。

当中,p(x),p(y)各自是随机点x=(u1,v1),y=(u2,v2)的像素值。

3、在窗体中随机选取N对随机点,反复步骤2的二进制赋值,形成一个二进制编码,这个编码就是对特征点的描写叙述,即特征描写叙述子。(一般N=256)

以上便是BRIEF特征描写叙述算法的步骤。

关于一对随机点的选择方法。原作者測试了下面5种方法,当中方法(2)比較好。

这5种方法生成的256对随机点例如以下(一条线段的两个端点是一对):

利用BRIEF特征进行配准

经过上面的特征提取算法,对于一幅图中的每个特征点,都得到了一个256bit的二进制编码。接下来对有相似或重叠部分的两幅图像进行配准。

特征配对是利用的汉明距离进行判决:

1、两个特征编码相应bit位上同样元素的个数小于128的,一定不是配对的。

2、一幅图上特征点与还有一幅图上特征编码相应bit位上同样元素的个数最多的特征点配成一对。

实验

opencv代码

  1. #include <opencv2/core/core.hpp>
  2. #include <opencv2/highgui/highgui.hpp>
  3. #include <opencv2/imgproc/imgproc.hpp>
  4. #include <opencv2/features2d/features2d.hpp>
  5.  
  6. using namespace cv;
  7.  
  8. int main(int argc, char** argv)
  9. {
  10. Mat img_1 = imread("img1.png");
  11. Mat img_2 = imread("img2.png");
  12.  
  13. // -- Step 1: Detect the keypoints using STAR Detector
  14. std::vector<KeyPoint> keypoints_1,keypoints_2;
  15. StarDetector detector;
  16. detector.detect(img_1, keypoints_1);
  17. detector.detect(img_2, keypoints_2);
  18.  
  19. // -- Stpe 2: Calculate descriptors (feature vectors)
  20. BriefDescriptorExtractor brief;
  21. Mat descriptors_1, descriptors_2;
  22. brief.compute(img_1, keypoints_1, descriptors_1);
  23. brief.compute(img_2, keypoints_2, descriptors_2);
  24.  
  25. //-- Step 3: Matching descriptor vectors with a brute force matcher
  26. BFMatcher matcher(NORM_HAMMING);
  27. std::vector<DMatch> mathces;
  28. matcher.match(descriptors_1, descriptors_2, mathces);
  29. // -- dwaw matches
  30. Mat img_mathes;
  31. drawMatches(img_1, keypoints_1, img_2, keypoints_2, mathces, img_mathes);
  32. // -- show
  33. imshow("Mathces", img_mathes);
  34.  
  35. waitKey(0);
  36. return 0;
  37. }

实验结果

代码分析

在头文件features2d.hpp中定义了BRIEF算法的函数及參数:

  1. class CV_EXPORTS BriefDescriptorExtractor : public DescriptorExtractor
  2. {
  3. public:
  4. static const int PATCH_SIZE = 48; //S为48即窗体为48x48
  5. static const int KERNEL_SIZE = 9; //高斯滤波器窗体为9x9
  6.  
  7. // bytes is a length of descriptor in bytes. It can be equal 16, 32 or 64 bytes.
  8. BriefDescriptorExtractor( int bytes = 32 );//保存特征的空间为32字节,即32x8=256bit
  9. ...
  10. ...
  11. ...
  12. }

对于參数的解释,写在參数定义后面。

在执行调试时,在观察窗体能够看到,在img1中检測到14个特征点,img2中检測到76个:

以img1为例,14个特征点,每一个特征点用一个32字节(256bit)的二进制编码描写叙述,则有:

进一步查看上图中第二个红框的信息,这表明特征描写叙述子存放的位置,起始地址是:0x01c08030。结束地址为:0x01c081f0。

能够看到,这就是终于提取到的特征点描写叙述编码了。一行32个字节。共14行,刚好相应img1的14个特征点。同理可知img2中得到了76个特征编码。假如以img1中的特征为准。在img2中寻找与其匹配的特征点,结果例如以下:

能够看到,img1中的14个特征点依次与img2中的第74、47、... 、29特征点配成一对,终于匹配效果见上面的实验结果图。

BRIEF算法优劣

长处

1、计算速度快

缺点

1、对噪声敏感(由于二进制编码是通过比較详细像素值来判定的)

2、不具备旋转不变性

3、不具备尺度不变性

參考资料

1、BRIEF:Binary Robust Independent Elementary Features[J].2010 ECCV.

2、基于ORB特征的检測检測与跟踪的研究[硕士论文],谢成明,2013.

3、基于ORB特征和粒子滤波的目标跟踪算法研究[硕士论文],章杰,2014.

4、基于ORB和改进RANSAC算法的图像拼接技术[J],2015.

【特征检測】BRIEF特征点描写叙述算法的更多相关文章

  1. Chromium网页输入事件捕捉和手势检測过程分析

    连续的输入事件可能会产生一定的手势操作.比如滑动手势和捏合手势. 在Chromium中,网页的输入事件是在Browser进程中捕捉的.Browser进程捕获输入事件之后,会进行手势操作检測.检測出来的 ...

  2. 目标检測的图像特征提取之(一)HOG特征

    1.HOG特征: 方向梯度直方图(Histogram of Oriented Gradient, HOG)特征是一种在计算机视觉和图像处理中用来进行物体检測的特征描写叙述子.它通过计算和统计图像局部区 ...

  3. 【OpenCV新手教程之十八】OpenCV仿射变换 &amp; SURF特征点描写叙述合辑

    本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接:http://blog.csdn.net/poem_qianmo/article/details/33320997 作者:毛星云(浅墨)  ...

  4. 【OpenCV新手教程之十七】OpenCV重映射 &amp; SURF特征点检測合辑

    本系列文章由@浅墨_毛星云 出品.转载请注明出处. 文章链接:http://blog.csdn.net/poem_qianmo/article/details/30974513 作者:毛星云(浅墨)  ...

  5. OpenCV特征点检測------Surf(特征点篇)

    Surf(Speed Up Robust Feature) Surf算法的原理                                                              ...

  6. OpenCV2马拉松第15圈——边缘检測(Laplace算子,LOG算子)

    收入囊中 拉普拉斯算子 LOG算子(高斯拉普拉斯算子) OpenCV Laplacian函数 构建自己的拉普拉斯算子 利用拉普拉斯算子进行图像的锐化 葵花宝典 在OpenCV2马拉松第14圈--边缘检 ...

  7. 操作系统栈溢出检測之ucosII篇

    操作系统栈溢出检測之uc/osII篇 Author               :       David Lin (林鹏) E-mail               :       linpeng1 ...

  8. 行人检測之HOG特征(Histograms of Oriented Gradients)

    之前的文章行人计数.计次提到HOG特征这个概念,这两天看了一下原版的论文,了解了一下HOG特征的原理,并依据自己的理解将这种方法的流程写了下来,假设有不正确的地方欢迎指正. HOG(Histogram ...

  9. 【从零学习openCV】IOS7下的人脸检測

    前言: 人脸检測与识别一直是计算机视觉领域一大热门研究方向,并且也从安全监控等工业级的应用扩展到了手机移动端的app,总之随着人脸识别技术获得突破,其应用前景和市场价值都是不可估量的,眼下在学习ope ...

随机推荐

  1. 去掉WordPress顶部工具条

    WordPress为了方便管理员,或者登陆用户快速的从前台进入后台来管理网站,在WordPress网站顶部强制加入了一个工具条(admin bar),而且默认是对所有登陆用户都显示的,有时候看着挺烦心 ...

  2. wlan

    一.概述 CSMA/CD    --->以太网介质 CSMA/CA------->无线介质 IEEE----->802.11   a  b  g  e  f   h  i  j 分类 ...

  3. Leetcode 322.零钱兑换

    零钱兑换 给定不同面额的硬币 coins 和一个总金额 amount.编写一个函数来计算可以凑成总金额所需的最少的硬币个数.如果没有任何一种硬币组合能组成总金额,返回 -1. 示例 1: 输入: co ...

  4. zoj 2176 Speed Limit

    Speed Limit Time Limit: 2 Seconds      Memory Limit: 65536 KB Bill and Ted are taking a road trip. B ...

  5. Tomcat基础配置(一)

    详情请看散尽浮华的tomcat相关配置技巧梳理 本次只用于自己的查看,谢谢作者的谅解. tomcat常用架构:1)nginx+tomcat:即前端放一台nginx,然后通过nginx反向代理到tomc ...

  6. mysql5.7.20搭建

    官网mysql下载源码安装 下载MySQL5.7.20源码包,wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.20.tar.g ...

  7. BZOJ 4004 [JLOI2015]装备购买 ——线性基

    [题目分析] 题目很简单,就是要维护一个实数域上的线性基. 仿照异或空间的线性基的方法,排序之后每次加入一个数即可. 卡精度,开long double 和 1e-6就轻松水过了. [代码] #incl ...

  8. 【二叉树】hdu 1622 Trees on the level

    [题意] 给定一棵树每个结点的权重和路径(路径用LR串表示),输出这棵树的层次遍历 [思路] 注意输入输出,sscanf用来格式化地截取需要的数据,strchr来在字符串中查找字符的位置 [Accep ...

  9. Ubuntu 下使用 sshfs 挂载远程目录到本地

    参考链接:http://blog.csdn.net/netwalk/article/details/12952719 一.Ubuntu 上安装sshfs Ubuntu源中已经包含了sshfs,以及所需 ...

  10. [暑假集训--数位dp]hdu3652 B-number

    A wqb-number, or B-number for short, is a non-negative integer whose decimal form contains the sub- ...