文章目錄
  1. 1. ORB特征检测算子
  2. 2. 1. oFAST:带主方向的FAST检测算子
    1. 2.1. 1.1.图像重心计算
  3. 3. 2. BRIEF特征描述子
    1. 3.1. 2.1.具体算法
    2. 3.2. 2.2.随机点选取策略
    3. 3.3. 2.3.BRIEF性能评价和改进
      1. 3.3.1. 2.3.1.BRIEF性能评价
      2. 3.3.2. 2.3.2.ORB特征描述子
  4. 4. 总结


作者:Frank
时间:2016-07-12


在最近的Feature-Based SLAM系统中,ORB特征检测算子也应用的较为频繁,特别是ORB-SLAM以及ORB-SLAM2的出现,使得ORB特征检测算子的应用更加广泛。因此本节要讲述的就是ORB特征检测算子的原理。

ORB特征检测算子

paper来源:ORB: an efficient alternative to SIFT or SURF;
ORB(Oriented FAST and Rotated BRIEF)特征检测算子,是一种新的具有局部不变性的特征检测算法。该算法算法是由Ethan Rublee,Vincent Rabaud,Kurt Konolige以及Gary R.Bradski提出的。ORB特征检测算子是SIFT/SURF的一种替代算法。SIFT/SURF本身是有专利的,而ORB则是免费的。ORB特征检测算子是SIFT特征检测方法和BRIEF特征描述子的结合,综合二者的优势,实现了极高的效率。SIFT相关知识在上一节已经讲过了,这里会先就ORB特征检测子的改进展开叙述,在此基础上阐述ORB特征对SIFT和BRIEF的结合和改进。

1. oFAST:带主方向的FAST检测算子

在特征检测部分,ORB采用了FAST的特征检测算法,同时对其进行改进,使其具有尺度不变性和旋转不变性。为了计算一个特征点的方向,首先需要计算FAST特征点的时候要在一个邻域内,假设邻域的中心为C,同时我们找出这个图像邻域内的重心位置P,那么C与P的连线方向就是该特征点的方向。

1.1.图像重心计算

首先,从概率上来讲,一个一阶随机变量X在C点的k阶中心矩的定义如下:
$$E(X) =\sum {xf(x)} \tag{1}$$
$$E((x-c)^k) \tag{2}$$
特别的,有以下两种情况:

  1. c=0,此时$a_k=E(X^k)$称为X的k阶中心距;
  2. $c=E(x^k)$,此时$\mu _k=E[(X-E(X))^k]成为X的k阶中心距

对于2阶pq阶矩的计算如下:
$$m_{pq}=\sum _{x,y}{x^py^qI(x,y)} \tag{3} $$
一般而言,零阶矩是物体的质量,一阶矩和零阶矩可以算出物体的中心,而二阶矩是用来计算物体的方向的。而图像可以看成一个平板的物体,其一阶矩和零阶矩就可以拿来计算某个形状的重心,而二阶矩就能拿来计算形状的方向。
对于一幅图像,${m10 \over m00}={\sum _{x,y}xI(x,y) \over \sum _{x,y}I(x,y)}$代表了图像像素在x方向上的偏重,这就是重心的x轴坐标,同理可得重心的y轴坐标为:${m01 \over m00}={\sum _{x,y}yI(x,y) \over \sum _{x,y}I(x,y)}$。因此,重心坐标为:$({m10\over m00},{m01 \over m00})$。
在计算特征点的方向时,除了上述的基于重心和中心连线的方向的方法外,还有其他两种方法:

  1. MAX法:将FAST特征块内最大的梯度方向作为特征点的方向;
  2. BIN法:这就是上节中FAST用到的方法,不再赘述;

这样可以得到主方向的计算公式如下:
$$ \theta= atan2(m_{01},m_{10}) \tag{4} $$

2. BRIEF特征描述子

