简单介绍

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代码

#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("img1.png");
Mat img_2 = imread("img2.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;
}

实验结果

代码分析

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

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

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

在执行调试时,在观察窗体能够看到,在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. SG博弈函数模板

    下面这两个模版应该就比较严密了,这个里边的f[]是从零开始的. 转载出处:转自:http://blog.csdn.net/primoblog/article/details/13376057 1.sg ...

  2. 怎么样给CentOS6.5增加swap分区

    再给服务器添加zabbix监控的时候,发现服务器有个报错“Lack of free swap space on localhost”,通过查找得知,在安装服务器的时候忘了划分swap分区.为了减少报错 ...

  3. BZOJ 2820 YY的GCD ——莫比乌斯反演

    我们可以枚举每一个质数,那么答案就是 $\sum_{p}\sum_{d<=n}\mu(d)*\lfloor n / pd \rfloor *\lfloor m / pd \rfloor$ 直接做 ...

  4. SPOJ GSS2 Can you answer these queries II ——线段树

    [题目分析] 线段树,好强! 首先从左往右依次扫描,线段树维护一下f[].f[i]表示从i到当前位置的和的值. 然后询问按照右端点排序,扫到一个位置,就相当于查询区间历史最值. 关于历史最值问题: 标 ...

  5. [暑假集训--数位dp]hdu2089 不要62

    杭州人称那些傻乎乎粘嗒嗒的人为62(音:laoer).杭州交通管理局经常会扩充一些的士车牌照,新近出来一个好消息,以后上牌照,不再含有不吉利的数字了,这样一来,就可以消除个别的士司机和乘客的心理障碍, ...

  6. hdu 4961 数论 o(nlogn)

    Boring Sum Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others) Tot ...

  7. Ajax 实现文件的下载

    JQuery的ajax函数的返回类型只有xml.text.json.html等类型,没有“流”类型,所以我们要实现ajax下载,不能够使用相应的ajax函数进行文件下载.但可以用js生成一个form, ...

  8. android studio AndroidManifest

    一.目录结构 1. AndroidManifest.xml 它是一个清单文件,提供应用的基本信息 <?xml version="1.0" encoding="utf ...

  9. 快速掌握RabbitMQ(一)——RabbitMQ的基本概念、安装和C#驱动

    1 RabbitMQ简介 RabbitMQ是一个由erlang开发的AMQP(Advanced Message Queue )的开源实现,官网地址:http://www.rabbitmq.com.Ra ...

  10. 【WEB基础】HTML & CSS 基础入门(6)超链接

    超链接--文字链接 超链接[hyperlink]是网页中最为常见的元素之一,我们几乎可以在所有的网站页面中找到超链接.每个网站都不止一个页面,这些页面就是利用超链接进行串接.超链接帮我们实现了网页与网 ...