ORB特征提取和匹配

  • 1 什么是ORB特征
  • 2 FAST关键点
  • 3 尺度不变性
  • 4 旋转不变性
    • 4.1 灰度质心法
    • 4.2 rBRIEF描述子
      • 4.2.1 BREIF描述子
      • 4.2.2Hamming距离
      • 4.2.3 rBRIEF描述子
  • 5 小结

1 什么是ORB特征

特征是图像信息的一种表达方式,我们可以把角点、边缘和区块都可以看作图像中有代表性的地方,我们发现,图像中的角点、边缘相比于区块更加“特别”,一种直观的提取特征的方式就是在不同的图像间辨认角点,确定它们的对应关系。在这种做法中,角点就是所谓的特征。角点的提取算法有很多,例如Harris角点、FAST角点、GFTT角点等等,然而ORB(Oriented Fast and Rotated BRIEF)是Oriented Fast + Rotated BRIEF的缩写,是目前最快速稳定的特征点检测和提取算法。

同一幅图像同时提取约1000个特征点的情况下:

检测器 ORB SURF SIFT
一帧耗时(ms) 15.3 217.3 5228.7

2 FAST关键点

算法步骤:
1、选取像素点p,假设他的亮度为lp;
2、设置一个阈值T(比如lp的20%);
3、以像素p为中心,选取半径为3的圆上的16个像素点;
4、假如选取的圆上,有连续的N个点的亮度大于lp+T或者小于lp+T,那么像素p可以被认为是特征点;(N通常取12即FAST-12,其他常用的N取值为9或者11,他们分别被称为FAST-9和FAST-11)
5、循环以上4步,对每个像素执行相同操作。

在FAST-12算法中,为了更高效,增加了一项预测试的操作,以快速地排除绝大多是不是角点的像素点:
对于每个像素,直接检测领域圆上第1,5,9,13上的亮度,只有当这4个中的3个的亮度同时大于lp+T或者小于lp+T,才有可能是角点,否则直接排除。

原始的FAST角点经常出现”扎堆“的现象,为了解决这个问题,可以采用非极大值抑制的算法:

  • 假设p,qp,qp,q两点相邻,分别计算出两个点与其周围16个像素点之间的差分和为VVV;

  • 去除VVV值较小的点,即把非最大的角点抑制掉。

缺点及解决办法:

  • 尺度不变性:可以通过金字塔解决;
  • 旋转不变性:可以用质心标定方向解决。

3 尺度不变性

算法步骤:
1、对图像做不同尺度的高斯模糊;
2、对图像做降采样;
3、对每层金字塔做FAST特征点检测;
4、NNN副不同比例的图像提取出的特征点总和作为这幅图像的FAST特征点。

4 旋转不变性

旋转不变性是通过灰度质心法计算出特征方向,在描述子中利用这一角度,消除由于旋转带来的影响。

4.1 灰度质心法

1、在一个小的图像块BBB中,定义图像块的矩为:
mpq=∑x,y∈BxpyqI(x,y)p,q={0,1}m_{pq} = \sum_{x,y\in B} x^{p}y^{q}I(x,y)\ \ \ \ \ \ \ p,q\ =\ \{0,1 \} mpq​=x,y∈B∑​xpyqI(x,y)       p,q = {0,1}

2、通过矩可以找到图像块的质心:
C=(m10m00,m01m00)C\ =\ (\frac{m_{10}}{m_{00}},\frac{m_{01}}{m_{00}} ) C = (m00​m10​​,m00​m01​​)
3、连接图像块的几何中心OOO与质心CCC,得到一个向量OC→\overrightarrow{OC}OC,于是特征点的方向可以定义为:
θ=arctan(m01/m10)\theta\ = \ arctan(m_{01}/m_{10}) θ = arctan(m01​/m10​)
在公式中,I(x,y)I(x,y)I(x,y)表示像素坐标(x,y)(x,y)(x,y)处的灰度值;m10m00=∑x,y∈BxI(x,y)∑x,y∈BI(x,y)\frac{m_{10}}{m_{00}}=\frac{\sum_{x,y\in B} xI(x,y)}{\sum_{x,y\in B} I(x,y)}m00​m10​​=∑x,y∈B​I(x,y)∑x,y∈B​xI(x,y)​是xxx加权的总量与总和相比显示处xxx在图像的那一列的时候像素值比较大,代表了图像像素在xxx方向上的偏重,即是质心的xxx坐标;同样的,m01m00=∑x,y∈ByI(x,y)∑x,y∈BI(x,y)\frac{m_{01}}{m_{00}}=\frac{\sum_{x,y\in B} yI(x,y)}{\sum_{x,y\in B} I(x,y)}m00​m01​​=∑x,y∈B​I(x,y)∑x,y∈B​yI(x,y)​代表了图像像素在yyy方向上的偏重,即是质心的yyy坐标。

4.2 rBRIEF描述子

rBRIEF特征描述是在BREIF的基础上加入旋转因子改进的,下面首先介绍BREIF描述子的算法原理。

4.2.1 BREIF描述子

