360全景拼接 opencv_360度视频序列全景图拼接系统的设计与实现

[摘 要] 提出了一种视频序列到全景图的快速转换方法。首先对视频进行抽帧, 获得初始帧序列,利用特征点匹配及RANSAC方法计算帧匹配质量及匹配区域, 选取匹配质量高的帧进行拼接并通过加权平均法进行图像融合,最后得到全景图。

[关键词] 特征匹配 RANSAC 视频 全景图

1 引言

通常制作360度全景图可以使用专业的全景设备直接获取,也可先使用普通的成像设备拍摄足够多的具有重叠区域的图像序列,然后将这些图像拼接组成一幅全景图像。

由于成本较低,不需要昂贵的专业设备,利用序列图像进行全景图拼接是近年来的研究热点,其中又分为对静态序列图像拼接的研究,以及对视频序列拼接的研究。

静态图像序列中的每一张图像都是单独拍摄,能够精确设置控焦距、曝光等拍摄参数,因而够获得较好的成像质量,但操作过程却相对复杂。

视频序列拍摄操作简单,只需使用录像设备旋转一周录制,但不能准确控制拍摄参数。旋转过程中光源位置、景物距离的变化,以及拍摄时出现抖动等情况都会导致视频序列的成像质量较低,给后期拼接工作带来麻烦。

本文主要研究视频序列的拼接,提出了一种视频序列到全景图的快速转换方法,通过帧的选取、匹配、拼接等步骤生成全景图像。

2 现状

目前,用于制作全景图的软件很多,其中较著名的有Helmut Dersch公司开发的PTGUI以及Pablo d'Angelo 为主开发开源全景摄影图像拼接软件hugin等,这些软件都是基于Helmut Dersch's Panorama Tools,通过控制点对静态图像拼接,输出一张更大幅面的全景图像。

另外还有一些用于制作全景图的手机应用,如利用视频制作全景图的bubbli,目前该应用只能运行在系统为ios7以上的设备。

3 关键算法

3.1 图像匹配

图像匹配技术是一种通过对图像内容、特征、结构、关系、纹理及灰度等对应关系,相似性和一致性的分析,寻求相同图像目标的方法。目前图像匹配的方法有很多种,根据图像的维数可以分为 2D 和 2D 匹配、2D和 3D 匹配、3D和 3D匹配;根据图像特征提取的层次可以分为基于灰度的匹配、基于特征的匹配。

本系统采用了基于特征的图像匹配方法。

基于特征的匹配方法首先在原始图像中提取特征,然后用相似性度量函数和约束条件确定几何变换,最后将该变换关系作用于待匹配图像。常用的特征匹配基元包括区域、边缘、轮廓、直线、兴趣点、颜色、纹理、矩等显著特征,总的概括为点、边缘及面等特征,由于面特征提取过程比较复杂,耗时较多,因此基于特征的匹配算法主要研究利用点特征和边缘特征进行匹配。

3.2 Sift算法

尺度不变特征变换算法,即 SIFT(Scale Invariant Feature Transform)算法是一种提取局部特征的算法,由 David Lowe 于 1999 年提出的一种基于尺度空间的,对图像平移、旋转、缩放等特性保持不变的图像局部特征描述子。

相较于其它特征提取算法,SIFT 算法对亮度变化、尺度缩放、旋转、噪声和仿射变换有很好的鲁棒性,特征描述子信息丰富,独立性好、算法稳定。

SIFT算法在尺度空间寻找极值点,提取位置、尺度、旋转不变量其构造步骤分为尺度空间的构造、检测尺度空间的极值点、精确确定极值点位置、特征点方向分配、生成特征点描述子五个具体步骤。

SIFT 特征点描述子的生成过程如下:

1) 以关键点为圆心将关键点邻域旋转 θ,θ 为关键点的梯度主方向,从而保证了旋转的不变性。

2) 在旋转后的图像中,以关键的中心取 16×16 的邻域窗口,即为关键点的邻域窗口,每个小格代表关键点邻域窗口中的一个像素,箭头的长度为像素的模值,箭头的方向为像素的方向,这个方向是旋转后的像素方向。

