虚拟场景中的实时视频显示研究

2015-05-30 16:26许嘉琳朱耀麟武桐
软件工程 2015年4期

许嘉琳 朱耀麟 武桐

摘 要:针对虚拟场景中实时视频显示过程中设计流程复杂,代码多,画面不畅等问题,提出了基于Kinect摄像头的实时视频添加方法。该方法以Billboard技术为基础,利用Kinect对现实场景进行彩色数据和深度数据捕捉,并在虚拟场景中进行实时渲染和显示,最终实现实时视频子窗口的添加工作。整个程序设计流程简单,渲染效果画面流畅。

关键词:虚拟场景;实时视频显示;Kinect;抠图

中图分类号:TP391.41 文献标识码:A

Abstract:For the problems of complex design process,more codes, not smooth screen.The method that used Kinect camera to add the child window of real-time video is proposed.This method based on billboard,used Kinect to capture color datas and depth datas,then displayed and rendered datas in virtual scene,and achieved the work of live video sub-window finally.The whole process designed simple.The entire virtual scene was smooth and more realistic.It makes the foundation of the application about the natural matting in virtual scene.

Keywords:virtual scene;real-time video displayed;Kinect;matting

1 引言(Introduction)

虚拟场景漫游技术的产生和发展,通过其对古遗址和古文物的展示,既满足了人们对古遗址和古文物了解的需求,也解决了古遗址和已破损的文物难以展示的难题,并对已有遗址文物起到了保护作用。目前,有很多人对虚拟场景漫游技术进行了研究[1-3]。文献[1]介绍了虚拟现实技术在古建筑复原和数字化博物馆等建筑中的应用,文献[2,3]介绍了基于OpenGL的虚拟场景漫游系统的一些创建方法。然而,以上系统以计算机屏幕作为观察虚拟场景的窗口,沉浸感较弱。本文以Kinect摄像头为硬件基础进行彩色数据捕捉,在实现大型复杂虚拟场景的创建和显示过程中,添加实时视频子窗口,将包含人物的现实场景在虚拟场景中流畅的显示出来,使人们在虚拟场景中有身临其境的感觉,增加了系统的沉浸感。另外,利用Kinect摄像头进行包含人物的深度数据采集,实现自然抠图,为自然抠图在基于OpenGL的虚拟场景中的应用提供了基础。

本文第一部分主要介绍了Kinect进行数据捕捉及对捕捉到的数据进行相关处理的过程,第二部分主要介绍了基于Kinect的虚拟场景中的实时视频显示原理及编程流程和主要调用函数源代码,最后对本文内容进行了总结。

2 基于Kinect的数据流捕捉(Data stream capture

based on Kinect)

随着Kinect for Windows的推出,与其相关的开发和研究越来越多,应用逐渐广泛。Kinect主要包括彩色摄像头,红外发射摄像头和红外接收摄像头。如图1所示为Kinect进行捕捉的主框架。Kinect进行数据流捕捉后传入电脑,由配置了Kinect SDK和OpenNI的VS2010平台对数据流进行相关处理操作,最终得到做需要的信息并进行信息的处理应用。

其中,彩色数据流系统提供两种格式,包括32位RGB格式和16位YUV格式,本文主要采用16为YUV格式,即分辨率为640×480。当Kinect连接到计算机,为保证30FPS的数据帧率,将捕捉得到1280×1024分辨率的彩色数据流压缩转换成RGB格式后通过数据线传递,并在应用前解压数据得到所需要的格式的数据。

本文采用Kinect for Windows SDK开发包中的NuiInitialize(DWORD dwFlags)函数对Kinect进行初始化。在初始化过程中,首先处理彩色数据流和深度数据流,然后处理用户索引信息并根据用户索引值将颜色信息追加到深度数据图中,最后处理骨骼数据流,得到骨骼跟踪信息。NuiImageStreamOpen()函数用于打开对NUI设备的访问通道,使Kinect可以接受彩色数据流,深度数据流和骨骼数据流,并设置图像分辨率。然后调用NuiImageStreamGetNextFrame()函数读取彩色数据信息和深度数据信息。采用LockRect函数对Kinect捕捉到的纹理里进行锁定,进而对纹理表面的任意像素点进行读写操作,即可以绘制出任意一个像素。Kinect捕捉到的数据流组成一个一个帧,帧序列形成视频影像,为不断得到新的视频信息,我们通过NuiImageStreamGetNextFrame函数进行帧提取操作,最终得到相关数据流信息。如图2和图3分别为Kinect的彩色数据效果图和深度数据效果图。

3 基于Kinect的实时视频显示(Real-time video display based on Kinect)

本文采用Billboard技术实现实时视频显示,即实现实时视频子窗口的创建。主要方法是将Kinect捕捉到的实时视频作为纹理贴图贴在OpenGL绘制的多边形上,该多边形的法向量始终与漫游时的视线方向平行,是视频贴图随视角的变化而变化,进而得到视频子窗口,节省了内存空间,提高了场景渲染的效率。在整个过程中,以glTexSubImage2D()函数不断刷新贴图使贴图动态化,以GL_QUADS模式进行多边形的绘制工作,具体实现流程图如图4所示。

实时视频子窗口渲染过程中针对因窗口尺寸参数问题而出现的马赛克现象(图5),本文定义窗口初始尺寸代码为:#define width 640 #define height 480。针对窗口尺寸变化操作,采用倍数的方法实现。最终添加视频效果图如图6所示。

4 结论(Conclusion)

本文通过Kinect摄像头对现实场景进行彩色数据捕捉,并将捕捉到的实时视频添加到场景漫游系统中,最终实现了实时视频子窗口的添加工作,大大提高了虚拟场景的沉浸感。

参考文献(References)

[1] 周巍.谈虚拟现实技术在建筑设计中的应用[J].科技向导,2013(23):367.

[2] 庞中磊.基于OpenGL的三维场景可视化研究及实现[D].天津师范大学:2011.

[3] 廖毅.3DS MAX建模技术在虚拟现实场景中的应用[J].中国科教创新导刊,2011(18):113.

[4] Andreas Kolb,Erhardt Barth,Reinhard Koch,Rasmus Lar-sen.Time-of-Flight Cameras in Computer Graphic[J].Computer Graphics Forum,2010,29(01):141-159.

作者简介:

许嘉琳(1988-),女,硕士生.研究领域:虚拟现实.

朱耀麟(1977-),男,博士,副教授.研究领域:数字媒体及三维可视化技术.

武 桐(1982-),女,硕士,讲师.研究领域:虚拟场景建模与实现.