• 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位上相同元素的个数最多的特征点配成一对。

    (一)BRIEF描述子

              在ORB特征提取的第一步根据FAST角点检测算法检测出特征点(角点、兴趣点、关键点)之后,我们需要以某种方式来描述这些特征点的属性。对于这些特征点的描述算法,我们称之为特征点的描述子(Feature DescritorS).ORB特征提取算法采用BRIEF描述子来描述这些特征点的属性。
            BRIEF算法的核心思想是在关键点P的周围以一定的方式选取N个点对,然后把这N个点对的边角结果组合起来作为该关键点的描述子。具体来讲,可以分为以下几步:
            1)以关键点P为圆心,以R为半径huayuan
            2)在圆O内某一区域选取N个点对。这里为了方便说明,我们假设N=4,即我们在圆区域内选取4对点对,在实际应用中,我们可以选取512对点对。假设选取的4对点对分别为:P1(A,B),P2(A,B),P3(A,B),P4(A,B)
            3)我们定义操作T(P(A,B))为:                        1   ;   A>B
                                                           T(P(A,B))  =  

                                                             0  ;  A<=B

            4)分别对已经选取的点对进行T操作,将得到的结果进行组合。如下所示:

                那么,这个关键点最终的描述子为:1011

    (二)理想特征点的描述子应该具备哪些属性呢?

           在现实生活中,我们从不同的距离、不同的方向、不同的角度、不同的光照条件下观察一个物体时,物体的大小、形状、亮度分布都会有所不同。但是,我们的大脑中依然可以判断它是同一个物体。理想的特征描述子就应该具备这样的性质。即对于大小、方向旋转、灰度亮度变化的图像中,同一特征点应该具有相似的特征描述子,我们将此称为描述子的可复现性。

             当我们以理想的方式计算图像中关键点的描述子的时候,同样的特征点,在不同的图像中应该具有相同的结果。即描述子对于光照、旋转、尺度具有一定的鲁棒性。

          上面我们用BRIEF算法得到的描述子并不具备以上这些性质。因此,我们得想办法改进我们的算法。ORB并没有解决尺度一致性的问题,OpenCv中实现的ORB算法采用图像金字塔来改善这方面的性能。ORB算法主要解决了BRIEF描述子不具有旋转不变性的问题。

           回顾一下BRIEF描述子的计算过程:在当前关键点P的周围以一定方式选取N个点对,组合这N个点对的T操作的结果,这个组合结果就为这个关键点最终的描述子。当我们选取点对的时候,是以当前关键点为原点,以水平方向为X轴,以垂直方向为Y轴建立坐标系。当图片发生旋转时,坐标系不变,同样的取点模式,取出来的点却不一样,计算得到的描述子也不一样,这是不符合我们要求的。因此,我们需要重新建立坐标系,使新的坐标系可以随着图片的旋转而旋转。这样我们以相同的取点模式取出来的点就具有一致性。

          打个比方,我们有一个印章,上面刻着一些直线。用这个印章在一张图片上盖一个章子,图片上的某个点被取出来。印章不变动的情况下,转动下图片,再盖一个章子,但是这次取出来的点对就和之前的不一样。为了使2次取出来的点一样,我们需要将章子也旋转同一个角度,再盖章。ORB在计算BRIEF描述子的时候,建立的坐标系是以关键点为圆心,以关键点和取点区域的形心的连线为X轴建立的2维坐标系 。在下图中,P为关键点。圆内为取点的区域,每个小格子代表一个像素。现在我们把这块圆心看做一块木板,木板上每个点的质量等于其对应的像素值。根据积分学的知识,我们可以求出这个密度不均匀木板的质心Q。计算公式如下所示,其中R为圆的半径。我们知道圆心是固定的,而且随着物体的旋转而旋转,当我们以PQ为坐标时,在不同的旋转角度下,我们以同一取点模式取出来的点是一致的,这就解决了旋转一致性的问题。

     

    转自:http://blog.csdn.net/maweifei/article/details/62889699

       http://blog.csdn.net/hujingshuang/article/details/46910259

  • 相关阅读:
    【Linux高频命令专题(19)】vi/vim
    【Linux高频命令专题(18)】tail
    【Linux常识篇(1)】所谓的正向代理与反向代理
    【nginx运维基础(2)】Nginx的配置文件说明及虚拟主机配置示例
    【nginx运维基础(1)】Nginx的编译安装与使用
    Linux之SAMBA共享服务
    【Linux高频命令专题(17)】head
    【mongoDB高级篇③】综合实战(1): 分析国家地震数据
    php post
    python简单的socket 服务器和客户端
  • 原文地址:https://www.cnblogs.com/wyuzl/p/7838103.html
Copyright © 2020-2023  润新知