orb算子 - CSDN
精华内容
参与话题
  • ORB算法

    2018-03-19 20:04:23
    本文转自:http://blog.csdn.net/GH_HOME/article/details/515114711. 定义ORB (Oriented FAST and Rotated BRIEF),是一种特征检测算子,其特征点的性能介于SIFT和SURF之间,但是其速度是SURF算法速度的10倍。...

    本文转自:http://blog.csdn.net/GH_HOME/article/details/51511471

    1. 定义

    ORB (Oriented FAST and Rotated BRIEF),是一种特征检测算子,其特征点的性能介于SIFT和SURF之间,但是其速度是SURF算法速度的10倍。

    2. 特性

    1. 速度快:基本上在特征检测算子方面借鉴了FAST特征检测算子,在特征描绘子方面借鉴了brief特征描绘算子,这两个方法都比较快。

    2. 具备旋转不变性,对噪声不敏感。

    3. 算法流程

    1. 特征检测部分

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

    1.1 图像重心计算

    首先,从概率上来讲,一个一阶随机变量X在c点的k阶矩定义如下: 

    特别的,有以下两种情况: 
    1.c=0,此时 成为的k阶中心矩 
    2.c= ,此时 成为的k阶中心矩

    对于2维pq阶矩的计算可见下式。

    一般而言,零阶矩是物体的质量,一阶矩和零阶矩可以算出物体的中心,而二阶矩是用来计算物体的方向的。拿图像出来来说,图像可以看成是一个平板的物体,其一阶矩和零阶矩就可以拿来计算某个形状的重心,而二阶矩就可以拿来计算形状的方向。 
    首先对图像而言, 代表了图像像素在x方向上的偏重,这就是重心的x坐标。(x加权的总量与总重量相比显示出来了x在哪里(图像的哪一列)的时候像素值较大)。同样的,代表了图像像素在y方向上的偏重,这就是重心的y坐标。 
    因此,重心坐标为

    1.2 带有方向特征的FAST特征点

    在计算出特征点所在patch的重心之后,可以定义特征点的方向,即为patch中心与重心连线的向量,其角度为 

    此外,为了更好的描述旋转不变性,我们还可以把patch设计为圆形,这样对于各个方向更加公平。

    在表征点的方向的时候,除了上述的基于重心和中心连线的方向的方法,还有两种方法:1.MAX法:利用patch内最大的梯度方向作为特征点的方向。 
    2.BIN法: 在patch内做一个梯度直方图,直方图之间的方向取样间距为10度,类似于sift提取方向的方法,选取梯度直方图中最大值对应的方向为特征点的方向。 然而这两种方法都不如重心和中心连线的方向的方法,具体的性能对比如下图所示 
    这里写图片描述 
    在图像噪声不断加大的情况下,基于重心和中心连线的方向的方法性能最优。

    1.3 更多ORB特征检测的细节

    1. 尺度不变性: FAST特征点不是多尺度的特征点,我们在图像上建立尺度金字塔,在每一层金字塔上都做一次FAST特征检测,之后再利用Harris算法去除部分不合理的特征点
    2. 在ORB的原文中,采用的FAST特征点是FAST-9,也就是以9为半径的patch

    2.特征描述部分

    ORB的特征描述是基于BRIEF特征点的改进算法。我们首先介绍BRIEF算法,再介绍ORB改进的带有方向的BRIEF算子。

    2.1 BRIEF特征描述子

    首先对图像进行平滑滤波(这一点很重要),之后再特征点周围设计一个patch,brief描述子就是基于这个patch中特征点之间像素比较的01二进制串,其取0还是取1满足以下方程


    这是生成BRIEF描述子的一次binary test。其中代表在x处像素的值。

    一个BRIEF特征点可以定义为一个包含n次binary test的向量。


    这样就在数学上形成了一串二进制码,而是此二进制码在每一位的值。

    下面是一些技术细节 
    1. 我们的binary test怎么选择点对?对哪些点做test? 
    虽然有很多binary test选择的点的分布方法,设我们处理的是的patch大小,我们的对做binary test的x和y点的选择有以下几种

    • x和y都服从均匀分布,均匀的分布在patch中
    • x与y服从高斯分布,, 这样代表着patch中距离中心点近的点对容易被选中做binary test
    • 把p固定为(0,0),q在周围随机采样

      我们选择第二种

      1. 我们的n选多少个?做多少次test 
        在ORB的原文中选择做256次,所以生成的brief的vector有256维。我们可以设置为128,256或512,这三种参数在OpenCV中都有提供,默认256.
      2. BRIEF特征点的匹配 
        直接对两个二进制串采用汉明距离来匹配,就是查看二进制串对应位上有多少不一样。

    BRIEF性能评价 
    1:不具备旋转不变性 
    2:对噪声敏感 
    3:不具备尺度不变性

    4:在速度上是surf的10倍。


    2.1 ORB特征描述子

    下面介绍ORB如何改进BRIEF使之具备旋转不变性。 
    对于做过n次binary test的点对定义一个大小的矩阵

    这里写图片描述

    通过patch的方向来计算一个旋转矩阵,之后我们更改S矩阵为 


    那么此时由中点的顺序得来的新的binary test,我们定义此时的BRIEF descriptor为 

    在这个位置,ORB的作者说是将360度离散为30份,建立一个查找表来预计算BRIEF patterns,一旦特征点的方向与全局的view一致,那么就采用此时的来计算BRIEF descriptor。这一点有点不清楚,希望有读者知道的话能指导我一下,谢谢!

    附上原文链接: ORB: an efficient alternative to SIFT or SURF

    附上OpenCV3.1.0在ORB上的讲解 :http://docs.opencv.org/3.0-beta/doc/py_tutorials/py_feature2d/py_orb/py_orb.html

    展开全文
  • ORB算子解读

    2017-11-17 10:28:06
    element.style { } main article .article_content h1 { font-size: 2.6em; } main article .article_content h1, main a

    本文为原创文章,转载请注明出处:http://blog.csdn.net/yang843061497/article/details/38553765

    绪论

    假如我有2张美女图片,我想确认这2张图片中美女是否是同一个人。这太简单了,以我专研岛国动作片锤炼出来的火眼金睛只需轻轻扫过2张图片就可以得出结论。但是,如果我想让计算机来完成这个功能就困难重重了:再性感的美女在计算机眼中也只是0-1组成的数据而已。一种可行的方法是找出2张图片中的特征点描述这些特征点的属性然后比较这2副图片的特征点的属性。如果有足够多的特征点具有相同的属性,那么就可以认为2副图片中的美女是同一个人。

      下面我们来看看ORB算法如何完成这这个过程。

    1.特征点的检测

        图像的特征点可以简单的理解为图像中比较显著显著的点,如轮廓点,较暗区域中的亮点,较亮区域中的暗点等。

     

             


                    原图                                            轮廓线(可能的特征点)

     

      ORB采用FAST(features from accelerated segment test)算法来检测特征点。FAST核心思想就是找出那些卓尔不群的点即拿一个点跟它周围的点比较,如果它和其中大部分的点都不一样就可以认为它是一个特征点

                                            

                备注:每个小方格代表一个像素,方格内的颜色只是为了便于区分,不代表该像素点的颜色。

    FAST具体计算过程:

    1. 从图片中选取一个像素点P,下面我们将判断它是否是一个特征点。我们首先把它的密度(即灰度值)设为Ip

    2. 设定一个合适的阙值t :当2个点的灰度值之差的绝对值大于t时,我们认为这2个点不相同。

    3. 考虑该像素点周围的16个像素。(见上图) 

    4. 现在如果这16个点中有连续的n个点都和点不同,那么它就是一个角点。 这里n设定为12。       

    5. 我们现在提出一个高效的测试,来快速排除一大部分非特征点的点。该测试仅仅检查在位置1、9、5和13四个位置的像素(首先检查1和9,看它们是否和点相同。如果是,再检查5和13)。如果是一个角点,那么上述四个像素点中至少有3个应该和点相同。如果都不满足,那么不可能是一个角点。

                                                        

                                                图中红色的点为使用FAST算法找到的特征点。

    2.特征点的描述

     2.1计算特征描述子

    得到特征点后我们需要以某种方式F描述这些特征点的属性。这些属性的输出我们称之为该特征点的描述子(Feature DescritorS).ORB采用BRIEF算法来计算一个特征点的描述子。BRIEF算法的核心思想是在关键点P的周围以一定模式选取N个点对,把这N个点对的比较结果组合起来作为描述子

                                    

    具体来讲分为以下几步。                              

    1.以关键点P为圆心,以d为半径做圆O

    2.在圆O内某一模式选取N个点对。这里为方便说明,N=4,实际应用中N可以取512.

    假设当前选取的4个点对如上图所示分别标记为:

             

    3.定义操作T


           

    4.分别对已选取的点对进行T操作,将得到的结果进行组合。

    假如:

             


    则最终的描述子为:1011

     

    2.2理想的特征点描述子应该具备的属性

    在现实生活中,我们从不同的距离,不同的方向、角度,不同的光照条件下观察一个物体时,物体的大小,形状,明暗都会有所不同。但我们的大脑依然可以判断它是同一件物体。理想的特征描述子应该具备这些性质。即,在大小、方向、明暗不同的图像中,同一特征点应具有足够相似的描述子,称之为描述子的可复现性

                                 

    当以某种理想的方式分别计算上图中红色点的描述子时,应该得出同样的结果。即描述子应该对光照(亮度)不敏感,具备尺度一致性(大小 ),旋转一致性(角度)等

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

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

    打个比方,我有一个印章,上面刻着一些直线。用这个印章在一张图片上盖一个章子,图片上分处直线2头的点将被取出来。印章不变动的情况下,转动下图片,再盖一个章子,但这次取出来的点对就和之前的不一样。为了使2次取出来的点一样,我需要将章子也旋转同一个角度再盖章。(取点模式可以认为是章子上直线的分布情况)

    ORB在计算BRIEF描述子时建立的坐标系是以关键点为圆心,以关键点和取点区域的形心的连线为X轴建立2维坐标系

                                 

     

       在图1中,P为关键点。圆内为取点区域,每个小格子代表一个像素。现在我们把这块圆心区域看做一块木板,木板上每个点的质量等于其对应的像素值。根据积分学的知识我们可以求出这个密度不均匀木板的质心Q计算公式如下。其中R为圆的半径。

                 

    我们知道圆心是固定的而且随着物体的旋转而旋转。当我们以PQ作为坐标轴时(图2),在不同的旋转角度下,我们以同一取点模式取出来的点是一致的。这就解决了旋转一致性的问题。

    3.特征点的匹配

    ORB算法最大的特点就是计算速度快 。 这首先得益于使用FAST检测特征点,FAST的检测速度正如它的名字一样是出了名的快。再次是使用BRIEF算法计算描述子,该描述子特有的2进制串的表现形式不仅节约了存储空间,而且大大缩短了匹配的时间。

    例如特征点AB的描述子如下。

    A10101011

    B10101010

    我们设定一个阈值,比如80%。当AB的描述子的相似度大于90%时,我们判断A,B是相同的特征点,即这2个点匹配成功。在这个例子中A,B只有最后一位不同,相似度为87.5%,大于80%。则AB是匹配的。

    我们将AB进行异或操作就可以轻松计算出AB的相似度。而异或操作可以借组硬件完成,具有很高的效率,加快了匹配的速度。

     

                                             OpenCVORB算法的匹配结果

     

    总结:

    本文只对ORB算法核心思想做一个解读。在具体的实现中还涉及到很多的细节及优化问题。了解更多的细节请参考下面一些资料。

    http://download.csdn.net/detail/yang843061497/7785917

    http://www.cvchina.info/2011/07/04/whats-orb/ 

    http://blog.sina.com.cn/s/blog_916b71bb0100w9al.html


    展开全文
  • orb算法简介

    万次阅读 2018-09-27 12:23:01
    ORB算法 ORB(Oriented FAST and Rotated BRIEF)是一种快速特征点提取和描述的算法。这个算法是由Ethan Rublee, Vincent Rabaud, Kurt Konolige以及Gary R.Bradski在2011年一篇名为“ORB:An Efficient ...

    ORB算法

    ORB(Oriented FAST and Rotated BRIEF)是一种快速特征点提取和描述的算法。这个算法是由Ethan Rublee, Vincent Rabaud, Kurt Konolige以及Gary R.Bradski在2011年一篇名为“ORB:An Efficient Alternative to SIFTor SURF”( http://www.willowgarage.com/sites/default/files/orb_final.pdf )的文章中提出。ORB算法分为两部分,分别是特征点提取和特征点描述。特征提取是由FAST(Features from  Accelerated Segment Test)算法发展来的,特征点描述是根据BRIEF(Binary Robust IndependentElementary Features)特征描述算法改进的。ORB特征是将FAST特征点的检测方法与BRIEF特征描述子结合起来,并在它们原来的基础上做了改进与优化。ORB算法最大的特点就是计算速度快。这首先得益于使用FAST检测特征点,FAST的检测速度正如它的名字一样是出了名的快。再次是使用BRIEF算法计算描述子,该描述子特有的2进制串的表现形式不仅节约了存储空间,而且大大缩短了匹配的时间。

    特征检测

    图像的特征点可以简单的理解为图像中比较显著显著的点,如轮廓点,较暗区域中的亮点,较亮区域中的暗点等。ORB采用FAST算法来检测特征点。这个定义基于特征点周围的图像灰度值,检测候选特征点周围一圈的像素值,如果候选点周围领域内有足够多的像素点与该候选点的灰度值差别够大,则认为该候选点为一个特征点。候选点周围的圆的选取半径是一个很重要的参数,这里为了简单高效,采用半径为3,共有16个周边像素需要比较。

    圆周上如果有连续n个像素点的灰度值比P点的灰度值大或者小,则认为P为特征点。一般n设置为12。假设在图像中要提取N个特征点,则降低FAST的阈值,使FAST算法检测到的特征点大于N。然后在特征点位置处,计算特征点的Harris响应值R,取前N个响应值大的点作为FAST特征点。为了加快特征点的提取,快速排出非特征点,首先检测1、9、5、13位置上的灰度值,如果P是特征点,那么这四个位置上有3个或3个以上的的像素值都大于或者小于P点的灰度值。如果不满足,则直接排除此点。

    FAST算法改进

    由于FAST算法提取出的特征点不具有尺度不变性,这导致图像经过缩放后无法匹配到相应的特征点。为了改进这一点,需要使用图片的尺度金字塔,在不同尺度计算FAST特征点。具体做法为设置一个比例因子scaleFactor(通常取1.2)和金字塔的层数nlevels(通常取8)。将原图像按比例因子缩小成nlevels幅图像。缩放后的图像为:I’= I/scaleFactork(k=1,2,…, nlevels)。nlevels幅不同比例的图像提取特征点总和作为这幅图像的oFAST特征点。

    计算特征描述子

    得到特征点后我们需要以某种方式描述这些特征点的属性。这些属性的输出我们称之为该特征点的描述子(Feature DescritorS).ORB采用BRIEF算法来计算一个特征点的描述子。BRIEF算法计算出来的是一个二进制串的特征描述符。它是在每一个特征点的邻域内,选择n对像素点pi、qi(i=1,2,…,n)。然后比较每个点对的灰度值的大小。如果I(pi)> I(qi),则生成二进制串中的1,否则为0。所有的点对都进行比较,则生成长度为n的二进制串。一般n取128、256或512,通常取256。

    BRIEF算法改进

    BRIEF描述子不具备旋转不变性,理想的特征点描述子应该具备旋转不变性,使得图像在经过一定的旋转后仍然能够识别匹配其中的特征点。BRIEF描述子选取点对的时候,是以当前特征点为原点,以水平方向为X轴,以垂直方向为Y轴建立坐标系。当图片发生旋转时,坐标系不变,同样的取点模式取出来的点却不一样,计算得到的描述子也不一样,这是不符合我们要求的。ORB在计算BRIEF描述子时建立的坐标系是以特征点为圆心,以特征点和取点区域的形心的连线为X轴建立2维坐标系。这样一来,无论图像如何旋转,ORB选取点对的坐标系是固定的。在不同的旋转角度下,我们以同一取点模式取出来的点是一致的。这就解决了旋转一致性的问题。

    展开全文
  • ORB算子代码

    2020-07-19 23:31:47
    ORB算子是比sift,surf更加快速 更加暴力的一种算法。具有很强的鲁棒性。
  • ORBSLAM2学习(一):ORB算法原理

    万次阅读 多人点赞 2018-05-23 15:49:17
    前言 目前学习ORBSLAM2中,ORBSLAM2中使用ORB算子进行特征点的提取与描述,ORB算法原理主要来自于文章《ORB an efficient alternative to SIFT or SURF》。这里先就该文章做自己的学习过程记录,之后结合文章内容...
  • ORB算法原理解读

    万次阅读 多人点赞 2017-07-19 17:51:26
    最近学习ORB特征点有一些
  • SIFT算子与ORB算子特征检测效果对比(Python) OpenCV中常用的特征检测和提取算法包括: Harris:用于检测角点 SIFT:用于检测斑点(blob) SURF:用于检测斑点 FASF:用于检测角点 BRIEF:用于检测斑点 ORB:带...
  • SIFT算法分为如下四步: 尺度空间极值检测:搜索所有尺度上的图像位置。通过高斯微分函数来识别潜在的对于尺度和旋转不变的兴趣点。 ...关键点定位:在每个候选的位置上,通过一个拟合精细的模型来确定位置和尺度...
  • 基于orb算子的图像匹配算法,该算法运行效率高,能够实现两幅图像的匹配,可用于图像的拼接,图像的识别等
  • 算子

    2016-01-07 19:25:11
    1.SIFt算子 SIFT算子是David G Lowe在2004提出的,即尺度不变特征变换(Scale Invariant Feature Transform)。它是以尺度空间的构造为基础的局部特征描述算子,对于图像的缩放、旋转和放射变换等具有不变性。SIFT...
  • ORB特征提取详解

    万次阅读 多人点赞 2020-05-22 15:55:30
    ORB(Oriented FAST and Rotated BRIEF)是一种快速特征点提取和描述的算法。这个算法是由Ethan Rublee, Vincent Rabaud, Kurt Konolige以及Gary R.Bradski在2011年一篇名为“ORB:An Efficient Alternative to SIFT...
  • 各种特征提取算子ORB(ORientedBrief): 论文Ethan Rublee and Vincent Rabaud and KurtKonolige and Gary Bradski, ORB:an efficient alternative to SIFT or SURF.点击下载论文 理论参考:...
  • 特征描述 简单描述 一般性描述 不变矩 ...Harris算子 定义和基本原理 角点函数的意义 openCV函数 SIFT算法 尺度空间极值检测 关键点定位 方向确定 关键点描述 ORB算法 OFAST提取特征点 rBRIEF特征描述
  • ORB与LBP、HOG

    2019-09-27 02:55:58
    这什么这里要将ORB和LBP放到一起说? 因为ORB当中特征点检测和描述子计算都有LBP的“影子”; ORB会在下一篇博客当中详细讨论,包括opencv3源代码。我们知道,一般地,opencv当中,成熟、稳定的算法都会直接给出...
  • ORB特征提取与配准

    2020-08-31 18:59:07
    Loading Images and Importing Resources %matplotlib inline import cv2 import matplotlib.pyplot as plt # Set the default figure size plt.rcParams['figure.figsize'] = [20,10] # Load the training image...
1 2 3 4 5 ... 20
收藏数 1,021
精华内容 408
热门标签
关键字:

orb算子