BRIEF算法计算出来的是一个二进制串的特诊描述符,它是在一个特征点的领域Path内,通过一种选定的方式来挑选N个点对,然后通过对每个点对(p,q)(p,q)(p,q)比较这两点的亮度值,如果I(p)>I(q)I(p)>I(q)I(p)>I(q)则这个点对生成的二进制串中一个值为1,如果I(p)≤I(q)I(p)≤I(q)I(p)≤I(q)则对应二进制串中的值为0。一般的,N取128、256或512,OpenCV默认为256,并且为了增加描述子的抗噪性,算法首先需要对图像进行高斯平滑处理。

关于点对的选择,假设我们在特征点的领域块S×SS×SS×S内选择N个点对(p,q)(p,q)(p,q),Calonder的实验中测试了5种采样方法:

  • 在图像块内平均采样;
  • ppp和qqq都符合(0,125S2)(0,\frac{1}{25}S^{2})(0,251​S2)的高斯分布;
  • ppp符合(0,125S2)(0,\frac{1}{25}S^{2})(0,251​S2)的高斯分布,而qqq符合(0,1100S2)(0,\frac{1}{100}S^{2})(0,1001​S2)的高斯分布;
  • 在空间量化极坐标下的离散位置随机采样;
  • 把ppp固定为(0,0)(0,0)(0,0),qqq在周围平均采样;

下面是以上5种采样方法的结果示意图:

论文指出,第二种方法可以取得较好的匹配结果。

经过上述步骤,我们可以得到每个特征点表示的一串二进制编码。

4.2.2Hamming距离

汉明距离是使用数据阐述差错制控制编码里面的,汉明距离是一个概念,它表示两个(相同长度)字对应位不同的数量,我们以d(x,y)d(x,y)d(x,y)表示两个字x,yx,yx,y之间的汉明距离。对两个字符串进行异或运算,并统计结果为1的个数,那么这个数就是汉明距离。

  • 两个特征编码对应bit位上相同元素的个数小于128的,一定不是配对的;
  • 一幅图上特征点与另一幅图上特征编码对应bit位上相同元素的个数最多的特征点配成一对。
    其实就是按位求异或的过程。(相同为0,不同为1)
A B P
0 0 0
0 1 1
1 0 1
1 1 0

所以,对于BRIEF来说,描述子里不包含旋转属性,一旦当匹配的图像有稍微大的旋转角度,按照Hamming算法,匹配度将大幅下降。

4.2.3 rBRIEF描述子

首先,进行前期的优化:

1、采用积分图像来进行平滑;
2、在特征点的31×31的领域内,随机产生点对,并以随机点为中心,取5×5的子窗口;
3、比较两个随机点的子窗口内25个像素的大小进行编码。(而不仅仅是两个随机点了)

其次,增加了旋转不变性:

  • 对于任意特征点,在31×31领域内位置为(xi,yi)(x_i,y_i)(xi​,yi​)的nnn对点集,可以用2×n2×n2×n的矩阵来表示:

S=(x1,...,xny1,...,yn)S=\left( \begin{matrix} x_1, & ... & ,x_n \\ y_1, & ... & ,y_n \end{matrix} \right) S=(x1​,y1​,​......​,xn​,yn​​)

  • 利用FAST求出的特征点主方向θ\thetaθ和对应的旋转矩阵RθR_\thetaRθ​,计算出来的SθS_\thetaSθ​来代表SSS:

θ=arctan(m01/m10)\theta\ = \ arctan(m_{01}/m_{10}) θ = arctan(m01​/m10​)
S=[cosθ−sinθsinθcosθ]S=\left[ \begin{matrix} cos\theta & -sin\theta \\ sin\theta & cos\theta \end{matrix} \right] S=[cosθsinθ​−sinθcosθ​]
Sθ=RθSS_\theta = R_\theta S Sθ​=Rθ​S

  • 计算旋转描述子(steered BRIEF)

gn(p,θ):=fn(p)∣(xi,yi)∈Sθg_n(p,\theta):=f_n(p)|(x_i,y_i)\in S_\theta gn​(p,θ):=fn​(p)∣(xi​,yi​)∈Sθ​

其中,fn(p):=∑i≤i≤n2i−1(p;xi,yi)f_n(p):=\sum_{i≤i≤n}2^{i-1}(p;x_i,y_i)fn​(p):=∑i≤i≤n​2i−1(p;xi​,yi​)为BRIEF的描述子。

steered BRIEF得到的描述子具有旋转不变性,但是描述子的相关性却不如原始的BRIEF算法,rBRIEF没有采用原始5种去点对的方法,而是通过机器学习的方法重新选择了点对集合。
至此,ORB的优化就结束了。

5 小结

  • FAST是用来寻找特征点的,ORB在FAST的基础上通过金字塔、灰度质心标定解决了尺度不变和旋转不变,即oFAST;
  • BRIEF是用来构造描述子的,ORB在BRIEF的基础上通过引入oFAST的选择角度和机器学习解决了选择特性和特征点难以区分的问题。
  • 最终,通过计算Hamming距离计算描述子的距离,即两特征之间的相似程度。

