论文部分内容阅读
摘要:本文主要研究视频拼接的特写联动系统的实现过程及主要算法。通过对已有算法的研究,提出一种新的优化Stitcher算法,使系统在OPENCV平台上实现了将多路小范围监控视频拼接成一个全局范围的视频,同时解决了跨场景跟踪困难的问题,改善了拼接效果。
关键词:视频拼接;跟踪定位;OPENCV
[基金资助]:全国大学生创新创业训练项目(2013XKCX210)广西高校科学技术研究项目:(2013YB092)
引言
随着安防向着智能化的进一步发展,越来越多的领域对传统意义上的视频监控提出了更多的要求。传统的监控摄像机多为固定摄像机,监控视野狭窄,而且运动目标容易超出监控视野范围,而不能对其连续跟踪,这也就导致了监控漏洞的出现。如果能够建立一种既能全局监控掌握整体情况,又能针对感兴趣目标进行跟踪特写的系统,就可以很好地解决全局监控与局部跟踪不可兼得的难题,因此提出了基于视频拼接的特写联动系统。
1 介绍OPENCV
OPENCV是一个开源的跨平台计算机视觉库,可以运行在Linux、Windows和Mac OS等多个操作系统上。它轻量级而且高效,由一系列 C 函数和少量 C++ 类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。
2 图像拼接
OPENCV提供的专门用于全景拼接的类Stitcher,该类可以对无序的任意张图片进行全景拼接,拼接效果如图2.1所示。
(a)
图2.1 Stitcher类的拼接效果
可以看出,效果是十分不错的。不过在时间的处理上,Stitcher封装的算法表现的并不令人满意,对两张320*240的JPG图像,花费了9968毫秒才完成了拼接。所以这个类也只适合用来做图片的拼接,想要在视频中做实时的拼接处理是不可能的。
3 视频拼接
Stitcher封装的算法,除了时间,其他各方面都令人满意。假如需要将其运用到视频拼接上,以每秒播放20帧为例,速度需要提高100多倍,光优化代码是不现实的。
不过经过对Stitcher类的详细了解,可以对拼接两张图片的条件进行总结,就是相机参数和img_mask图片。也就是说,不需要每一次都计算这两个东西,只需要提取视频的第一帧进行拼接,然后保存这两个参数,视频之后的所有帧直接用就行了。OPENCV提供了Stitcher所有的C源代码,对应的拼接算法封装在estimateTransform和composePanorama函数中。只需要将这两个函数融合成一个,将其中涉及到相机参数(代码中定义为cameras_)和img_mask图片(代码中定义为mask_warped)的变量转换成Stitcher类的变量,然后重新定义一个函数,将composePanorama尾部的图片融入代码复制出来就行了。代码修改后,同样是320*240的两张图片,耗时157毫秒。这样视频拼接的功能就可以用Stitcher类来实现了。
4 跟踪定位
对图像场景中的物体进行跟踪,首先需要知道物体是否是活动的。假如物体一直处于不运动的状态,那么这种情况应该属于图像识别的范畴。如果物体运动,必将产生位移,也就是相对于上一帧发生了像素偏差,然而,图像背景并没有移动。这样一来跟踪算法显而易见。
首先需要记录第一帧的图像数据,然后记录第二帧的图像数据,两帧数据图像做对比,定义如下计算公式:
其中,x,y分别是像素的坐标,threshold是阈值。一般来说,阈值为零,表示像素没有发生位移。不过在实际情况下,考虑到光线和天气的影响,像素会在人眼分辨不出来的情况下发生变化,所以阈值就不同的场景而定。图片的运算结果如图4.1所示,考虑到实际情况,需要对结果进行滤波处理,之后进行像素膨胀处理,这两个步骤主要是将图像中有明显位置移动的物体保留下来,过滤掉因光照、天气产生的噪声。为了达到更好的效果,也可以加入对时间的判断,具体算法可以参见Gary Bradski和Adrian kaebler的learning Opencv[5]的第九章。
5 实验结果及分析
实验结果基本上每个小章节的结尾都已经给出,以下给出系统整体运行的结果。本文选用三个校园取景的视频作为实验视频,采用VS2008编译器,搭建OPENCV2.2.4的环境,运行系统为WINDOWS XP,运行效果如图5.1所示,时间耗费如表5.2所示。
图5.1 拼接及跟踪的结果
实验采用两个480*360大小的avi视频,实时拼接耗时360毫秒,加上跟踪算法总共消耗386毫秒。实际应用中。从源代码分析,主要消耗时间的过程有:图片的重新投影(代码中定义为warp),耗时109毫秒。投影后的图片与各自的二值图像标记混合(代码中定义为feed),耗时32毫秒。所有图像融合(代码中定义为blend),耗时47秒。其中wrap和feed执行了多次,blend执行一次。
6 总结
本文对视频拼接的特写联动系统的实现进行了详细的介绍。主要通过优化OPENCV图像处理库来编写系统程序代码,通过优化Stitcher类算法,从而实现所需的特定功能。融合了跟踪算法,有效解决了跨场景跟踪的难题,有一定的实用性和研究价值。
参考文献
[1] MATTHEW BROWN* AND DAVID G LOWE. Automatic Panoramic Image Stitching using Invariant Festures, December 2006
[2] 王小强,陈临强,梁旭. 实时全自动视频拼接方法, 2011
[3] David G. Lowe. Distanctive Image Festure from Scale-Invariant Keypoints, 2004
[4] Bill Triggs,Philip McLauchlan,Richard Hartley. Bundle Adjustment – A modern Synthesis, 2000
[5] Gray Bradski and Adrian Kaehler. Learning OpenCV, 2008
[作者简介]:姓名:王春利(1980-), 男,吉林长春人,硕士,讲师,从事差分方程、图像视频处理相关理论研究。邮箱:[email protected]
关键词:视频拼接;跟踪定位;OPENCV
[基金资助]:全国大学生创新创业训练项目(2013XKCX210)广西高校科学技术研究项目:(2013YB092)
引言
随着安防向着智能化的进一步发展,越来越多的领域对传统意义上的视频监控提出了更多的要求。传统的监控摄像机多为固定摄像机,监控视野狭窄,而且运动目标容易超出监控视野范围,而不能对其连续跟踪,这也就导致了监控漏洞的出现。如果能够建立一种既能全局监控掌握整体情况,又能针对感兴趣目标进行跟踪特写的系统,就可以很好地解决全局监控与局部跟踪不可兼得的难题,因此提出了基于视频拼接的特写联动系统。
1 介绍OPENCV
OPENCV是一个开源的跨平台计算机视觉库,可以运行在Linux、Windows和Mac OS等多个操作系统上。它轻量级而且高效,由一系列 C 函数和少量 C++ 类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。
2 图像拼接
OPENCV提供的专门用于全景拼接的类Stitcher,该类可以对无序的任意张图片进行全景拼接,拼接效果如图2.1所示。
(a)
图2.1 Stitcher类的拼接效果
可以看出,效果是十分不错的。不过在时间的处理上,Stitcher封装的算法表现的并不令人满意,对两张320*240的JPG图像,花费了9968毫秒才完成了拼接。所以这个类也只适合用来做图片的拼接,想要在视频中做实时的拼接处理是不可能的。
3 视频拼接
Stitcher封装的算法,除了时间,其他各方面都令人满意。假如需要将其运用到视频拼接上,以每秒播放20帧为例,速度需要提高100多倍,光优化代码是不现实的。
不过经过对Stitcher类的详细了解,可以对拼接两张图片的条件进行总结,就是相机参数和img_mask图片。也就是说,不需要每一次都计算这两个东西,只需要提取视频的第一帧进行拼接,然后保存这两个参数,视频之后的所有帧直接用就行了。OPENCV提供了Stitcher所有的C源代码,对应的拼接算法封装在estimateTransform和composePanorama函数中。只需要将这两个函数融合成一个,将其中涉及到相机参数(代码中定义为cameras_)和img_mask图片(代码中定义为mask_warped)的变量转换成Stitcher类的变量,然后重新定义一个函数,将composePanorama尾部的图片融入代码复制出来就行了。代码修改后,同样是320*240的两张图片,耗时157毫秒。这样视频拼接的功能就可以用Stitcher类来实现了。
4 跟踪定位
对图像场景中的物体进行跟踪,首先需要知道物体是否是活动的。假如物体一直处于不运动的状态,那么这种情况应该属于图像识别的范畴。如果物体运动,必将产生位移,也就是相对于上一帧发生了像素偏差,然而,图像背景并没有移动。这样一来跟踪算法显而易见。
首先需要记录第一帧的图像数据,然后记录第二帧的图像数据,两帧数据图像做对比,定义如下计算公式:
其中,x,y分别是像素的坐标,threshold是阈值。一般来说,阈值为零,表示像素没有发生位移。不过在实际情况下,考虑到光线和天气的影响,像素会在人眼分辨不出来的情况下发生变化,所以阈值就不同的场景而定。图片的运算结果如图4.1所示,考虑到实际情况,需要对结果进行滤波处理,之后进行像素膨胀处理,这两个步骤主要是将图像中有明显位置移动的物体保留下来,过滤掉因光照、天气产生的噪声。为了达到更好的效果,也可以加入对时间的判断,具体算法可以参见Gary Bradski和Adrian kaebler的learning Opencv[5]的第九章。
5 实验结果及分析
实验结果基本上每个小章节的结尾都已经给出,以下给出系统整体运行的结果。本文选用三个校园取景的视频作为实验视频,采用VS2008编译器,搭建OPENCV2.2.4的环境,运行系统为WINDOWS XP,运行效果如图5.1所示,时间耗费如表5.2所示。
图5.1 拼接及跟踪的结果
实验采用两个480*360大小的avi视频,实时拼接耗时360毫秒,加上跟踪算法总共消耗386毫秒。实际应用中。从源代码分析,主要消耗时间的过程有:图片的重新投影(代码中定义为warp),耗时109毫秒。投影后的图片与各自的二值图像标记混合(代码中定义为feed),耗时32毫秒。所有图像融合(代码中定义为blend),耗时47秒。其中wrap和feed执行了多次,blend执行一次。
6 总结
本文对视频拼接的特写联动系统的实现进行了详细的介绍。主要通过优化OPENCV图像处理库来编写系统程序代码,通过优化Stitcher类算法,从而实现所需的特定功能。融合了跟踪算法,有效解决了跨场景跟踪的难题,有一定的实用性和研究价值。
参考文献
[1] MATTHEW BROWN* AND DAVID G LOWE. Automatic Panoramic Image Stitching using Invariant Festures, December 2006
[2] 王小强,陈临强,梁旭. 实时全自动视频拼接方法, 2011
[3] David G. Lowe. Distanctive Image Festure from Scale-Invariant Keypoints, 2004
[4] Bill Triggs,Philip McLauchlan,Richard Hartley. Bundle Adjustment – A modern Synthesis, 2000
[5] Gray Bradski and Adrian Kaehler. Learning OpenCV, 2008
[作者简介]:姓名:王春利(1980-), 男,吉林长春人,硕士,讲师,从事差分方程、图像视频处理相关理论研究。邮箱:[email protected]