全景图像拼接——ORB特征点

一、项目名称:全景图像拼接

二、语言、库和开发环境:C++、opencv249、VS2013

三、参考

1:博客https://blog.csdn.net/zhaocj/article/details/78799194?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task

      2:计算机视觉中的多视图几何

四、包含原理:

1、特征点

2、2D射影变换

3、相机参数评估

4、拼接缝的查找

5、图像融合

 

4.1 ORB特征点

1、算法介绍

ORB(Oriented FAST and Rotated BRIEF)是一种快速特征点提取和描述的算法。ORB算法比sift算法效率高两个数量级,ORB算法综合性能在各种测评里是最好的。

 

作者:Ethan Rublee, Vincent Rabaud, Kurt Konolige以及Gary R.Bradski

时间:2011年

论文:“ORB:An Efficient Alternative to SIFT or SURF”

 

ORB算法分为两部分,分别是特征点提取和特征点描述。

特征提取是由FAST(Features from  Accelerated Segment Test)算法发展来的,特征点描述是根据BRIEF(Binary Robust Independent Elementary Features)特征描述算法改进的。ORB特征是将FAST特征点的检测方法与BRIEF特征描述子结合起来,并在它们原来的基础上做了改进与优化。

ORB算法的速度是sift的100倍,是surf的10倍。

 

1.1 Fast特征提取

ORB算法的特征提取是由FAST算法改进的,这里成为oFAST(FASTKeypoint Orientation)。也就是说,在使用FAST提取出特征点之后,给其定义一个特征点方向,以此来实现特征点的旋转不变形。FAST算法是公认的最快的特征点提取方法。FAST算法提取的特征点非常接近角点类型。oFAST算法如下:

https://img-blog.csdn.net/20160922184809502?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center

 

图1  FAST特征点判断示意图

 

步骤1:建立金字塔,实现特征点的多尺度不变性。

设置一个比例因子scaleFactor(opencv默认为1.2)和金字塔的层数nlevels(opencv默认为8)。将原图像按比例因子搭建成nlevels幅图像的金字塔。

图像尺度为:scale=1scaleFactornlevel

代码

其中,firstlevel为0,level从0到8.

图像的分辨率为 sz*scale+64,sz为图像的原始分辨率

 

步骤二:Fast特征点检测

步骤三:关键点滤波,去除所有小于图像边缘大小的关键点

步骤四:计算特征点的响应强度:

步骤五:在金字塔每层挑选出响应值最大的featureNum个特征点

每一层特征点的数目为:

步骤六:计算特征点的方向

ORB算法提出使用矩(moment)法来确定FAST特征点的方向。也就是说通过矩来计算特征点以r为半径范围内的质心,特征点坐标到质心形成一个向量作为该特征点的方向。矩定义如下:

    https://img-blog.csdn.net/20160922190456920?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center

其中,I(x,y)为图像灰度表达式。该矩的质心为:

https://img-blog.csdn.net/20160922190511182?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center

假设角点坐标为O,则向量的角度即为该特征点的方向。计算公式如下:

https://img-blog.csdn.net/20160922190523651?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center

步骤七、特征点描述

1)为了增加特征描述符的抗噪性,算法首先需要对图像进行高斯平滑处理。

2)steered BRIEF(旋转不变性改进)

在使用oFast算法计算出的特征点中包括了特征点的方向角度。假设原始的BRIEF算法在特征点SxS(一般S取31)邻域内选取n对点集。

https://img-blog.csdn.net/20160922190623485?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center

经过旋转角度θ旋转,得到新的点对,

https://img-blog.csdn.net/20160922190634745?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center

3)计算二进制串的特征描述符。在一个特征点的邻域内,选择n对像素点pi、qi(i=1,2,…,n)。然后比较每个点对的灰度值的大小。如果I(pi)> I(qi),则生成二进制串中的1,否则为0。所有的点对都进行比较,则生成长度为n的二进制串。一般n取128、256或512,opencv默认为256。

Opencv中固定选取512个点,总共比较32*8=256次,dsize为32,每8次的结果以二进制码形式构成一个字节。