参考文献
[1] 《视觉SLAM十四讲从理论到实践》 高翔,张涛

ORB特征提取和匹配相关推荐

  1. 3D视觉(四):ORB特征提取与匹配

    3D视觉(四):ORB特征提取与匹配 根据维基百科的定义,图像特征是一组与计算任务相关的信息,计算任务取决于具体的应用.简而言之,特征是图像信息的另一种表达形式. 数字图像在计算机中以灰度值矩阵的方式 ...

  2. Opencv实现Sift、Surf、ORB特征提取与匹配

    在opencv3中,这三个算子都转移到一个名为xfeature2d的第三方库中,而在opencv2中这三个算子在nonfree库中. 关于在vs下配置opencv可参考我转载的另外一篇文章.注意版本号 ...

  3. ORB-SLAM2从理论到代码实现(三):ORB特征提取和匹配理论和代码详解

    1. 理论知识 特征点由关键点(Key-point)和描述子(Descriptor)两部分组成.ORB特征点(Oriented FAST and Rotated BRIEF)是由Oriented FA ...

  4. 特征匹配中OpenCV Dmatch类的用法解析以及非常详细的ORB特征提取与匹配解析

    首先说明一点,在SLAM中进行特征提取和匹配时,需要注意使用的OpenCV版本,在使用OpenCV2.x版本时,可以创建特征对象如下所示(省略了参数表): ORB orb; SURF surf; SI ...

  5. ORB词袋特征提取和匹配

    一.预备知识点 Bag-of-Words ORB特征提取与匹配 5. Bag of Word 作用: 加速匹配 和 回环 在跟踪线程里面 一进来就要对每帧进行词袋的提取 词袋模型是由Node和Word ...

  6. 【理解】ORB特征提取与ORBSLAM特征匹配简要剖析

    目录 ORB特征提取 优势: 经典FAST特征提取: 经典的BRIEF描述子: ORB特征提取的改进: 如何在FAST检测的基础上维持特征点的尺度不变性? 如何在FAST检测的基础上维持特征点的旋转不 ...

  7. SLAM从0到1——ORB特征提取及特征匹配

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 学习3D视觉核心技术,扫描查看介绍,3天内无条件退款 圈里有高质量教程资料.可答疑解惑.助你高效解决问 ...

  8. ORB算法——特征提取特征匹配

    特征提取 Abstract ORB(Oriented Fast and Rotated Brief),可以用来对图像中的关键点快速创建特征向量,这些特征向量可以用来识别图像中的对象. 其中,Fast ...

  9. 全面综述:图像特征提取与匹配技术

    作者:William 来源:自动驾驶全栈工程师知乎专栏,https://www.zhihu.com/people/william.hyin/columns 特征提取和匹配是许多计算机视觉应用中的一个重 ...

最新文章

  1. 机器学习类别/标称(categorical)数据处理:独热编码(One Hot Encoding)
  2. Facebook开源ptr:在Python环境中并行运行单元测试
  3. 更改zabbix-server的端口
  4. 关于easyui中的editIndex
  5. 如何将SP1集成到Office 2007安装包
  6. .NET Core 下使用 Exceptionless 记录日志
  7. C++ string字符串常见操作函数
  8. tts android,Android系统自带的TTS实现语音播报
  9. Redis基础知识详解(非原创)
  10. qpython3h手机版怎么发短信_python如何使用腾讯云发送短信
  11. 第十五章 第十五章 异步A3C(Asynchronous Advantage Actor-Critic,A3C)-强化学习理论学习与代码实现(强化学习导论第二版)
  12. Airtest网易自动化测试工具初探(一)
  13. 矩阵分析及应用(1-2章)
  14. Easy3D 样条曲线拟合
  15. React脚手架使用less
  16. dlibdotnet 人脸相似度源代码_HAAR与DLib的实时人脸检测之实现与对比
  17. Android原生框架--Xui使用
  18. python实现数模转换_树莓派:PCF8591数模转换模块的使用
  19. 2021年金属非金属矿山(地下矿山)主要负责人模拟考试题库及金属非金属矿山(地下矿山)主要负责人复审模拟考试
  20. linux系统安装绿色版mysql

热门文章

  1. RabbitMQ-工作模型
  2. 美团点评前端无痕埋点实践
  3. 中国迪士尼商店全球独家发售唐老鸭85周年珍藏版系列公仔
  4. 听张方方学长分享经验有感
  5. PHP 实现图片防盗链,Nginx实现图片防盗链功能
  6. visio画图旋转任意角度,不保留白边保存pdf格式
  7. 计算机网络知识总结:有关IP地址、子网掩码、网络号、主机号、网络地址、主机地址以及ip段/数字的概念及笔试题
  8. 如何快速从几千封简历中筛选出适合的简历 ?
  9. 牛客网 2018校招真题 招商银行信用卡 整数成绩最大化
  10. 梦幻诛仙手游服务器维护中,《梦幻诛仙手游》12月20日凌晨5点~8点停服维护公告...