zoukankan      html  css  js  c++  java
  • 【特征检測】BRIEF特征点描写叙述算法

    简单介绍

             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.

  • 相关阅读:
    .net MVC 下载文件乱码问题解决方案
    javascript将json转字符串
    js中将字符串转换成json的三种方式
    mvc项目,导出到Excel,中文显示乱码
    20160606面试题总结
    bzoj 4318: OSU!
    bzoj 1419: Red is good
    Codeforces 123 E Maze
    HDU 4336 Card Collector
    Codeforces 540 D Bad Luck Island
  • 原文地址:https://www.cnblogs.com/tlnshuju/p/6932296.html
Copyright © 2011-2022 走看看