特征提取算法--ORB

9 篇文章 1 订阅

本文主要参考了一下博客:
http://blog.csdn.net/hujingshuang/article/details/46984411
http://blog.csdn.net/stellar0/article/details/8741676
http://blog.sina.com.cn/s/blog_567a58300101iarh.html

ORB算法的论文来自”ORB: an efficient alternative to SIFT or SURF”,作者是OpenCV维护和开发的公司willowgarage的,论文名字起的很牛气,摘要里说,ORB算法比sift算法效率高两个数量级。江湖上流传的说法是ORB算法综合性能在各种测评里是最好的。

ORB就是BRIEF的改进,BRIEF太简单了,就不介绍了,有兴趣的朋友自己看paper吧。ORB的paper我读下来,感觉改进主要有以下几点:用FAST作为特征点提取的算法,更快了,添加了特征点的主方向,这样就具有了旋转不变性。最后一点其实我也想到了,当时看BRIEF的时候就想应该可以优化,就是ORB采用贪婪穷举的方法得到了相关性较低的随机点对,还有一个改进就是对于随机点对,受噪声的影响很大BRIEF的办法就是对原图像滤波,降低噪声的影响,ORB不在使用像素点的直接比较,而是选择该像素为中心的一个小patch作为比较对象,提高了抗噪能力。

实际上,ORB算法是将FAST角点检测与BRIEF特征描述结合并进行了改进。ORB特征,就是oFAST和rBRIEF的组合。oFast就是带方向的Fast特征点,rBRIEF就是旋转不变性的BRIEF。
1) Fast特征检测算法
FAST只是一种特征点检测算法,并不涉及特征点的特征描述。 FAST的提出者Rosten等将FAST角点定义为:若某像素与其周围邻域内足够多的像素点相差较大,则该像素可能是角点。
这里写图片描述

1、上图所示,一个以像素p为中心,半径为3的圆上,有16个像素点(p1、p2、…、p16)。
2、定义一个阈值。计算p1、p9与中心p的像素差,若它们绝对值都小于阈值,则p点不可能是特征点,直接pass掉;否则,当做候选点,有待进一步考察;
3、若p是候选点,则计算p1、p9、p5、p13与中心p的像素差,若它们的绝对值有至少3个超过阈值,则当做候选点,再进行下一步考察;否则,直接pass掉;
4、若p是候选点,则计算p1到p16这16个点与中心p的像素差,若它们有至少9个超过阈值,则是特征点;否则,直接pass掉。
5、对图像进行非极大值抑制:计算特征点出的FAST得分值(即score值,也即s值),判断以特征点p为中心的一个邻域(如3x3或5x5)内,计算若有多个特征点,则判断每个特征点的s值(16个点与中心差值的绝对值总和),若p是邻域所有特征点中响应值最大的,则保留;否则,抑制。若邻域内只有一个特征点(角点),则保留。得分计算公式如下(公式中用N表示得分,这里写图片描述):
这里写图片描述
上面是FAST-9,当然FAST-10、FAST-11、FAST-12也是一样的,只是步骤4中,超过阈值的个数不一样。FAST算法实现起来简单,尤其是以速度快著称。
以上便是FAST特征检测的过程,清晰明了,而对于角点的定义也是做到了返璞归真,大师就是大师,还原本质的能力很强,估计以前这种简单想法被很多人忽略了。

在ORB中Fast算法得到改进,
1、假设在图像中要提取N个特征点,则降低FAST的阈值,使FAST算法检测到的特征点大于N;找此keypoint不是为了直接用这个点的坐标去求特征,而是根据此点的位置计算这个patch的方向,再用这个方向去steer原始的BRIEF。
2、在特征点位置处,计算特征点的Harris响应值R,取前N个响应值大的点作为FAST特征点(Harris角点响应计算:Harris角点检测中的数学推导);
3、由于要解决BRIEF算法的旋转不变性,则需要计算特征点的主方向。
ORB中利用重心来计算,如下(其中(x,y)是特征邻域内的点):
这里写图片描述
这里写图片描述
这里写图片描述
atan2表示反正切,得到的θ值就是FAST特征点的主方向。
FAST算法不能处理多尺度图像,如果需要处理多尺度的话,就对原来的图像作金字塔,然后对每个图都进行步骤2和3的处理。解决尺度不变性的问题。

2) BRIEF特征描述
BRIEF是对已检测到的特征点进行描述,它是一种二进制编码的描述子,摈弃了利用区域灰度直方图描述特征点的传统方法,大大的加快了特征描述符建立的速度,同时也极大的降低了特征匹配的时间,是一种非常快速,很有潜力的算法。
算法步骤如下:
1、为减少噪声干扰,先对图像进行高斯滤波(方差为2,高斯窗口为9x9)。
2、以特征点为中心,取SxS(31x31)的邻域窗口。在窗口内随机选取一对(两个)点,比较二者像素的大小,进行如下二进制赋值。
这里写图片描述
其中,p(x),p(y)分别是随机点x=(u1,v1),y=(u2,v2)的像素值。
3、在窗口中随机选取N对随机点,重复步骤2的二进制赋值,形成一个二进制编码,这个编码就是对特征点的描述,即特征描述子。(一般N=256)
以上便是BRIEF特征描述算法的步骤。
关于一对随机点的选择方法,原作者测试了以下5种方法,其中方法(2)比较好。
这里写图片描述
优点:计算速度快
缺点:对噪声敏感(因为二进制编码是通过比较具体像素值来判定的),不具备旋转不变性,不具备尺度不变性。

