文章标题:SPHORB: A Fast and Robust Binary Feature on the Sphere
代码地址:https://github.com/tdsuper/SPHORB
文章地址:http://cic.tju.edu.cn/faculty/lwan/paper/SPHORB/SPHORB.html
作者之一万亮的主页,研究方向:三维重建、球面图像处理、目标跟踪等
前言:研究全景球面图像处理,可以跟踪万亮的主页。这篇2015年发表在IJCV上的文章比较经典,主要是对ORB进行改进,使之更好地处理全景球面图像,作者命名为SPHORB,实验证明取得的效果较好。但是局限性也有,经过我自己的实验,发现SPHORB的运行速度慢,耗时大约是ORB的4倍左右,并且目前的代码只支持1280*640分辨率的全景图像。
本博客对原论文进行一个简单的解读,抽取论文中一些重要的部分,方便理解代码原理。我在理解了SPHORB与FAST的大部分原理后,对SPHORB的代码进行了一些小改进,详细的请看此博客:SPHORB 代码修改记录
0.摘要
本文提出了一种新的快速、鲁棒的球形全景图像二值特征检测器和描述符SPHORB。与最先进的球形特征相比,我们的方法源于测地线网格,一种在气候建模中使用的几乎等面积六边形网格参数化的球体。它使我们能够直接构建细粒度的金字塔,并在六边形球面网格上构造健壮的特征,从而避免了昂贵的球面谐波计算及其相关的带宽限制。我们进一步研究了如何实现SPHORB特征的尺度和旋转不变性。大量的实验表明,SPHORB在精度、效率和对摄像机运动的鲁棒性方面始终优于其他现有的球形特性。SPHORB的优越性能也通过实际匹配测试得到了验证。
1.介绍
近十年来,广角球面全景图像(360度)对于普通用户来说,视图的获取越来越容易。这主要归功于图像拼接技术的发展和诸如ladybug相机等经济型全景成像系统的成熟。通过提供远超常规(平面)图像的视场,球面全景图像已成功应用于许多新的应用领域,包括在线街道级虚拟导航(Anguelov等人,2010;Zhao等人,2013)、城市尺度变化检测(Taneja等人,2013)、场景识别和视图检测。(Xiao等人,2012年)和3D场景重建(Micusik和Kosecka,2009年)。
然而,球面全景图像的体积大幅度增加,应用范围广,面临着许多计算机视觉任务中的一个基本问题——特征检测与匹配的研究远不如平面图像。在文献中,一些为平面图像设计的稳健特征和匹配算法已直接应用于展开的经纬度地图(Valgren和Lilienthal,2007年)或分段透视图(Micusik和Kosecka,2009年)。这些直观的方法或多或少会遇到与基础球面参数化相关的变形问题。最近一个著名的流尝试在球形域上构建筛状特征(Hansen等人,2007年、2010年;Hadj Abdelkader等人,2008年;Cruz Mota等人,2012年)。由于球面上的高斯滤波可以通过球面傅立叶变换作为一个扩散过程来进行,因此它们利用球面谐波在球面上构造尺度空间。从理论上讲,这些特征是可信的,并且可以有效地对摄像机姿态和位置的变化保持不变。然而,球形谐波通常需要昂贵的计算,并受到固有带宽限制,这大大削弱了它们处理大规模匹配问题的可行性。
近年来,计算机视觉社区在平面图像快速、稳健的特征检测与匹配方面取得了大量的成功进展,这与球面光学特征的滞后发展形成了鲜明的对比。一个具有代表性和令人兴奋的发展是二进制特征,如ORB(Rublee等人,2011年)、Brick(Leutenegger等人,2011年)和Freak(Alahi等人,2012年),它们仅仅利用局部邻域强度比较构造二进制字符串来描述特征点。平衡良好的性能使二元特性在最先进的图像匹配应用程序中获得流行。二元特征的主要优点是速度快(比最先进的速度快得多,例如sift(Lowe,2004年)和surf(Bay等人,2008年))、紧凑性(代码更短,内存消耗更少)和准确性(与sift和surf的精度相当甚至更好(Rublee等人,2011年;Alahi等人,2012年))。他们的成功激发了我们思考一个有趣的问题:是否有可能使用二进制特征快速检测和描述高清晰度球面斜视图像的强大关键点?显然,平面二元特征的所有拉伸性质在球面域中都是确定的。
在本文中,我们通过在球面上提出一种快速且鲁棒的二进制特征SPHORB来对这个问题给出肯定的答案。 我们的方法首次(据我们所知)是在统一参数化的球体域中直接检测和描述二进制关键点。 它依靠测地线网格,一种近似等面积的球面六角网格表示法,已成功地用作气候建模的全球地球参考(Randall等,2002)。 基于这个六边形球形网格,我们在球形六邻域系统中重新发明了FAST算法(Rosten和Drummond 2006; Rostenet等人2010)和ORB特征(Rublee等人2011),这产生了SPHORB,这是一个新的球形二元特征检测器和描述符。 我们进一步研究了如何实现SPHORB的尺度和旋转不变性。 总而言之,我们的主要贡献是:
- 用等弧细分网格构造了一个鲁棒的球面特征;通过对其几何性质的分析,证明了二进制特征的核心强度比较是有效和可行的
- 构建了一个尺度-旋转不变的球面FAST检测器,并且评估了它的性能
- 在球面上构造一个类似于ORB的描述子,包括球面关键点主方向的确定、高效计算球面二进制描述的方法
大量的实验验证了我们方法的优越性能。 结果表明,我们提出的SPHORB比球形SIFT更快,更鲁棒(Cruz-Mota等,2012)。 特别是,SPHORB在准确性、效率和鲁棒性方面始终优于包括球形SIFT以及将平面特征匹配方法应用于展开的全景图像的方法。 我们还将我们的方法应用于现实世界中的匹配任务,即两个球形全景图像之间的匹配以及球形全景图像和平面图像之间的匹配。 令人鼓舞的结果积极地支持提出的SPHORB特征和球形特征框架的潜力。
2(相关工作)、3(系统总览),跳过
4.Geodesic Grid for Spherical Features
4.1格网生成
从一个20面体开始构造,如下图a,它有20个三角面,12个顶点。每个面,用等弧细分的方法(如下图b),划分成更细的分辨率,然后新划分的顶点,就投影到单位球面上。接下来,构造以顶点为中心的Voronoi单元,每个单元由最靠近中心顶点的相邻点组成。最后,我们得到了由 N c N_c Nc个网格单元组成的测地网格,其中12个单元是与二十面体的12个顶点相对应的五边形,其余 N c − 12 N_c-12 Nc−12个单元都是六边形。
下图b的解释:等弧细分方案:生成一个球面三角形。其质心被视为采样的顶点。
注意,网格结构由所采用的细分方案专门确定。在我们的工作中,我们采用等弧细分(Williamson 1968),以实现各种可能的网格分辨率(上图b)(意思就是说,通过把弧划分成不同的段数,可以实现不同的分辨率,目前开源的代码只是实现的
1280
×
640
1280 \times 640
1280×640 )。具体来说,将连接二十面体的各个顶点的弧细分为n个段,并且将新的顶点(新的顶点就是图b中红色的点,图b中分成了3段)与大圆弧成对连接。 注意,相应的三个大圆在单个点上不相交。 计算所得三角形的质心,并将其作为采样的顶点。所以最终的网格数量
N
c
=
10
×
n
2
+
2
N_c = 10 \times n^2 + 2
Nc=10×n2+2 。上面已经解释了,为什么有12个五边形,其他的是六边形。
4.2格网属性
测地线网格具有良好的几何特性,有助于将其应用于球体上的二进制关键点检测。 首先,处于相同细分级别的所有网格单元都具有非常相似的立体角,这意味着这些单元同样重要。 其次,当网格分辨率足够精细时,相邻单元的中心以相似的测地距离分隔。 因此,我们可以安全地将局部邻域视为平面,并直接在平坦的测地网格上计算单元之间的平面距离,而不是球体上的测地距离。 此外,测地网格相当规则:仅有12个五边形,其他的都是六边形。 通过忽略五边形,我们可以在整个球体上执行相同的二进制测试。
由于球形全景图像通常表示为纬度-经度图和立方体图,因此我们进行了定量比较,以显示测地线网格的优势。 具体来说,我们分别根据像元面积的标准偏差和中间距离来评估前两个属性。 纬度-经度地图通过相等地细分纬度和经度来对球体进行参数化。 在立方体贴图中,球体被投影到立方体上,每侧定义一个90°视锥。 图2清楚地说明了测地线网格的优势,该网格在所有分辨率下的值均最小。(经纬度的方法没讲清楚?)
4.3计算网格和存储网格
给定以测地线网格表示的球形图像,我们必须知道如何对其进行计算以及如何将其存储在物理内存中。 在本文中,我们采用Randall等人提出的数据结构(2002)。 测地线网格被划分为五组,每组四个三角形(原来有20个三角面,每组4个,所以分成5组),它们具有相同的结构,并且可以通过旋转使其与任何其他三角形重合(图3a)。然后,我们将五个组展开到平面上,并得到五个由六边形组成的平行四边形(图3b)。 由于如上所述测地网格的距离偏差很小,我们将基于此扁平化的六边形网格(称为计算网格)检测并描述特征。 每个平行四边形很容易打包成适合物理内存的矩形。 我们将在此矩形网格上获取像素并为其建立索引,我们将其称为存储网格(图3c)。
4.3.1邻域获取
基于存储网格,我们将像素的邻域定义为以下集合
r r r 是邻域像素的半径 [ s , t ] T [s,t]^T [s,t]T 它们是相邻像素相对于中心像素的坐标偏移。相邻像素的数量 N ( r ) = 3 r 2 + 3 r + 1 N(r)=3r^2+3r+1 N(r)=3r2+3r+1 。一个具有不同半径的像素的邻域在计算网格中形成规则的同心六边形,在存储网格中形成扭曲的同心六边形(图4)。 为了找到边界单元的邻域,为方便起见,我们扩展了存储网格(有关详细信息,请参见第5.4.1节)。
4.3.2两个网格之间的坐标变换
a(计算网格)和b(存储网格)上的像素邻域和局部坐标的图示
用图b的正交坐标系和图a的倾斜坐标系去索引像素点,是等价的。但是,我们检测特征的时候,还是要在图a中用正交的坐标系,图a中的黑色的轴。通过简单的数学知识,我们知道,倾斜坐标系的基向量 v 1 , v 2 v_1, v_2 v1,v2 在正交坐标系中是这样表示的: v 1 = [ 1 , 0 ] T v_1=[1,0]^T v1=[1,0]T 和 v 2 = [ 1 / 2 , 3 / 2 ] T v_2=[1/2,\sqrt{3}/2]^T v2=[1/2,3/2]T .
计算网格(图a)可以通过给定一个存储网格(图b)和一个变换矩阵得到,矩阵如下:
T
=
[
v
1
,
v
2
]
=
[
1
1
2
0
3
2
]
\mathbf{T}=[\mathbf{v_1},\mathbf{v_2}] =\left[ \begin{matrix} 1 & \frac{1}{2} \\ 0 & \frac{\sqrt3}{2} \end{matrix} \right]
T=[v1,v2]=[102123]
应该注意的是,测地线网格仍然受到小的不均匀变形的影响。 朝向边缘,网格更失真。这似乎表明非常量的变换矩阵有助于解决失真问题。 但是,这不是一件容易的事,因为将有许多不同的非常量的变换矩阵,并且它们仍然依赖遭受近似误差的局部平面假设。 另一方面,如我们的实验所示,常数的变换矩阵T足以达到高速性能和良好的匹配精度。
5.SPHORB算法
在本节中,我们将介绍如何在测地线上构造球形FAST检测器和球形rBRIEF描述符,并注意旋转不变性。
5.1球面FAST
类似于平面FAST,此处取第三层的邻域,共18个六边形像素。
若邻域有10~18个像素的亮度比中心点k明显更亮,那么把k作为候选角点,再用非极大值抑制去除不稳定的角点。下图就是当用不同个数的邻域点作判断的结果,其结果表明,选10最为合理,速度又快、精度又好。
然后再构造金字塔,使其具有尺度不变性。
5.2球面rBRIEF
上面的是检测子,这个是描述子。检测子是用来检测特征点的,描述子是用来匹配的。由于在球面上,所以普通的平面描述子并不适用(经纬度不同,畸变不同。纬度越高,畸变越大。高纬度的一个球面像素,展开到平面上后,会被拉伸成很多个像素)。平面BRIFE详解。
为了避免噪声影响,和平面BRIEF是一样的,用高斯核进行平滑,但是在此处,它用了一个六边形的高斯核。选 patch 的方法,也是训练出来的。参考(Rublee et al.2011)中的类似训练方案,我们从SFAST训练中使用的图像集中训练了最佳采样模式S(就是我们据说的 patch )。 最优patch包含256个测试对。 这将导致每个特征向量的长度为256的位串,占用32字节的内存。
5.3 旋转不变性
尽管球面图像可以捕获高达360°的视场环境,但至少在两种情况下,球面特征的旋转不变性是必不可少的。 为了使平面图像与球形全景图匹配,平面图像可以位于球体内的任何位置或方向上。 其次,在稀疏采样的球形全景序列中(例如在Google StreetView中),相机运动可能会使对象严重改变其球形位置(和比例)。
5.3.1 特征点的主方向估计
方位角为局部横轴在k处的旋转角度(如图6中红色短箭头所示)。由于局部横轴在球面上是方向变化的,合理的方法是在球面上选择一个通用参考进行方位计算。在我们的工作中,我们选择了南极作为通用参考点,并考虑了连接重点到南极点的弧线与投射在球体上的局部横轴之间的固有球角(单位角)(见黄色角)。得到的方向角就变成了
方向θ是相对于局部水平轴在k处的旋转角度(请参见图6中的红色短箭头)。 由于局部水平轴在球的方向上是不断变化的,因此一种合理的方法是在球上选择通用参考进行方向计算。 在我们的工作中,我们选择南极作为通用参考,并考虑到将关键点连接到南极的弧与投影在球体上的局部水平轴之间的固有球面角(φ)(请参见黄色角)。 最终的定向角变为
θ
′
=
θ
−
ϕ
\theta{'}=\theta-\phi
θ′=θ−ϕ
5.4 实现细节
5.4.1边界扩展
不太重要,暂时不看
5.4.2处理五边形
前面说到,在20面体的12个顶点上,用五边形,所以有12个五边形。分下列情况,如下图,分别在:没有五边形,五边形就在中间,五边形在邻域的第一层,五边形在邻域的第二层。
邻域中有五边形会有什么影响?看图就知道,邻域的像素个数会不一样,主方向的计算也会不一样……下次再具体看。核心部分已经理解了,代码基本可以看懂了。
6(实验)、7(结论),跳过