ORB特征:
概述:
ORB算法是Ethan Rublee在ICCV 2011上提出的一种用于基于视觉信息的特征点检测与描述算法,特征点检测部分利用运算速度特别快的FAST角点检测子,并针对FAST特征不具备方向的问题,加入了FAST特征的方向信息,特征点描述部分则是利用基于像素点二进制位比较的BRIEF特征描述子,并改进了 BRIEF描述子对图像噪声敏感和不具备旋转不变性的缺点。
性能:(SIFT、SURF、ORB)
在对特征点的描述的细致程度上是SIFT算法高于SURF算法,SURF算法有高于ORB算法,但是在计算速度上这个顺序正好是相反的。因此在选择特征提取方法的时候要根据实际应用情况来选择,如进行离线的图像的拼接,3D建模等对时间要求不是很严格应用,可以选择SIFT,甚至是对仿射有很好抗性但是计算量很大的ASIFT特征。但是当应用场合是在线的实时检测,就要选择比较快速的SURF或ORB,另外在特征匹配的时候优秀的搜索算法也是提高速度的关键。
ORB特征提取可以分为两部分:1)具有方向的FAST兴趣点检测;2)具有旋转不变的BRIEF兴趣点描述子。
一、FAST兴趣点检测
FAST只是一种特征点检测算法,并不涉及特征点的特征描述。 FAST的提出者Rosten等将FAST角点定义为:若某像素与其周围邻域内足够多的像素点相差较大,则该像素可能是角点。
在ORB中Fast算法得到改进:使其具有旋转不变性
(1)
FAST特征点是没有尺度不变性的,所以我们可以通过构建高斯金字塔,然后在每一层金字塔图像上检测角点,来实现尺度不变性。
(2)
那么,对于局部不变性,我们还差一个问题没有解决,就是FAST特征点不具有方向,ORB的论文中提出了一种利用灰度质心法来解决这个问题,灰度质心法假设角点的灰度与质心之间存在一个偏移,这个向量可以用于表示一个方向。
1.图像的质心计算
通过计算特征点的矩来得到点的方向。图像中某特征点点邻域的(p+q)阶矩的定义式为:
图像的0阶矩为:
图像的1阶矩为:
质心就是x坐标的和,y坐标的和再除以总数:
那么特征点与质心的夹角定义为FAST特征点的方向:
图示:
二、orb特征描述子
2.1 BRIEF特征描述
BRIEF的主要思想是在特征点附近随机选取若干点对组成图像块,把这些图像块的灰度值二值化后组成一个二进制串,并将这个二进制串作为该特征点的特征描述子。BRIEF描述子的每一位都是由随机选取的两个二进制点做比较得来的。定义一个经过高斯核做过平滑处理的图像块p的二进制比较准则为:
式中,p(x)为图像块p在像素点x(u,v)处的灰度值,同理可知p(y)为图像块p在像素点在y处的灰度值。选择n个(x,y)像素位置对,就可以得到BRIEF的n位二进制比特串。
一个BRIEF特征点可以定义为一个包含n次binary test的向量:
n可以为128,256,512等。
下面是一些技术细节:
1. 我们的binary test怎么选择点对?对哪些点做test?
虽然有很多binary test选择的点的分布方法,设我们处理的是S×S的patch大小,我们的对做binary
test的x和y点的选择有以下几种:
我们选择第二种,
BRIEF性能评价
1:不具备旋转不变性
2:对噪声敏感
3:不具备尺度不变性
4:在速度上是surf的10倍。
2.2 Steer BRIEF特征描述
ORB选择了BRIEF作为特征描述方法,但是我们知道BRIEF是没有旋转不变性的,所以我们需要给BRIEF加上旋转不变性,把这种方法称为“Steer BREIF”。
下面介绍ORB如何改进BRIEF使之具备旋转不变性:
对于做过n次binary
test的点对定义一个2×n大小的矩阵
BRIEF令人惊喜的特性之一是:对于n维的二值串的每个比特征位,所有特征点在该位上的值都满足一个均值接近于0.5,而方差很大的高斯分布。方差越大,说明区分性越强,那么不同特征点的描述子就表现出来越大差异性,对匹配来说不容易误配。但是当我们把BRIEF沿着特征点的方向调整为Steered
BRIEF时,均值就漂移到一个更加分散式的模式。可以理解为有方向性的角点关键点对二值串则展现了一个更加均衡的表现。而且论文中提到经过PCA对各个特征向量进行分析,得知Steered BRIEF的方差很小,判别性小,各个成分之间相关性较大。
2.3rBRIEF特征描述
为了把steered BRIEF方差增大,相关性降低,用了一种穷举方法挑选binary
test。该方法成为rBRIEF
提高BRIEF描述子对旋转变化保持不变性的方法是采用贪婪穷举算法暴力找到相关性较低的随机点对,即通过贪婪穷举的搜索方法找到相关系数接近0.5的图像点对。
首先建立一个大约300k关键点的测试集:
对于这300k个关键点中的每一个特征点,考虑它的31×31的邻域,我们将在这个邻域内找一些点对。不同于BRIEF中要先对这个Patch内的点做平滑,再用以Patch中心为原点的高斯分布选择点对的方法。ORB为了去除某些噪声点的干扰,选择了一个5×5大小的区域的平均灰度来代替原来一个单点的灰度,这里5×5区域内图像平均灰度的计算可以用积分图的方法。我们知道31×31的Patch里共有N=(31?5+1)×(31?5+1)个这种子窗口,那么我们要N个子窗口中选择2个子窗口的话,共有C2N种方法。所以,对于300k中的每一个特征点,我们都可以从它的31×31大小的邻域中提取出一个很长的二进制串,长度为M=C2N,表示为
那么当300k个关键点全部进行上面的提取之后,我们就得到了一个300k×M的矩阵,矩阵中的每个元素值为0或1。
对该矩阵的每个列向量,也就是每个点对在300k个特征点上的测试结果,计算其均值。把所有的列向量按均值进行重新排序。排好后,组成了一个向量T,T的每一个元素都是一个列向量。
进行贪婪搜索:从T中把排在第一的那个列放到R中,T中就没有这个点对了测试结果了。然后把T中的排下一个的列与R中的所有元素比较,计算它们的相关性,旭果相关超过了某一事先设定好的阈值,就扔了它,否则就把它放到R里面。重复上面的步骤,只到R中有256个列向量为止。如果把T全找完也,也没有找到256个,那么,可以把相关的阈值调高一些,再重试一遍。
这样,我们就得到了256个点对。上面这个过程我们称它为rBRIEF。
简要过程:
三种方法的比较:
三、利用BRIEF特征进行配准
经过上面的特征提取算法,对于一幅图中的每一个特征点,都得到了一个256bit的二进制编码。接下来对有相似或重叠部分的两幅图像进行配准。
特征配对是利用的汉明距离(异或)进行判决:
1、两个特征编码对应bit位上相同元素的个数小于128的,一定不是配对的。
2、一幅图上特征点与另一幅图上特征编码对应bit位上相同元素的个数最多的特征点配成一对。
例如特征点A、B的描述子如下。
A:10101011
B:10101010
我们设定一个阈值,比如80%。当A和B的描述子的相似度大于90%时,我们判断A,B是相同的特征点,即这2个点匹配成功。在这个例子中A,B只有最后一位不同,相似度为87.5%,大于80%。则A和B是匹配的。
我们将A和B进行异或操作就可以轻松计算出A和B的相似度。而异或操作可以借组硬件完成,具有很高的效率,加快了匹配的速度。
参考网站:
http://blog.csdn.net/gh_home/article/details/51511471
http://blog.csdn.net/akunainiannian/article/details/47656871
http://blog.csdn.net/chuhang_zhqr/article/details/50915203
http://blog.csdn.net/yang843061497/article/details/38553765
http://blog.csdn.net/z397164725/article/details/8426109