paper来源:BRIEF:Binary Robust Independent Elementary Features
BRIEF是在2010年提出的。它是对已检测到的特征点进行描述,然后进行二进制编码的描述子。BRIEF描述子摒弃了利用区域灰度直方图描述特征点的方法,大大加快了特征描述符建立的速度,同时也极大的降低了特征匹配的时间,是一种非常快速,很有潜力的算法。

2.1.具体算法

由于BRIEF仅仅是特征描述子,因此BRIEF建立在已经进行了特征点提取的基础上,在特征点的邻域位置利用BRIEF算法建立特征描述符。
算法的具体步骤如下:

  1. 为减少噪声干扰,先对图像进行高斯滤波(方差为2,高斯窗口为9*9)。
  2. 以特征点为中心,取S*S的邻域窗口。在窗口内随机选取一对点,比较二者像素的大小,并进行如下二进制赋值。$$\tau (p;x,y): = \left\{ {\matrix{
    1 & if p(x) < p(y) \cr
    0 & otherwise \cr
    } } \right. \tag{5}$$其中,$p(x),p(y)$分别是随机点$x=(u_1,v_1),y=(u_2,v_2)$的像素值。
  3. 在窗口中随机选取N对随机点,重复步骤2的二进制赋值,形成一个二进制编码,这个编码就是对特征点的描述,即特征描述子。(一般N为256)

以上便是BRIEF特征描述算法的步骤。

2.2.随机点选取策略

在步骤2中,需要在窗口内选取一对随机点并比较二者像素的大小,关于一对随机点的选择方法,原作者测试了以下5种方法:

  1. $x_i,y_i$都呈均匀分布$[-{S \over 2},-{S \over 2}]$;
  2. $x_i,y_i$都呈高斯分布$[0,{1 \over 25}S^2]$,准则采样服从各向同性的同一高斯分布;
  3. $x_i$服从高斯分布$[0,{1 \over 25}S^2]$,$y_i$服从高斯分布$[0,{1 \over 100}S^2]$,采样分为两步进行:首先在原点处为$x_i$进行高斯采样,然后在中心为$x_i$处为$y_i$进行高斯采样;
  4. $x_i,y_i$在空间量化极坐标下的离散位置处进行随机采样;
  5. $x_i=(0,0)^T,y_i$在空间量化极坐标下的离散位置处进行随机采样。

这五种方法生成的256对随机点如下(一条线段的两个端点是一对):

其中方法(2)比较好。

申明:本部分引用来源:【特征检测】BRIEF特征点描述算法

2.3.BRIEF性能评价和改进

2.3.1.BRIEF性能评价

  1. 不具备旋转不变性;
  2. 对噪声敏感;
  3. 不具备尺度不变性;
  4. 在速度上式SURF的10倍;

2.3.2.ORB特征描述子

对于N对二进制随机点,可以得到一个$2\times n$大小的矩阵:
$$S=\left[{ \matrix{
x_1,…,x_n \cr
y_1,…,y_n \cr
}}\right] \tag{6} $$
我们通过FAST特征块计算出的主方向$\theta$来计算出一个旋转矩阵$R_\theta$,之后我们更改S矩阵为:
$$S_\theta=R_\theta S \tag{7} $$
那么此时由$S_\theta$中点的顺序得到新的随机点矩阵,我们定义此时的BRIEF描述子为:
$$ g_n(p,\theta)=f_n(p)|(x_i,y_i) \in S_\theta \tag{8} $$

申明:本部分引用源自:ORB特征检测算法小结;

总结

以上就是ORB特征检测的全部内容,中间还有些不清楚的地方,弄懂了会更新该博客。谢谢。



转载请注明出处

文章目錄
  1. 1. ORB特征检测算子
  2. 2. 1. oFAST:带主方向的FAST检测算子
    1. 2.1. 1.1.图像重心计算
  3. 3. 2. BRIEF特征描述子
    1. 3.1. 2.1.具体算法
    2. 3.2. 2.2.随机点选取策略
    3. 3.3. 2.3.BRIEF性能评价和改进
      1. 3.3.1. 2.3.1.BRIEF性能评价
      2. 3.3.2. 2.3.2.ORB特征描述子
  4. 4. 总结