3) 将 16×16 的矩形窗口均匀分为 16 个 4×4 个子区域,采用高斯模糊的方法,然后计算每个区域中 8 个方向的梯度累加值。

4) 得到特征点描述子特征向量,为 4×4×8=128 维向量。经过以上的变换,SIFT 特征向量已经剔除了尺度变换、旋转变化的影响,接着将特征点描述子进行归一化处理进一步减少光照的影响。此外,为了减少大梯度值的影响,为其设定一个阈值为 0.2,如果向量中某一维的值大于 0.2,则将其重置为 0.2,并重新进行归一化处理。

3.3 RANSAC算法

SIFT 算法将待匹配的特征点用 BBF 方法找到 k 个最近邻,然后利用最近邻比率方法判断特征点的匹配度。最近邻比率方法广泛用于基于特征的图像匹配,该方法简单方便并且比较稳定,但匹配的准确率往往不够理想。需通过其他方法提高 SIFT 特征点的匹配精度。

RANSAC 算法是一种鲁棒参数估计方法,它通过迭代的方法对一组观测数据集进行数学模型拟合,然后采用随机抽样验证去除噪声点。其优点是可靠性强、精度高、鲁棒性强,对图像噪声和提取不准确的特征点有强健的承受能力,并具有较好的剔除误匹配点的能力,SIFT 匹配对通过 RANSAC 几何校验之后可以有效滤除错误匹配,从而使得结合 RANSAC 的 SIFT 的性能更加优良,应用更为广泛。

3.4 图像融合

图像融合是采用某种算法对两幅或多幅图像进行综合处理,最终形成一幅新的图像。根据融合处理所处的阶段不同,图像的融合处理通常可以在三个不同层次上进行像素级图像融合、特征级图像融合以及决策级图像融合。

像素级图像融合方法可大体分为七类加权融合和主成分分析图像融合方法、假彩色图像融合方法、基于马尔可夫随机场的图像融合方法、基于调制的图像融合方法、基于统计的图像融合方法、基于神经网络的图像融合方法以及基于多分辨率分解的图像融合方法。

其中最直接的融合方法就是对源图像进行加权平均作为融合结果。加权平均运算提高了融合图像的信噪比,但削弱了图像的对比度,在一定程度上使得图像中的边缘、轮廓变模糊了。这种方法具有算法简单、融合速度快的优点,适用于序列图像的融合。

4 系统的设计与实现

4.1 需求分析

本系统主要为用户提供视频转制全景图的功能,同时还包括对全景图的管理功能、展示功能以及分享功能。

图3–1系统用例图

1.新建任务

用户上传自拍的视频进行全景图制作。

2.任务管理

用户可以进入任务列表页面查看任务状态,任务完成后可以对其进行查看、共享、转载、删除等操作。

在进行中的任务分为以下状态:进行中、已成功、失败等状态

共享操作可以将全景图添加到分享页面

转载操作可以获得全景图转载代码,通过复制、粘贴代码可以将全景图片嵌入其他页面

删除操作可以删除需要删除的全景图

3.分享

默认情况下,全景图片对其他用户不可见,可以将图片添加到共享页面供其他用户使用,也可以取消共享。

4.2程序架构

本系统分为用户交互端和视频转换服务端两部分。

用户交互端负责接收用户请求,向视频转换服务端提交任务,并提供对全景图的管理功能,采用php、html5实现

视频转换服务端接受用户端提交的任务请求并管理任务队列,完成视频文件到全景图的转换工作,采用c++语言实现,基于opencv库。

系统架构图

用户提交视频后,交互端先向服务端申请任务唯一标识,在获得标识后完成视频上传工作,向服务端提交任务请求。服务端在接收到新任务请求后,先将请求放就请求队列。由任务控制器从队列中取出任务,并启动视频转换程序,完成转换工作,最后将任务结果返馈给交互端。

系统时序图

4.3视频转换程序设计

视频转换程序是本系统最核心部分,负责完成视频序列到全景图的转换任务。

