ORB特征笔记

ORB特征提取算法结合了OrientedFAST和RotatedBRIEF,通过增加方向信息和使用二进制描述符实现快速特征检测和描述。算法包括构造高斯金字塔、特征点检测、计算主方向和构建rBRIEF描述符。ORB的优势在于其旋转不变性和高效性,适用于图像匹配和计算机视觉应用。
摘要由CSDN通过智能技术生成

简介  

      ORB = Oriented FAST  + Rotated BRIEF

        前面的Oriented FAST说明的是它的关键点的选取是一种改良过的FAST,在FAST的基础上加了方向信息;后面的Rotated BRIEF是指特征描述符使用BRIEF描述子(Binary Robust Independent Elementary Feature),是一种速度极快的二进制描述子。

改良的FAST角点检测

        在前面笔记中已经记录了FAST角点检测的基本原理。

FAST角点检测算法笔记_亦枫Leonlew的博客-CSDN博客FAST算法是一种用于角点检测的算法,全称是Fetures from Accelerated Segment Test。该算法的原理是提取图像中的监测点,以该点为圆心的一定范围内的像素点来检测判断点是否为角点。直白的理解是一个像素点周围如果有一定数量的像素点与该点像素值差别较大,则认为其是角点。https://blog.csdn.net/vivo01/article/details/131811118?spm=1001.2014.3001.5501

        oFAST主要改良的点是增加了关键点的方向描述,还有就是增加了图像金字塔。

        1. 构造高斯金字塔

            ORB中的图像金字塔和SIFT中的多尺度高斯金字塔不同,每层只有一副图。金字塔共有n层,第s层的尺度为:\sigma_s = \sigma_0^s

        \sigma_0是初始尺度,默认值1.2。原图在第0层。第s层的图片尺寸为:(H/\sigma_s)*(W/\sigma_s)

        2. 特征点检测

            在不同尺度的图像上使用FAST算法检测特征点 。FAST在边缘上有较大的响应,ORB中利用了Harris角点响应度量来排序FAST的关键点。对于目标为N个关键点的情况,首先将阈值设置得足够低以获取比N多的关键点,然后根据Harris角点响应值排序,选取前N个关键点。

        3. 计算特征点主方向

             使用灰度质心法计算出以特征点中心O为圆心,半径为r的圆形区域内的质心点C。 特征点的主方向是从O到C的向量\overrightarrow{OC}的方向。

                灰度质心的位置点C为:

C = (\frac{m_{10}}{m_{00}},\frac{m_{01}}{m_{00}})

                其中,m_{pq}的计算方法为:

m_{pq} = \sum\limits_{x,y}x^py^qI(x,y)\ \ \ \ p,q = \{0,1\}

                因此:

m_{00} = \sum \limits_{x,y}I(x,y)

m_{10} = \sum \limits_{x,y}xI(x,y)

m_{01} = \sum \limits_{x,y}yI(x,y)

                特征点的主方向角度\theta为:

\theta = tan^{-1}(\frac{m_{01}}{m_{10}}) 

构建rBRIEF描述符

        经过oFAST得到了关键点和其主方向后,接下来就要构建出关键点的特征描述符了。ORB有旋转不变性,在构建BRIEF描述符之前,会将特征点的邻域旋转到特征点的主方向上。