ORB算法主要解决前两个缺点:噪声敏感、旋转不变性。
1、解决噪声敏感问题
BRIEF中,采用了9x9的高斯算子进行滤波,可以一定程度上解决噪声敏感问题,但一个滤波显然是不够的。ORB中提出,利用积分图像来解决:在31x31的窗口中,产生一对随机点后,以随机点为中心,取5x5的子窗口,比较两个子窗口内的像素和的大小进行二进制编码,而非仅仅由两个随机点决定二进制编码。(这一步可有积分图像完成)。
2、解决旋转不变性
为了把steered BRIEF方差增大,相关性降低,用了一种穷举方法挑选binary test。binary test应该包括
:1)怎么选抽样点,2)那个像素比较完后怎么组合各bit形成bit串,这个跟点对比较结果的排列的顺序有关的。
本文用了穷举的方法挑点对,而不是原始BRIEF中用高斯等分布抽样点对。具体理解大概如下:
1)取一个点对(两个对)一共有M种取法,针对所有训练用的patches,每一个patch都根据这M种binary
tests取点,做像素比较测试,得到0/1一个bit。因为一共有300k个关键点,所以这一步可以得到一个300k*M的矩阵,每个元素都是0或1。
2)对该矩阵的每个列向量,即每个binary test(包括选点对的两点位置及像素比较),计算其均值,然后它们重新排序,均值越接近0.5的,排越前面。排好后,组成一个向量(实际上是个矩阵),管它叫T。
3)贪婪搜索:从T中把排第一的那个binary test放到R中,T中就没有这个测试了;然后把T中排下一个的点对与R中所有测试求相关,如果相关值超过某一事先设定的阈值,就扔了它,否则就把这个点对像素比较放到R里面;重复上一步直到R中有256个测试为止。如果全找完了也不够256个,就把阈值升高一些,再重试一遍。
利用FAST中求出的特征点的主方向θ,对特征点邻域进行旋转,Calonder建议先将每个块旋转后,再进行BRIEF描述子的提取,但这种方法代价较大。ORB算法采用的是:每一个特征点处,对产生的256对随机点(以256为例),将其进行旋转,后进行判别,再二进制编码。如下:S表示随机点位置(2xn的矩阵),Sθ表示旋转后的随机点的位置(2xn的矩阵),x1=(u1,v1)是一个坐标向量,其余雷同。n=256。
这里写图片描述
这里写图片描述
这里写图片描述
得到新的随机点位置后,利用积分图像进行二进制编码,即可。

3)利用BRIEF特征进行配准
经过上面的特征提取算法,对于一幅图中的每一个特征点,都得到了一个256bit的二进制编码。接下来对有相似或重叠部分的两幅图像进行配准。
特征配对是利用的汉明距离进行判决:
1、两个特征编码对应bit位上相同元素的个数小于128的,一定不是配对的。
2、一幅图上特征点与另一幅图上特征编码对应bit位上相同元素的个数最多的特征点配成一对。

### 回答1: ORB是一种用于图像特征提取算法,它结合了FAST(Fast RAST Feature)关键点检测算法和BRIEF(Binary Robust Independent Elementary Features)描述子算法ORB特征提取算法的示意图如下:首先,在输入图像中使用FAST算法检测关键点。FAST算法可以快速检测到图像中的角点特征点。接着,对于每个关键点,ORB算法会计算它的方向。方向的计算是通过计算关键点周围一定半径内的像素变化来确定的,以确保对旋转具有不变性。然后,ORB算法通过对关键点附近的图像块进行采样,构造一个特征向量。这个特征向量中的元素是通过对图像块中的像素进行二进制描述得到的。BRIEF算法使用二进制描述子,它可以快速计算两个图像块的相似度。 在ORB算法中,通过使用FAST关键点检测算法和BRIEF描述子算法,可以同时实现高效的特征点检测和描述。这使得ORB算法在实时计算和实时应用中具有较好的性能。此外,由于采用二进制描述子,ORB算法具有很小的存储空间需求,这对于存储和匹配大量特征点非常有用。 综上所述,ORB特征提取算法包括关键点检测、方向计算和特征描述三个主要步骤。这个算法的示意图清晰地展示了这三个步骤之间的关系和流程。通过ORB算法提取的特征点和描述子可以用于图像匹配、目标跟踪和三维重建等计算机视觉应用中。 ### 回答2: ORB特征提取算法示意图主要包括以下几个步骤: 1. 输入图像:首先,将待处理的图像输入给ORB特征提取算法。 2. 建立尺度空间:对输入图像进行尺度空间建模,即在不同尺度下分别提取特征。采用高斯金字塔来构建图像的不同尺度。 3. 特征点提取:在每个尺度下,通过FAST(Features from Accelerated Segment Test)角点检测算法,选取具有显著角点的图像区域。 4. 生成特征描述子:对于选取的角点区域,采用BRIEF(Binary Robust Independent Elementary Features)描述子生成算法,生成特征描述子。BRIEF描述子使用二进制位串来表示图像的局部特征。 5. 特征匹配:在多尺度下,对输入图像各个级别上计算得到的特征描述子进行匹配。采用近似最近邻搜索(Approximate Nearest Neighbor)算法来快速筛选匹配点对。 6. 过滤匹配点:为了减少误匹配,使用比率测试来过滤匹配点。只保留那些最好的匹配对。 7. 输出特征点:将经过过滤的匹配点输出为ORB特征点,每个特征点包含其所在尺度、位置和方向。 通过上述步骤,ORB特征提取算法能够从输入图像中提取出具有旋转不变性、尺度不变性和光照不变性的特征点,并且具有较快的计算速度和较低的存储需求。因此,在计算机视觉领域,ORB特征提取算法被广泛应用于图像匹配、目标跟踪和三维重建等任务中。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值