FROM: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内通过一种选定的方法来挑选出来nd个点对。然后对于每一个点对(p,q),我们来比较这两个点的亮度值,如果I(p)>I(q)则这个点对生成了二值串中一个的值为1,如果I(p)<I(q),则对应在二值串中的值为-1,否则为0。所有nd个点对,都进行比较之间,我们就生成了一个nd长的二进制串。

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

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

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

2. 关于点对的选择

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

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

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

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

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

5)把p固定为(0,0),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. PCL:点云特征描述子3D_object_recognition_(descriptors)

    PCL官网:https://pointclouds.org/ 翻译自该网站:http://robotica.unileon.es/index.php/PCL/OpenNI_tutorial_4:_3D ...

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

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

  3. 自编码器深度分析+定制特征描述子构建初探

    1. 关于tailored 特征描述子 自从深度学习的繁荣,利用自编码器.孪生网络.对抗网络采用数据驱动的形式设计tailored 特征描述子 成为了计算机视觉领域发展的重要推动力, 这不仅大大削弱了 ...

  4. sift计算描述子代码详解_浅谈SIFT特征描述子

    SIFT是我接触最早的图像局部特征描述子之一,其实最初,始终觉得局部特征描述子是些非常玄虚的东西.对于SIFT,这种感觉更是尤为强烈,"尺度空间""拉普拉斯高斯算子(Lo ...

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

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

  6. SIFT算法特征描述子构建---关键点定位原理及代码

    0.引言 sift针对局部特征进行特征提取,在尺度空间寻找极值点,提取位置,尺度,旋转不变量,生成特征描述子. 总共分四个步骤: 尺度金字塔生成 关键点/极值点提取 生成梯度直方图 特征描述子构建 s ...

  7. 傅里叶描述子、HOG特征描述子原理及matlab代码

    一.傅里叶描述子 傅里叶描述子的作用是用来描述图像的轮廓信息,具有平移.旋转.尺度不变性特征. 对于一幅图像,通过傅里叶描述子获得其图像轮廓信息,其本质就是空间.频域变换问题.通过将图像中的像素点进行 ...

  8. 【特征匹配】BRIEF特征描述子原理及源码解析

    相关:Fast原理及源码解析 Harris原理及源码解析 SIFT原理及源码解析 SURF原理及源码解析 转载请注明出处: http://blog.csdn.net/luoshixian099/art ...

  9. 三维计算机视觉(五)--特征描述子

    PPF 机器人视觉中有一项重要人物就是从场景中提取物体的位置,姿态.图像处理算法借助Deep Learning 的东风已经在图像的物体标记领域耍的飞起了.而从三维场景中提取物体还有待研究.目前已有的思 ...

最新文章

  1. 利用?和 ??简化界面的默认配置/自定义配置
  2. android base64解密,android Base64 AES加密解密
  3. 了解css中伪元素 before和after的用法
  4. 【“互联网+”大赛华为云赛道】API命题攻略:厘清三步解题思路,用好开发工具
  5. 又是别人家的公司!华为人才房价格曝光:1万/㎡ 带装修
  6. 杭电1716排列2 stl
  7. SQL面试题(1-10)oracle写的
  8. vue骨架屏以及seo优化
  9. vmware下虚拟机不能上网问题解决
  10. Date和SimpleDateFormat
  11. 视频点播-上传视频状态异常
  12. 反转链表详解(Python)
  13. 手把手教你安装Sketch破解版和measure插件
  14. 最新微信养号、使用、解封必看的注意事项
  15. Windows 2008 R2 终端服务器授权安装配置
  16. 我为啥叫这个名字,莫名其妙的油葫芦
  17. 详解APP应用分发平台的榜单推荐和搜索排名规则
  18. 【开发者平台汇总】-各大平台开发者及开放平台集锦
  19. 鼠标切换虚拟桌面 autohotkey
  20. opc服务器不稳定的原因,OPC Client和OPC Server容易出现通讯故障,原因是什么?

热门文章

  1. php判断日期为空值,php判断值是否为空实例代码
  2. leetcode算法题--两数相加 II
  3. 快捷启动_start for mac(快捷启动应用)
  4. 无限容量数据库架构设计
  5. mysql 存在索引但不能使用索引的典型场景
  6. (DT系列五)Linux kernel 是怎么将 devicetree中的内容生成plateform_device【转】
  7. Confluence 6 使用一个页面为站点的默认页面
  8. 自动化发布-GitLab WEB Hooks 配置
  9. [HNOI2008]玩具装箱toy
  10. laravel 模版引擎使用