转自 http://blog.csdn.net/cicibabe/article/details/50728748
翻译:2016年2月24日 Taylor Guo
摘要:视觉SLAM可以很好地构建地图,追踪相机。但这些地图不能用于本地化,不同的相机,甚至是同一个相机,但可以从不同的视角观察。这些局限源自于缺乏可以识别的地图容量。我们将介绍一种基于关键帧的SLAM系统,可以让地图复用,用可识别的特征点构建地图。我们的系统在一个不变的视角下实时执行本地化操作和闭环控制。我们也加入了消减机制减少地图中冗余的关键帧。这个系统有足够的能力复用地图,并可以用于识别系统。
相机的位姿估计和真实世界的几何重构的主要问题是观测问题,这在mono-SLAM中总所周知。单一相机的问题比较麻烦,因为深度图无法获得,而又需要多维几何来解决问题。立体相机和RGB-D相机在某种程度可以提供深度图,但单目技术仍然需要。
单目SLAM技术已经发展了较长时间,从最初的滤波方法到最近的基于关键帧的SLAM系统。最新的研究表明,基于关键帧的技术比滤波方法更精确。最具代表性的是PTAM,被认为是单目的标志。尽管方案成熟、PTAM算法性能优良,单目SLAM应用也并不广泛。地图很少用来计算相机的位姿,没有用来定位相机的不同视角,也没有用来定位不同的相机。场景不是静止状态的情况下可能更糟糕。我们认为地图识别的作用非常关键,我们发现在类似PTAM的应用中这一块做的不够好。
在我们之前的工作中,我们在PTAM中集成了一个非常有效的识别系统用于导航和闭环控制。这个识别系统基于ORB特征的二进制数据包,让位于在视角不变情况下实时定位系统的性能。我们实验演示了系统在不同相机和轨迹下的系统复用地图的性能。我们需要提取特别的特征(ORB)用来获取识别的性能。我们用这个方法构建了新的SLAM系统,我们将为ROS发布开源源代码。
我们的系统使用了大量的视觉信息,在优化位置识别性能中需要较多关键帧信息与加入削减算法减少地图中冗余关键帧上做了大量工作,证明方法富有效率。该系统有3个主要任务:自主导航/追踪、地图构建、闭环控制,在多核系统中并行处理。图 1显示了系统框图。
这一章主要介绍地图的存储。
地图特征点构成真实世界的3D架构。每个特征点都经过不同视角抽象,然后用Bundle Adjustment优化。这里图像中的点是ORB特征点,用角点检测的FAST算法获取。图块的大小和方向取决于FAST算法获取的规模和关键点的方向。每个地图上的特征点和一个图块n关联。单个特征点可能和具有ORB特征的多个关键帧有关,同时有几个特征描述器。如果特征描述器出现特征不匹配的状况,它需要处理不同视角的不同地图特征点。为了加速数据关联,每个地图特征点的描述器为D,它的与其他所有描述器关联。另外,每个地图特征点存储了观察到的最大dmax和最小dmin距离。
交互可视化信息在几个任务中都非常有用,它决定了本地地图,位置识别的性能。可视化信息以间接权重图像的方式存储在系统中,那里每个节点是一个关键帧和关键帧之间的边缘,边缘的定义是两个关键帧之间相同的特征点至少是 θ。如果θ越低,相互关联度就越高,图像遍历的代价就越高。Strasdat建议典型的θ值在15到30之间。边缘的权重就是地图相同特征点的数量。
我们介绍一下之前的工作:
数据库包含了一个反向序数,它指向字典里的每个视图关键字,字典里有关键帧,有关键帧的权重。用检索视图关键字来检索整个数据库,极大地提高了检索的效率。新的关键帧将在闭环任务线程中插入数据库中,当本地的地图构建完成后执行这个操作。
重定位或者数据库闭环检索后,得到一个相近的分数,在检索图像后,它计算了所有关键帧之间的相同视图关键字。关键帧之间有视图重叠,所以并没有唯一的高分值的关键帧,可能高分值的关键帧有好多个。在这个项目中,我们做了视图集合包含了所有关键帧的分数值,这些关键帧直接与图像关联,关键帧匹配后就有一个高分值。图像会被紧密及时地分组,同一个位置的视图关键帧分值不会被记录,但在不同时间下的同一视图会被插入数据库。我们不仅仅是得到最优的匹配,所有的匹配分数要在最高分数的90%以上。
第一步获取图像帧里的ORB特征点。开始时,计算图像金字塔,侦测每层的FAST算法关键特征点。但只提取这些关键点的一个子集。考虑以下主要参数:图像 金字塔的层数,不同层之间的比例因子,要获取的ORB特征点的数量(关键点描述),侦测的阈值,最重要的是保留和描述关键点的子集的规则。这些参数直接影响特征的规模的不变性,任务的计算成本(字典包,数据关联,等),图像上的关键点分布。我们提取了基于比例因子1.2的8层1000个ORB特征点。为了最大程度地分散图像上的关键点,我们将图像分成网格,使每个网格里的关键点数量一样。如果有网格里没有足够的关键点,剩下的网格就要获取更多的关键点。
1. 计算当前帧的地图云点映射x。去掉图像外面的云点。
2. 计算角度:视线v和地图点n的法线的夹角。去掉v.n 3. 计算地图云点和相机中心的距离d。去掉地图云点相同尺寸区域以外的点,即d不属于[dmin, dmax]之间的点。 4. 计算帧内的比值d/dmin。 5. 比较地图云点描述器D和图像帧内ORB特征点,其大小是否接近x。 6. 关联地图云点获取最优匹配。 1. 在最近一次重定位中,超过20个帧被略过。 2. 当前帧追踪了至少50个云点。 3. 当前帧追踪的地图云点少于Kref的90%。 4. 本地地图构建处理完上一关键帧后,至少10帧从上一关键帧插入动作后被略过。或者本地地图构建完成了本地偏差调整后,至少20个帧被略过。 我们没有像PTAM那样采用与其他帧距离上的条件限制,这里标准更合理,如视角变换(条件3),尽可能快地插入帧(条件4)。第1个条件确保获得一个较好地重定位。条件2 确保一个良好的追踪。 第一步是将关键帧转换成关键字包表示。这会返回一个关键字向量,用于后面的闭环控制,也用于将ORB特征点与字典树里的第二个节点关联,这个字典树用于下一步的数据关联。 在后面的3个关键帧建立后,要确认地图点云是否出错,需要满足如下2个条件: 1.)追踪功能要能找到那些地图点,这些点在超过25%的帧里; 2.)如果在地图点建立后丢掉一个关键帧,这个关键帧必须在3个关键帧中出现过; 关键帧里的地图点有新的观测方法,关键帧里的关联图像的边缘需要重新计算。另外,每个地图点的描述器D也要重新计算。 我们先计算关键字包的关键字向量Ki与其邻近的相关图像的相似性,留下最低分值Smin。然后,闭环控制检索关键帧数据库,去掉那些分值低于Smin的关键帧。另外,最后所有直接与Ki关联的关键帧都去掉。为了增加控制器的鲁棒性,我们必须侦测3个连续的闭环侦测器,它们的图像相互关联保持一致,如第3节C里面所示。当闭环侦测的关键帧通过了图像关联一致性测试,下一步就要计算相似变换。 在修正回路之前,当闭环控制完成当前操作后它就会停止运行,发送一个信号给本地地图构建线程。一旦本地地图构建线程停止,闭环控制就要修正回路。这个过程非常必要,2个线程都可能会修改关键帧的位姿,地图云点(地图点里面可能造成混淆,导致地图构建失败)。 这个视频是30fps,752x480分辨率的。如图3所示。重定位有一些难度,如图4所示。所有的追踪时间如图5所示。90%的帧追踪都少于40毫秒。在实际步骤中,追踪时间会稍微增加,因为关联图像之间的关联程度更大,局部地图更大。闭环侦测花了5毫秒从关键帧数据库中取回回路,关键帧数据库包含86个关键帧,计算相似度和融合回路花了173毫秒,图像位姿优化花了187毫秒优化图像里面的1692个边缘。最后,全局误差调整花了518毫秒。 我们用同样的步骤也比较了PTAM。开始时,尝试了20多次来初始化。PTAM在后续好几步都跟丢了,我们的系统没有,在重定位中的失效是由于缺少不变的视角。 [1] D. G´alvez-L´opez and J. D. Tard´os. Bags of binary words for fast place recognition in image sequences. IEEE Transactions on Robotics, 28(5):1188–1197, 2012. 随机抽样一致 RANSAC(转) http://www.cnblogs.com/cfantaisie/archive/2011/06/09/2076864.html Bundle Adjustment到底是什么? http://www.zhihu.com/question/29082659 --------2016年2月26日---翻译初稿完成---17:50------------------------------------------------------------------------------- --------感谢麒麒、敏敏这两天的陪伴和容忍------------------------------------------------------------------------------------ Bags of Binary Words for Fast Place Recognition in Image Sequences 翻译:2016年3月2日 Taylor Guo 图像词袋模型也是一种基于图像局部特征的标分类算法,它只考虑目标的局部区域的表面特征,而忽略他们之间的空间关系,对目标的整体形状不加限制,这样建立的目标模型就有很大的灵活性,不会局限于某一种形状的特征,可以处理类内目标的形状变化。 图像与文本对比: 文本 文集 (Corpus) 文档 (Document) 单词 (Word) 字典 (Vocabulary) 图像 图像集 (Image set) 图像 (Image) 视觉单词 (Visual Word) 视觉字典 (Visual Vocabulary) 图像词袋模型的基本结构: 所谓词袋,就是包含一组数据的打包或封装。在一个词袋中往往包含了若干幅图的基本特征元素。在一个完整的词袋中,一般有若干幅图的局部特征,包括形状、结构、颜色等具有鲁棒性,不变性的特征。由于词袋具有一类或多类图像的全部特征,故而当我们提取出词袋中的元素时,就可以对相近类图像进行描述,同时也可以用作不同类别图像的分类。词袋模型在图像描述中的应用是近年的研究热点。 词袋模型的原理非常简单,词袋模型是文本的简化描述模型。在此模型中,文本被表达成无序的单词组合,不去考虑语法与词序。以文本为例,如果一个文本X表示一连串有顺序的词的排列,那么机器对于X的识别其实就是计算出X在所有文本词语中出现的可能,也就是概率多个词语概率的相乘p(X)=p(X1)p(X2|X1)…p(Xn|Xn-1)其中P(x1)表示第一个词出现的概率,p(X2|X1)表示在第一个词出现的前提下第二个次出现的概率,而词袋模型就是这种文本模型的特例,即Xk出现的概率与前面的X无关,故有p(X)=p(X1)p(X2)…p(Xn)成立。 主要利用词袋模型的特点,根据已知的图像对未知的(机器未能识别的)图像进行描述,以达到对待描述图像的一个机器性认知,主要步骤分为三步:特征提取、特征码本的聚类、数据分析及统计,条形图显示。Visual words的撷取大致上是将图像的SIFT features,在keypoint feature space上做K-means clustering的结果,以histogram来表示,是一种bag-of-features。除了可用于retrieval外,visual words也被用于image classification。 Visual words (简称VWs) 近年来在image retrieval领域被大量使用,其motivation其实是从text retrieval领域而来,是基于文字上的textual words,套用在影像上的模拟。如同于一篇文章是由许多文字(textual words) 组合而成,若我们也能将一张影像表示成由许多 “visual words”组合而成,就能将过去在text retrieval领域的技巧直接利用于imageretrieval;而以文字搜寻系统现今的效率,将影像的表示法「文字化」也有助于large-scale影像搜寻系统的效率。在文献 [1] “Video Google: A Text Retrieval Approach to Object Matching in Videos,” Proc. IEEE International Conference on Computer Vision, 2003有提到motivation of visual words的细节。首先我们先回顾textretrieval的过程:1. 一篇文章被parse成许多文字,2. 每个文字是由它的「主干(stem)」来表示的。例如以 ‘walk’ 这个字来说,‘walk’、‘walking’、‘walks’ 等variants同属于 ‘walk’ 这个主干,在text retrieval system里被视为同一个字。3. 排除掉每篇文章都有的极端常见字,例如 ‘the’ 和 ‘an’。4. 一篇文章文章的表示法,即以每个字出现频率的histogram vector来表示。5. 在此histogram中,对于每个字其实都有给一个某种形式weight,例如Google利用PageRank [2] 的方式来做weighting。6. 在执行文字搜寻时,回传和此query vector最接近(以角度衡量)的文章。 步骤1:侦测影像中的SIFT keypoints,并计算keypoint descriptors。例如在原始SIFT文献 [3] 使用Difference of Gaussians (DoG) 来侦测keypoints,而以一个128-D的向量作为descriptor。侦测keypoints的动作相当于上一节所说的1. 将文章parse成一个一个的文字。 步骤2:将所有训练影像的所有keypoint descriptors,散布于一个128-D的keypoint feature space中,再执行一个clustering algorithm,例如K-means或是这学期教过的EM。在image retrieval领域中,cluster数 K 常订为104 ~ 106。同一个cluster里的keypoints,相当于是同一个 “visual word stem” 的variants,在retrieval / classification系统中被视为同一个VW,因此K也被称为系统里的 “vocabulary size”。clustering后的结果相当于上一节所说的2. 同一个word stem下有许多的variants。 步骤3:最后,一张影像可看成由许多VW(原先是keypoints)组成。因为在retrieval领域,我们并不在意文字的排列顺序,只在意文章中文字的出现频率,同样的道理,一张影像中我们只在乎每个VW stem的出现频率。以这种概念构成的特征被称为 “Bag-of-features”,只在乎袋子里有什么物品,而不是物品的排列顺序。因此影像特征的表示法为根据VW出现频率的 “visual word histogram”。这种概念与上一节4.的文字出现频率histogram相同。 结论:Visual words可看作是将影像中local的keypoint descriptors,套上clustering algorithm后,变成整张影像的global feature。 Visual words 除了大量用于image retrieval外,也可以直接作为features用于image classification。本专题的目的就是将visual words作为影像特征,并套用于multi-class image classification。 我们采用视觉词袋模型,通过FAST+BRIEF特征提出一种位姿识别方法,通过构造词汇树生成二进制特征向量描述器空间,使用树形结构加速几何验证和匹配。整个过程,包括特征提取,共26300张图像序列,每帧22ms,比之前的方法要快很多。 视觉SLAM的一个最重要要求是要具有良好鲁棒性的位姿识别,在自主导航过程中,未观测到的区域需要重新观测时,一般的匹配算法就会失效。如果观测数据有效,闭环控制就可以提供正确的数据关联,从而获得完整的地图。在机器人的应用中,由于视觉模糊、突然运动、移动阻塞或定位失效后,也可以采用这种方法。这种方法在一个小范围的环境中,用图像构建地图,性能优良;但在大范围的环境中,从图像到图像的FAB-MAP构建地图的方法更好。这种方法通过机器人在线获取图像,构建数据库,其新获取的图像与之前的那副图像非常相似,相似的图像序列形成一个闭环回路。最近几年的图像匹配算法都是基于词袋模型中的数字向量比较的方法。词袋模型产生了有效地、快速地图像匹配,但如果图像失真,对闭环回路却不是一个好方法。那么,我们就需要验证图像的视觉匹配,进行特征匹配。闭环回路控制算法的瓶颈是特征提取,这一步骤的算法复杂度是其他步骤的10倍左右。这就要求SLAM算法同时运行在两个无耦合关系的线程上:一个执行SLAM功能;另一个用作闭环回路控制,如文章5《CI-Graph SLAM for 3D Reconstruction of Large and ComplexEnvironments using a Multicamera System》所述。 在本文中将采用常用CPU和单目相机提出一种算法用于闭环回路侦测,实时构建云点匹配。这个方法基于图像词袋模型和几何特征验证,提出优化算法。主要通过基于FAST关键点的BRIEF特征向量描述器提高速度,在第三节里会具体解释。BRIEF特征向量描述器是一个二进制向量,每一个位上的值是由关键点附近指定的两个像素的亮度比较得到的结果。尽管BRIEF特征向量描述器在尺度和旋转上不变,我们的实验表明在运动机器人上针对相机平面运动闭环回路鲁棒性非常好,在运算时间和算法特性上取得很好的平衡。 本文使用存储于二进制空间上的词袋模型,讨论了顺序索引和逆序索引,如第四章所述。据我们所知,这是第一次采用二进制字典用于闭环回路检测。逆序方法用于提取与给定图像相似的图像。顺序索引有效地获取图像间的云点匹配,加快回路确认中的几何特征检验。 第五节详细讲述了闭合回路检测算法的细节。为了检验回路是否闭合,我们验证当前图像匹配的一致性。本文方法针对同一位姿的相似图像,避免数据库检索时重复计算。在处理图像匹配时,我们将表示同一位姿的相似图像进行分组来解决这一问题。 第六节对实验进行了评估,分析了算法不同部分的优点。对比了BRIEF和SURF特征算法的效率,提出了用于闭合回路控制的特征向量描述器。还分析了闭环回路验证中实时几何特征一致性测试程序的性能。最后提供了在5种公共数据集0.7-4米轨迹下的测试结果。完成了整个闭环回路的检测过程,包括特征提取,26300张图像,其中最长处理时间52毫秒,平均处理时间22毫秒,明显强于之前的方法。 这个工作的早期版本如《Real-timeloop detection with bags of binary words》所示,在本文中我们增强了顺序检索方法,加强了该实验的评估方法,在最新的数据集上提供了实验结果,与FAB-MAP2.0算法进行了对比。 由于其优良性能,基于图像的位姿识别在机器人领域备受重视。例如采用全向相机的闭环回路检测系统FAB-MAP。FAB-MAP采用词袋模型表示图像,使用Chow-Liu树获取关键字的视图相关概率。FAB-MAP已经成为闭环回路检测的标准方法,但当相机长时间提供的图像具有相似的内容结构时,其鲁棒性会降低。在文章4《Fast and incremental method forloop-closure detection using bags of visual words》中,提出了用于创建增量式在线视觉字典,存储图像和颜色。两个词袋模型用于贝叶斯滤波器的输入,贝叶斯滤波器基于上一匹配的概率估计出两幅图像的匹配概率。与概率方法不同的是,我们采用实时一致性检验增强检测的可靠性。这种方法在之前的工作中《CI-Graph SLAM for 3D Reconstruction of Large and ComplexEnvironments using a Multicamera System》和《Robust PlaceRecognition With Stereo Sequences》证明是有效的。本文第一次采用了词袋模型避免了匹配过程中相似图像间的重复运算,可以使系统在更高的频率上工作。 为了确认闭合回路,通常采用几何特征检验。我们采用极值约束获取最优匹配,采用顺序索引更快地计算相似点匹配。文章《View-basedmaps》使用立体相机视觉里程方法实时构建视觉地图,采用词袋模型检验闭合回路。几何特征测试是计算用于图像匹配的空间变换。然而,他们并未考虑图像匹配的一致性问题,这需要采用几何测试寻找闭合回路。 大多数的闭环回路工作,使用SIFT或SURF提取特征,这种方法对于亮度、尺度和旋转变换具有不变的特征,在视角较小的变化情况下性能良好。但特征提取往往需要计算100-700毫秒,如果不使用GPU,采用近似SIFT特征向量描述器,或者减小尺度,来减小特征提取的计算时间,文章《View-based maps》提出了一种压缩随机树方法,该方法计算了一个图像区块和其他已经离线训练的区块的相似度,链接这些相似度的值形成区块特征向量,使用随机正射投影减小尺寸,这种方法提供了快速特征向量的描述器,适合实时应用。我们的工作和这篇文章中类似,使用富有效率的特征提取方法降低处理时间,BRIEF特征向量描述器,或BRISK,或ORB(ORB: An Efficient Alternative to SIFTor SURF)都是采用二进制,计算速度快。一个主要的优势是信息量精简,使用了更少的内存,更快地进行比较,词袋模型的运算速度也就更快。 局部特征提取(主要是关键点和它们的特征描述向量)的计算代价巨大,在比较图像,实时场景计算中,这是一个瓶颈。为了解决这个问题,我们采用FAST关键点和最新的BRIEF特征向量描述。FAST关键点采用Bresenham点画圆算法,比较半径为3像素以内的灰度值来检测角点,只有很少的一部分像素用来对比,角点的获取速度非常快,适用于实时应用的系统中。 针对每个FAST关键点,我们在它们周围都画了一个方形区块计算BRIEF特征向量。每个图像区块BRIEF特征向量描述器是一个二进制特征向量。每个位是图像区块中两个像素之间亮度比较的结果的值。这些区块已经经过高斯核函数滤除噪声进行过平滑处理。给定图像区块尺寸Sb,待测像素对是在离线状态下随机选择的。除Sb外,我们还必须设置参数Lb:待测试的数量(比如特征向量的长度)。对于图像中的点P,其BRIEF特征向量B(P)表示为: Bi(p)是特征向量第i位;I(.)是平滑后像素点的亮度;ai和bi是2维平面上相对于测试点i的距离,值为。特征向量不需要训练,只是离线状态下,随机选择的像素点,几乎不消耗时间。最初的BRIEF特征向量描述器根据常态分布选择测试点ai,bi的坐标。我们发现用相邻的一对点的测试效果更好,通过采样分布和选择配对的点的坐标。关于特征向量的长度和区块的大小,我们选Lb=256,Sb=48,这在特征描述和运算时间上取得较好的平衡。 BRIEF特征向量描述器的优势是运算和比较速度非常快(Lb=256个位时,每个关键点是17.3微秒)。这些描述器只是特征向量的一个位,测量两个向量之间的距离可以通过计算它们之间不同位的数量来解决,也就是用汉明距离计算两个向量对应位置的不同字符的个数,(换句话说,它就是将一个字符串变换成另外一个字符串所需要替换的字符个数),通过执行xor异或操作就可以了。这种方法比SIFT或SURF更适合这个应用,在SIFT或SURF特征向量描述中,计算欧氏距离使用的是浮点运算。 由具有层次结构的词袋模型、顺序索引和逆序索引组成图像数据库,如图1所示,这个图像数据库用于侦测之前访问过的地方。 词袋模型是使用视觉字典将一副图像转换成离散数字向量,用于管理图像的数据集。视觉字典通过将视觉单词W用向量描述空间存储,在离线状态下创建而成。与SIFT或SURF特征向量不同,我们采用二进制向量描述空间,创建一个精简的字典。在层级架构词袋模型上,字典组织成一个树状结构。通过训练图像提取具有丰富数据的一组特征,这与那些稍后在线创建的独立开来。采用K-medians聚类算法(数据挖掘,机器学习的重要分支)[k-means++: The advantages of carefulseeding]先将提取的特征向量分成kw二进制聚类。并将产生的非二进制值直接转换成0。这些聚类形成字典树里的第一层节点。其他层的节点通过同样的方法计算出来,直到Lw层。最后,我们得到一个有W个叶子的树,也就是W个单词的字典。每个单词根据其在训练文集库中的相关性分配权重,减小那些经常使用的单词的权重,这样他们的区别就不明显。我们通过[Video Google: A text retrievalapproach to object matching in videos]文章中的方法,采用使用频率反向分类(tf-idf: term frequency-inverse document frequency)方法进行处理。然后,将图像It,在时间t内,转换成词袋向量Vt∈Rw,特征的二进制描述器遍历字典树,选择每层的中间节点使得汉明距离最小化。 为了检验两个词袋向量v1和v2的相似度,我们计算L1的值s(v1,v2),这个值的在0到1之间[0…1]: (2) 图像词袋由逆序指针指示。这个结构用于存储视觉单词wi,视觉单词组成视觉字典,视觉字典形成图像It。这样当检索图像,作比较操作时,就不会对比图像中那些一样的视觉单词,这对检索数据库非常有用。我们用逆序指针指向一对数据 我们基于之前的工作《CI-Graph SLAM for 3D Reconstruction of Large and ComplexEnvironments using a Multicamera System》和《Robust PlaceRecognition With Stereo Sequences》,提出检测闭合回路的算法。具体步骤如下面四步所示: A. 数据库查询 我们用图像数据库存储和查询任何一副给定的图像。当图像It被转换成词袋向量Vt时,在数据库中查找Vt,查询到一系列的匹配的候选向量对 我们通过s(Vt, Vt-Δt)计算Vt的值,Vt-Δt是前一幅图像的词袋向量。s(Vt, Vt-Δt)很小时,比如机器人在转弯的时候,会错误地造成高数值。这样,我们就忽略没有到达最小值的图像,或者指定特征的数量。这个最小值会去掉一些图像,这些图像可能有被用于正确地侦测闭环回路的相似度值η。那么,我们就用一个比较小的值来防止有效的图像被丢弃。我们去掉那些图像,它们的η(Vt,Vtj)小于这个最小的阈值 Parallel Tracking and Mapping for Small AR Workspaces 作者: Geoge Klein, David Murray 2007年 小型增强现实工作空间的并行自主导航与地图构建 翻译:Taylor Guo 2016年2月24日 本文并不一字一句翻译,而是根据实际项目需求和产品应用,略去次要部分,选取主要部分,以求快速掌握实际应用方案。 如需完整文档,请自行学术搜索。 概要:本文主要讲在未知场景中,对摄像头位姿估计的方法。与机器人中采用SLAM类似,我们针对小型增强现实工作空间里手持式相机进行自主导航和定位。 自主导航和地图构建将分成两个线程:追踪相机的运动和从图像帧里处理3D导航地图的点特征。这里会涉及到优化技术和应用的实时性:本应用里面的地图在自主导航里面使用上千个地标,是最新的精确的健壮的系统。 1. 应用简介 增强现实使用给用户提供更多信息的环境。可以用于城市导航地图、零件的CAD模型、甚至是一些离散的信息。该应用可以使用户和静止的物体动态交互,如果模型或地图对机器或程序来说易于理解,那么增强现实应用的注册信息就可以直接执行,这其实也是基于相机的增强现实的主流方法。 不幸的是,机器程序易于理解的地图并不存在,它需要物体被标记。因此,需要传感器来获取这些特征,而传感器又有使用范围和质量的限制。信息的注册也就限制了追踪效果。那么,在增强现实应用中,就会使用扩展的追踪方法,就是在未知的场景里预先添加信息来获取最初需要的信息,这样就避免之前传感器检测不到某些未知地图的状况。最开始地图是一个比较小的点阵,后面的版本mono-SLAM算法已经可以不需要预先提供初始信息或地图了。 本文讨论使用校准过的相机在未知场景中构建环境地图。建立环境场景后,将虚拟物体放入场景中,在这个过程中可以精确地与真实物体关联。 我们并没有预先加入足够的信息到用户使用环境中,很多增强现实应用就不适用。我们的方法是通过远程专家提供有意义的提示和注解,本应用中采用预先虚拟模拟的沙盘。 我们从地图的云点估计一个飞机的模型,这可以推广到一般的物体的虚拟特征。如图所示。实际上,我们将平面物体(有纹理)转换成互动的立体的虚拟影像,在这个阶段,我们开发了简单的游戏。相机界面变成了同时观察和用户交互的工具。 为了能让用户更自由地与虚拟环境交互,我们需要快速、精确和健壮的相机追踪算法,当进入新场景时,能重构地图,那么这样就有一些限制,场景要尽可能小,要静止画面不能扭曲。小,意味着用户需要花更多的时间在同一个地方,如桌子、房间角落或单一建筑物前。我们也考虑到应用的扩展,扩展到大型的增强现实工作空间,如城市。 2. SLAM方法 方法总结: a. 自主导航和地图构建分离,用两个并行的线程; b. 地图构建基于关键帧,使用批处理方法(使用Bundle Adjustment 减小误差) c. 地图的初始化采用立体匹配 d. 更新的点阵通过极值点获取 e. 获取大量的点用来构建地图 这里可以比较一下目前最新的方法。手持相机的同步导航和地图构建,EKF-SLAM和FAST SLAM,导航和地图构建紧密地关联,相机的位姿和图标的位置根据每幅图像帧同时更新。我们认为手持相机比移动的机器人更难追踪:机器人获取的数据可以测得距离;机器人可以以很慢的速度移动。相反,单目手持相机无法应用在这种场景中,数据融合产生错误,不可避免。而上面的两种方法,可能会加大这种错误。即使通过JCBB和RANSAC算法增强系统的健壮性,增强现实仍然无法使用。 这样自主导航和地图重构就要分开。两个功能分开后,导航就没有必要依赖于基于概率论的地图构建,健壮的自主导航方法就可以加入。实际上,两个功能之间并没有数据关联。由于计算机多线程处理能力,自主导航功能就贯穿于整个图像处理过程中,并增强性能。 当相机没有移动的时候,图像帧里包含足够多的信息,没有必要每一帧都拿来做地图构建。我们主要处理少量有用的关键帧。这些关键帧的能实时地处理,这个过程是在下一个关键帧进来之前完成。然后,用高度精确的批处理算法处理后面的地图构建,这个算法如Bundle Adjustment. Bundle Adjustment 在视觉里程导航中被证明行之有效,我们觉得采用这个方法。首先,通过立体5点构建初始地图,然后用本地Bundle Adjustment追踪相机最近的N个位姿,以获取较长距离下的期望精度。当系统初始化后,我们使用本地地图更新,我们试图构建全局地图,那些特征点可以再次被访问,这样就可以提供全幅地图优化。最后,我们不采用2D追踪而使用极值特征搜索。 3. 更进一步工作 系统采用UKF,使用了很少的特征点构建地图。 还有采用了学习算法,预先标记点追踪,识别特征,在训练阶段采用经典的Bundle Adjustment 算法,追踪性能不错,但没有经过学习后,没有后续尝试。还有通过其他的估计方法发了论文,说更精确,更健壮,但牺牲了系统性能,处于不稳定状态。 还有采用了SfM方法,加入了惯性传感器和鱼眼透镜,从3D位姿估计中耦合了2D特征导航算法,健壮性增强。 4. 地图 地图由M个特征点构成,位于世界坐标w下。地图Pj中的j点,坐标为Pjw=(xjw,yjw,zjw,1)T。每个坐标由nj个像素点组成。 地图系列由N个关键帧。每个关键帧以相机为中心点的坐标系,第i个关键帧是ki. 世界坐标系与关键帧坐标系的转换为:Ekiw. 每个关键帧有4个8bpp灰度值的图像金字塔;第0层存了一幅640x480的照片,第3层子抽样分辨率是80x60。 并不是每个像素都单独存储,观察到每帧的特征点后,只存储这个帧的特征点。每个地图有一个关键帧,每个关键字有一个金字塔组合,像素位于金字塔的层级中。 在金字塔层级中,每块是8x8的像素方块;在世界坐标系下,块的大小取决于金字塔层数,到关键帧中心的距离,还有块的方位。 后面的例子里,每个地图上有2000到6000个特征点M,有关键帧N=40到120个。 5. 自主导航 在3D地图估计方法构建后,将设计基于特征点的自主导航系统。 导航系统获取图像,实时估计相机位姿构建地图。 基于这样的估计,虚拟的增强图像可以画在相机动画帧的上面。 每帧画面上,系统执行如下导航步骤: 1. 获取新的图像帧,根据运动模型预先估计位姿; 2. 根据图像帧的位姿估计,地图特征点投射到照片上; 3. 根据少量的(50)粗略的特征搜索图像; 4. 根据这些粗略匹配更新相机位姿; 5. 根据大量的(1000)特征点映射的图像再次搜索; 6. 在所有匹配后,最终的关键帧的位姿估计就计算出来了。 5.1 截取图像 相机可以提供640x480像素的图像帧,速率30Hz。这些帧可以转换成8bpp灰度,用于自主导航和增强现实显示。 导航系统构建4层图像金字塔,每层用FAST-10 conrner detector扫描。 相机位姿的估计模型:decaying velocity model. 有点像a-b constant velocity model,但缺少测量,预估过程速度会下降,最终停下来。 5.2 相机的位姿和映射 为了将地图上的点投影到飞机图片上,需要将世界坐标系转换成以相机为中心的坐标系C。 可以通过矩阵4x4 Ecw 与矩阵的相乘(线性变换与线性变换的乘积),获得相机的位姿: Pjc=Ecw x Pjw (1) 5.3 图块搜索 5.4 位姿更新 5.5 导航优化 为了增强导航系统对相机运动、图块搜索和位姿更新的适应能力,我们需要做两次。初步粗略搜索只搜索当前图像金字塔的当前帧的最上面一层50个点。这样搜索范围就比较大。新的位姿就可以计算出来。然后,1000个图像块继续搜索。更精细的搜索将在更高一级的金字塔图像块中。最终的位姿就是这样一个由从粗到细的过程。 5.6 导航功能质量与错误恢复 6 地图构建 6.2 关键帧插入和极值搜索 6.4 数据关联精细化 7 结果 7.3 与EFK SLAM合成对比分析 7.5 手持式相机AR 8 后续工作的不足 8.1 失败分析 8.2 地图构建不充分 9 结论
E. 最终的位姿优化
追踪的最后一步是优化相机位姿,具体是使用4.B或4.C里面描述的方法估计初始位姿,用帧里的ORB特征点与本地地图里的云点一一匹配。这样优化尽可能避免了映射错误,保持了地图云点的位置。我们使用g2o 列文伯格-马夸尔特非线性最小二乘算法和Huber估计器。
F. 新的关键帧的取舍
如果追踪成功,我们就要决定是否插入新的关键帧。插入新的关键帧需要满足如下条件:
5. 本地地图构建
A. 字典
B. 确定新的地图云点
通过三角化不同关键帧的ORB特征点可以构建新的地图云点。PTAM用最邻近的关键帧三角化这些点,这些帧的视差非常小;我们用相邻的N个关键帧来三角化这些点,这些帧具有很多相同的图像点。我们需要约束关键帧的数量,由于地图间高度关联,计算代价会很大。我们搜索当前关键帧里的ORB与其他关键帧中的进行匹配,只是比较描述器。我们比较字典第二层下相同节点里的ORB,去掉不能满足极化约束条件的匹配。一旦ORB匹配成功,它们就被三角化了。如果地图点视差小于1度,也要被去掉。开始时,地图点只能在前两个关键帧里看到,但其他关键帧里也有,所以地图点投射到其他关键帧里供追踪算法使用,如第4节D小节所示。
C. 更新局部区域
D. 局部偏差调整
与PTAM类似,局部偏差调整优化当前处理的关键帧,这些关键帧与图像关联,这些关键帧能看到这些图像点。其他能看到这些点的关键帧,但不是当前的关键帧也要优化。为了解决非线性优化问题,我们使用g2o里面的列文伯格-马夸尔特非线性最小二乘算法,Huber估计器。经过优化后,我们可以再次计算n, 尺度不变距离dnin,dmax。
E. 祛除冗余关键帧
为了去掉地图中冗余的关键帧,以防止关键帧的数量急速变大,我们去掉其他相同或更好的关键帧中90%的地图点已经被观测到过的关键帧。这个祛除的过程如图2所示。
6. 闭环控制
A. 闭环侦测
B. 计算相似变换
在单目SLAM中,有7个自由度,地图可能偏移,3种改变,3种旋转,1个尺寸因子。为了闭合回路,我们需要计算从当前关键帧Ki到回路关键帧Kl的相似变换,回路中的关键帧Kl提供了回路的累积误差。这个相似变换也用来作为回路的几何验证。
C. 与局部地图构建线程同步
D. 回路融合
回路修正的第一步就是融合重复的地图点,插入闭环控制的关联视觉地图。开始的时候,用相似变换Sil来修正Tiw关键帧的位姿,这种修正方法可以复制到Ki相邻的关键帧上,然后串联执行所有的相似变换,这样回环的两端就可以有效对齐。回路的关键帧可以看到所有的地图点,与它邻近的点都投影到Ki上,这些投影的点在一个狭小的局部区域进行搜索匹配。所有匹配的地图点和Sil中的有效数据融合。融合过程中的所有有效的关键帧将更新关联图像中的边缘,产生的新的边缘用于闭环控制。
E. 关联视图位姿图像优化
为了闭合回路,修正累积误差,我们将执行一个全局优化。当执行误差调整时,有必要使用鲁棒成本计算函数,我们需要先算出一个最初的方案供优化器收敛功能使用。这个方案由相互关联图像的位姿优化后的结果组成,而闭环边缘上的误差分布在整个图像中。图像位姿优化器通过相似变换修正尺度偏移。这个方法比我们之前的方法更通用,之前的方法中,图像的位姿只是连接关键帧形成一个圈,其他的都一样,优化过程也一样,这里就不在讲了。
F. 全局偏差调整
整个地图最后会通过单点的图像位姿优化完成。优化过程和第5节D里面所说的局部偏差调整一样,不过这里所有的关键帧和地图点都会被优化。优化后,局部地图构建会再次发出。
7. 上机调试
我们做了两个实验,用来演示系统的优势 。第一个是手持相机在实验室顺序完成一个回路,环境闭塞、相机剧烈移动。第二个是一段视频在更大场景下测试这个系统。系统被集成到ROS里面,我们用录制的视频模拟相机的运动,图像帧率都一样。附录1中的视频是和PTAM系统的对比。
A. 实验室视频
B. NewCollege
这个实验室一个立体视频,我们只处理左边的图像,是20fps,512x384分辨率下拍摄的。图6显示了不同时间的地图重构,图7显示了最后的重构,包含690个关键帧,33000个点。图5显示了每帧所有的处理时间,90%的图像帧都少于50毫秒。图6显示了在中间部分机器人重新跑了大的回路,局部地图大于探测到的地方,所以追踪花了更多的时间。回路检测花了7毫秒在280关键帧的数据库中检测回路。回路融合花了333毫秒,位姿优化花了2.07秒优化10831个边缘的图像。我们非常清楚地看到,在一个大的回路中优化所有相互关联的图像复杂度太大,所以并不需要优化所有的边缘,这个方法我们将在后续工作中进行。
8. 结论
我们构建了一个新的视觉SLAM系统构建可识别的地图。不需要对所有的特征点采用SLAM算法,只需要追踪相机的当前位姿,我们映射地图用于识别位置和物体。这有效地扩展了地图的复用性。与PTAM在小型地图的应用对比后,前段的复杂度大,在相机重定位上有巨大的改进。后端可以执行大尺度的地图构建,包括有效可靠的闭环控制。我们目前在研究地图的初始化,由于时间空间限制我们在这里就忽略了,稀疏的图像位姿可以通过闭环控制优化。我们将会发布源代码,大家就可以从中受益。
感谢
本项目得到了西班牙xxx项目的支持,xxx奖学金支持。(抱歉,完全看不懂西班牙文,西班牙式英语的翻译难度也是看得人醉了。)
参考文献
[2] G. Klein and D. Murray. Parallel tracking and mapping for small AR workspaces. In International Symposium on Mixed and Augmented Reality (ISMAR), 2007.
[3] R. Kuemmerle, G. Grisetti, H. Strasdat, K. Konolige, and W. Burgard. g2o: A general framework for graph optimization. In IEEE International Conference on Robotics and Automation (ICRA), 2011.
[4] V. Lepetit, F. Moreno-Noguer, and P. Fua. EPnP: An accurate O(n) solution to the PnP problem. International Journal of Computer Vision, 81(2):155–166, 2009.
[5] R. Mur-Artal and J. D. Tard´os. Fast relocalisation and loop closing in keyframe-based SLAM. In IEEE International Conference on Robotics and Automation (ICRA), 2014.
[6] E. Rublee, V. Rabaud, K. Konolige, and G. Bradski. ORB: an efficient alternative to SIFT or SURF. In IEEE International Conference on Computer Vision (ICCV),
2011.
[7] M. Smith, I. Baldwin, W. Churchill, R. Paul, and P. Newman. The new college vision and laser data set. The International Journal of Robotics Research, 28(5):595–
599, 2009.
[8] H. Strasdat, J. M. M. Montiel, and A. J. Davison. Scale drift-aware large scale monocular SLAM. In Robotics:Science and Systems (RSS), 2010.
[9] H. Strasdat, A. J. Davison, J. M. M. Montiel, and K. Konolige. Double window optimisation for constant time visual SLAM. In IEEE International Conference on Computer Vision (ICCV), 2011.
[10] H. Strasdat, J. M. M. Montiel, and A. J. Davison. Visual SLAM: Why filter? Image and Vision Computing, 30(2): 65–77, 2012.
翻译过程中参考资料:
词袋模型在图像序列中快速位置识别的应用
关键词:词袋模型(Bag-of-Word) 特征向量(descriptor)
闭环检测目前多采用词袋模型(Bag-of-Word),源自于计算机视觉理论。
它实质上是一个检测观测数据相似性的问题。
词袋模型中,提取每张图像中的特征,把它们的特征向量(descriptor)进行聚类,建立类别数据库。
比如说,眼睛、鼻子、耳朵、嘴等等(实际应用中基本上是一些边缘和角)。
假设有10000个类。然后,对于每一个图像,可以分析它含有数据库中哪几个类。以1表示有,以0表示没有。那么,这个图像就可用10000维的一个向量来表达。而不同的图像,只要比较它们的向量即可。
摘要:
一简介
二 相关工作
三 二进制特征向量
四 图像数据库
五 闭合回路检测算法
小型增强现实工作空间的并行自主导航与地图构建
6.1 地图初始化
6.3 Bundle Adjustment
6.5 程序执行备注
7.1 视频导航性能
7.2 地图构建状况
7.4 与EFK SLAM子集对比分析