BRIEF特征描述符

        BRIEF的核心思想是在关键点P的周围选取N个点对,然后把这N个点对的边角结果组合起来作为该关键点的描述子。Brief算法生成的是一种二值化的描述子,匹配的时候只需要使用简单的汉明距离比对即可,使用bits之间的异或操作就能完成。因此它的时间空间代价都比较低,效果也还不错。

         1. 滤波:对原图滤波,去除部分噪声。

         2. 选取点对:以关键点为中心,选取一定大小的图像窗口p,在窗口内选择一对点,比较两者像素值的大小,进行赋值,二值测试函数\tau定义如下:

        \tau(p;x,y) = \left\{\begin{matrix} 1 : p(x) < p(y)\\ 0:p(x) \geq p(y) \end{matrix}\right.

                其中,p(x)表示像素x在窗口p内的像素值。

         3. 在窗口p中随机选取N(128,256,512,默认为256) 对随机点对,重复第2步进行二进制赋值,最后得到一个N维的二进制描述子,这个结果向量被定义为:

f_n(p) := \sum \limits_{1\leq i \leq n}2^{i-1}\tau(p;x_i,y_i)

         这个式子其实直白理解就是,每一个bit表示了一个点对的对比结果。

Brief算法中点对的选取方法

        对于SxS的区域内选取点对,原始Brief论文中做了5种方法:

        1.(X,Y) ~ i.i.d(独立同分布)。服从均匀分布U(-\frac{S}{2},\frac{S}{2})(x_i,y_i)位置均匀分布在块内。

        2. (X,Y) ~ i.i.d(独立同分布)。服从高斯分布G(0, \frac{1}{25}S^2):采样带内服从各向同性的高斯分布。

        3. X ~ i.i.d(独立同分布),服从高斯分布G(0, \frac{1}{25}S^2);Y~ i.i.d(独立同分布),服从高斯分布G(x_i, \frac{1}{100}S^2)。 采样分两步,第一步以原点为中心的高斯分布中采样出x_i,然后再以x_i为中心,采样得到第二个位置。超出块的范围的位置会被钳在块的边缘处。

        4. 在空间量化极坐标下的离散位置随机采样;

        5.  \forall i: x_i = (0,0)^Tx_i固定为原点,y_i采样自粗粒度的极坐标网格的离散位置上。

        上述5种采样方式的示意图如下:

         在旋转不是非常厉害的图像里,用BRIEF生成的描述子的匹配质量非常高。

Steered BRIEF

           原始的BRIEF算法,不具有旋转不变性,当平面发生非常小角度的旋转后,其匹配质量会大幅下降。下图是各种描述子在平面旋转角度和算法对应的正常有效点(inliers)的百分比示意图:

         Steered BRIEF会根据关键点的方向进行旋转,然后再计算Biref描述符。对于特征点邻域内的n个点对的集合:

S = \begin{pmatrix} x_1,...,x_n\\ y_1,...,y_n \end{pmatrix}

        通过一个旋转角度为\theta对应的旋转矩阵R_\theta做变换,定义出旋转后的点对集合S_\theta:

S_\theta = R_\theta S

         因此steered BRIEF算子变成了:

g_n(p,\theta) := f_n(p)|(x_i,y_i) \in S_\theta

         这个函数定义实际就是对旋转后的点对儿进行对比生成Biref描述符的计算过程。

rBRIEF

        steered BRIEF解决了BRIEF不具有旋转不变性的问题,但它在描述符的可区分性上。描述符本身是关键点的特征信息,在匹配的时候可以用来区分不同的关键点。如果描述符的可区分性变差,则不同的关键点相似度会变高,不容易找到对应的关键点,误匹配率会变大。论文中对100K个采样的关键点用不同的方法生成的特征描述符的均值分布:

         图中X轴表示到均值0.5的距离。y轴则是对应BRIEF描述符中的特征bits数量。

        注:网上参考的所有文章几乎都是说y轴是特征点数量,这点我持保留意见,虽然最终要表达的意思是差不多的。论文中描述这个图表的原话是:

        “the spread of means for a typical Gaussian BRIEF pattern of 256 bits over 100k sample keypoints”。

        个人感觉应该是根据100K个采样点统计后按照概率所计算的描述符中某个bit feature列计算均值,然后按照这个均值到0.5的距离进行分段统计。假设距离为0的有140个,表示的是这256个列中,有140 bit feature列的均值就是0.5。如下图所示:

        以上仅为个人理解,大家可以去看看原始论文,或者去参看一下“参考资料”中最后一个链接。

        为什么X轴要用到均值0.5的距离?因为我们得到的描述符都是二值的(0,1),对于多个0和1组成的串。如果计算出的均值是0.5,则表示这个串中0和1的数量是相等的。如果0更多,则均值偏向0;如果1更多,则均值偏向1。后面两种情况计算距离都会偏离0.5,表示这一组数据中的0或1更多,因此对应的特征值就越相似,越难以区分。

        为了解决steered BRIEF的这个问题,ORB中引入了rBRIEF。它不使用BRIEF原始论文中选取点对儿的5种方式的任何一种,而是通过统计学习得到一种比较好的选取点集的方法。

        首先创建一个300K个关键点的训练集。然后在一个31x31大小的块中做二值测试。每个点对儿是块内部两个5x5的子窗口,一个子窗口相当于一个像素,其灰度值是这个子窗口内所有像素灰度值的均值,可以通过积分图像快速求得。我们记块的宽度w_p = 31,子窗口的宽度w_t = 5

        因此,子窗口总数量为N = (w_p - w_t +1) * (w_p * w_t + 1) = 729,计算得到不同的选取点对儿的方式为:M = C_N^2 = 265356

        注:原始论文中N = (w_p - w_t)^2M = 205590。原始论文中N的值并没有覆盖全子窗口,M的值,论文中是有去除一些重叠的区域,但没有找到重叠区域是如何定义的。如果哪位大神清楚请帮忙说明一下。本文中的N和M来自网上的参考资料,更容易理解一点,N取的是全部子窗口(会加1),M按照组合方式计算(不考虑去掉重叠区域)。

        rBRIEF算法的最终目的是从这M种选取点对儿方式中找出最优的256中选择方法。算法的流程如下:

        1. 在每个样本点的31x31的邻域内,用不同的点对儿选取方式做二值测试,每个样本点对应M个结果。结果是一个300K * M的矩阵,对矩阵每一列计算均值:

        2. 根据每一列的均值到0.5的距离对列进行重新排序,得到T(下图为一种可能出现的示意图):

         3. 贪心搜索:

                a. 将T的第一列取出放到R中;

                b. 从T中取下一列,将它和R中的所有的列进行比较。如果相关性大于某个阈值则丢弃,否则将这一列放入R中。

                c. 重复b步骤,直到R中选出了256个列。如果最终结果少于256个,则修改阈值再试一次。

        经过这几步,最终就能得到256个点对儿的选取方法,结果就是rBREIF。

 参考资料

https://www.researchgate.net/publication/221111151_ORB_an_efficient_alternative_to_SIFT_or_SURFhttps://www.researchgate.net/publication/221111151_ORB_an_efficient_alternative_to_SIFT_or_SURFhttps://web.stanford.edu/class/cs231m/references/harris-stephens.pdfhttps://web.stanford.edu/class/cs231m/references/harris-stephens.pdfhttps://www.researchgate.net/publication/222485725_Measuring_Corner_Propertieshttps://www.researchgate.net/publication/222485725_Measuring_Corner_Propertieshttps://www.researchgate.net/publication/221304115_BRIEF_Binary_Robust_Independent_Elementary_Featureshttps://www.researchgate.net/publication/221304115_BRIEF_Binary_Robust_Independent_Elementary_Features02-p2-rbrief_哔哩哔哩_bilibili02-p2-rbrief是02-ORB特征提取的第2集视频,该合集共计2集,视频收藏或关注UP主,及时了解更多相关视频内容。https://www.bilibili.com/video/BV1PW411M73t?p=2&vd_source=474bff49614e62744eb84e9f8340d91ahttp://media.ee.ntu.edu.tw/courses/cv/21S/slides/cv2021_lec03.pdfhttp://media.ee.ntu.edu.tw/courses/cv/21S/slides/cv2021_lec03.pdf

特征点匹配——ORB算法介绍_orb匹配算法_lhanchao的博客-CSDN博客《ORB: an efficient alternative to SIFT or SURF》是Rublee等人在2011年的ICCV上发表的一篇有关于特征点提取和匹配的论文,这篇论文介绍的方法跳出了SIFT和SURF算法的专利框架,同时以极快的运行速度赢得了众多青睐。下面我简单介绍一下ORB算法的流程。ORB算法的主要贡献如下: (1)为FAST算法提取的特征点加上了一个特征点方向; (2)使_orb匹配算法https://blog.csdn.net/lhanchao/article/details/52612954

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

亦枫Leonlew

希望这篇文章能帮到你

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值