转换任务分为视频抽帧、帧匹配与拼接、全景图生成三部分工作。

1. 视频抽帧

视频转全景图的基本思想就是对视频中的帧进行拼合,然而视频中帧数量巨大,相邻帧之间重复度大,一个时长60秒帧率30fps的视频包含1800个帧,如果对视频中全部帧进行处理,将耗费相当长的时间,这样做不仅效率低下,而且完全没有必要。

在本系统中,规定输入的视频以匀速旋转一周的方式录制,在进行视频转换时,只需要抽取部分帧便可完成拼接工作。

设置抽取帧数为N,根据视频总帧数算出帧距间隔INTVAL,在理想情况下,从第一帧开始,每隔INTVAL抽取一帧与前帧拼合,直至视频结束。

但实际情况下,视频录制的效果可能并不理想,等间隔抽取的帧未必是最适合的帧,因此每抽取一帧时,需要对该帧的画面质量以及与前帧的匹配效果进行评估,如果当前帧不能达到要求,则需要在间隔范围内逐帧回溯寻找更合适的帧。

2.帧匹配与拼接

每抽取一帧时,将已拼合图A与当前帧B进行匹配。

首先利用sift算法分别提取两张A、B的特征点,然后利用距离比值法筛选匹配点。再利用RANSAC算法对特征点进行分析,计算出最佳匹配的变换矩阵H,利用H对帧B做投影变换,获得B在A中四个顶点的坐标。

根据变换后的坐标等参数评估当前帧是否符合要求,如符合则继续进行拼接,否则放弃当前帧。

在进行拼接时,首先调整B的亮度与A匹配,然后根据变换坐标将B投射到A上,重合部分使用加权平均法进行融合。

3. 全景图生成

在对抽取的帧依次进行拼接后,会得到一幅初始全景图片,对初始全景图进行处理后,将得到最终的全景图像。

首先,要对初始全景图进行首尾对齐。

初始全景图首部和尾部会出现重复区域,因此需要对起始部分和和结尾部分再进行一次匹配,根据得到的变换坐标找到重复区域边界,然后对初始全景图进行裁剪,将重复部分去除。

其次,要去除初始全景图中的空白区域。

在拼接过程中,由于对帧进行了投影变换,原来矩形图像会出变形变,在拼接图像的顶部和底部都会出现空白区域。为了去除这些空白区域,在每一次拼接完成时,都要记录空白区域的范围,并通过比较得到空白区域的最大边界值,最后在生成全景图时,根据最大边界值裁去空白区域。

转换程序流程图

4.4视频转换程序的实现

转换程序采用C++语言实现,基于OPENCV视频库。主要代码如下:

5测试

本系统的测试主要采用黑盒测试。

5.1测试环境

(1)硬件环境

交互端硬件:ios智能设备、android智能设备、pc。

服务端硬件:cpu: E5506 2.13GHZ 内存:4G

(2)系统环境

交互端:支持html5的浏览器

服务端:windows server 2008

5.2系统功能测试

5.3运行效果图

6 总结

本项目研究了从视频序列到360度全景图的转换系统,主要利用特征匹配等算法实现全景图的转换功能,采用html5技术实现前端交互功能。

从所生成的全景图效果看,本系统与专业设备与软件生成还有一定差距,但本系统具有更好的兼容性,操作方便、快捷,适合用户的一般性要求。

参考文献

[1] 朱云芳,叶秀清,顾伟康.视频序列的全景图拼接技术.浙江大学,2006

[2] 江铁,朱桂斌,孙奥.全景图像拼接技术研究现状综述. 重庆通信学院,2012

[3] 汪松.基于SIFT算法的图像匹配方法研究.西安电子科技大学,2013

[4] 赵烨,蒋建国,洪日昌.基于RANSAC的SIFT匹配优化.合肥工业大学,2014

[5] 维基百科.panotools.http://wiki.panotools.org/Main_Page

(责编:郝孟佳、熊旭)

你可能感兴趣的:(360全景拼接,opencv)