1 特征点

特征点是图像中一些特别的地方。一般而言,人工设计的特征点(比如SIFT、SURF、ORB等)都具有如下的性质:


  1. 可重复性

    :即相同的“区域“可以在不同的图像中找到(比如将特征点比作一只猫,在图一和图二中都能找到这只猫)。

  2. 可区别性

    :即不同的”区域“有不同的表达。

  3. 高效率

    :在同一副图像中,特征点的数量应该远小于像素的数量。

  4. 本地性

    :特征仅与一小片图像区域相关。


特征点




关键点





描述子


两部分组成。


关键点

通常是指该特征点在图像中的


位置


,有的特征点还具有朝向、大小等信息。

描述子

通常是一个


向量


,按照认为设计的方式,描述了该关键点周围像素的信息。描述子的设计原则是


外观相似的特征应该有相似的描述子


2 ORB特征



ORB


(Oriented FAST and Rotated BRIEF)特征也是由关键点和描述子组成。正如其英文全名一样,这种特征使用的特征点是”

Oriented FAST

“,描述子是”

Rotated BRIEF

“。其实这两种关键点与描述子都是在ORB特征出现之前就已经存在了,ORB特征的作者将二者进行了一定程度的改进,并将这两者巧妙地结合在一起,得出一种可以快速提取的特征--

ORB特征

。ORB特征在速度方面相较于SIFT、SURF已经有明显的提升的同时,保持了特征子具有旋转与尺度不变性。

2.1 FAST 关键点


FAST特征点

检测算法由E.Rosten和T.Drummond在2006年在其论文“Machine Learning for High-speed Corner Detection”中首次提出。英文全称是“Features from Accelerated Segment Test”,可以翻译成“


基于加速分割测试的特征


”。从论文名字可以看出FAST是一种高效的特征点(角点)检测算法,基本上可以满足实时检测系统要求,是计算机视觉领域最主流的角点检测算法之一。虽然FAST特征检测速度很快,但首字母刚好拼成fast,真是一个美丽的巧合。

FAST的角点检测过程如下:

  1. 在图像中选取像素p,假设它的亮度为Ip;
  2. 设置一个阈值T(比如,Ip的20%);
  3. 以像素p为中心,选取半径为3的圆上的


    16


    个像素点(如下图选取方式);
  4. 假设候选的圆上有连续的N个点的亮度大于Ip+T或者小于Ip-T,那么像素p可以被认为是特征点(N通常取12,即为FAST-12,取为9和11也很常见,它们分别被称为FAST-9和FAST-11);
  5. 循环上述操作,对每一个像素执行相同的操作。


加速

:通常在FAST-12算法中,为了更加高效,可以添加一项预测试操作,来快速排除图像中海量的不是角点的像素。具体操作为:对于每个像素,直接检测领域圆上的第


1、5、9、13


个像素的亮度。只有当这四个像素中有三个

同时大于

Ip+T或者小于Ip-T时,当前像素才有可能是一个角点,继续进行更加严谨的判断,否则直接排除。


优化

:通常,原始的FAST角点经常出现“扎堆”的现象。所以在第一遍检测之后,还需要用


非极大值抑制


,在一定范围内仅仅保留响应极大值的角点。这样可以有效缓解角点集中的问题。

ORB中对fast的一些改进

因为FAST特征点仅仅是比较像素间亮度的差异,所以速度非常快,但是同时它也存在一些问题,因此

在ORB特征中对其进行了改进

  1. 首先FAST特征点数量很大并且不确定,而我们希望对图像提取


    固定数量的特征


    。因此,我们可以指定最终要提取的角点数量N,对原始的FAST角点分别计算Harries响应值,然后选取前N个具有最大响应值的角点作为最终的角点集合。

  2. 因为FAST角点是固定选取半径为3的圆,所以很容易知道其不具备


    尺度不变性


    。解决这个问题通过构建


    图像金字塔


    (opencv中默认的比例因子是1.2,层数为8),并在金字塔的每一层上都进行角点的检测,最终将在所有比例的图像上提取的角点作为最终的角点集合。

  3. 最后,FAST角点不具备


    方向性


    。orb解决这个问题通过灰度质心法,具体是通过分别计算区域图像中灰度值作为权重在x轴与y轴上的质心。并通过这两个质心长度的比值确定方向。

2.2 BRIEF 描述子

BRIEF是2010年的一篇名为《BRIEF:Binary Robust Independent Elementary Features》的文章中提出,Brief为特征描述子,对已检测到的特征点进行描述,是一种


二进制编码描述子


,摒弃了区域灰度直方图描述特征点的传统方法,加快特征描述子建立速度,降低特征匹配时间。

了解过SIFT和SURF描述子的人应该知道,它们一个描述子就要占用几百个字节内存空间,十分庞大,计算效率很低。而一个BRIEF描述子只需要128,256或512个比特的空间便可存储(opencv中提供了这三种长度,默认为256)。

BRIEF是一种二进制描述子,描述向量由很多0与1组成。这里0与1的确定是通过比较关键点附近两个像素


灰度值的大小关系


确定。

两个像素的位置确定使用了


随机取点


的比较,原始的BRIEF描述子不具有旋转不变性,因此在图像发生旋转时容易丢失。而在ORB中通过在

FAST特征点提取阶段计算的关键点的方向信息

,通过方向信息进行随机取点函数的设置,使得Rotated BRIEF 描述子具有了良好的


旋转不变性


ORB中对brief的一些改进

BRIEF描述子的优点在于速度,但是缺点是不具备尺度不变性与旋转不变性并且对于噪声比较敏感,因此在

ORB中同样对其进行了改进

  1. 旋转不变性:在上面通过


    灰度质心法


    计算出fast关键点的方向后,在对这个点进行描述时,依据这个方向旋转启发式搜索的256对匹配点对,获得描述子的旋转不变性;
  2. 尺度不变性:在关键点位于的


    图像金字塔


    上进行描述子的计算;
  3. 解决噪声敏感的问题:在brief中使用的是pixel与pixel的大小来构造描述子的每一个bit;这样的后果就是对噪声敏感。在orb中不再使用


    pixel对


    ,而是使用

    9*9




    patch对


    ,也就是对比的是patch的像素值的和(这个通过积分图可以快速计算)。

在orb论文中,提供了启发式搜索算法计算得到的256对匹配点对,可以直接拿来使用,只需要在计算时将这256对点按照

特征点

的方向信息进行旋转就可以了。