基于unity3d的实景情景演绎训练系统

2014-10-21 12:55邵刚
电子世界 2014年23期

邵刚

【摘要】影像训练系统都是采取事先拍摄准备好视频资料用作训练,不能够根据教官的要求有足够的变化,或者就是对抗场景训练,场景受限,只能使用摄像机照射的位置的图像进行训练。本文通过介绍蓝屏抠像的视频图像处理技术,并将处理的图像加入到新的渲染引擎。

【关键词】虚拟训练;实景视频演绎;OpenCV

1.蓝屏抠像系统原理说明

抠像技术是视频编辑中常用的特技。“抠像”一词从早期电视制作中得来的。英文称作“key”,意思是吸取画面中的某一种颜色作为透明色,将它从画面中抠去,从而使背景透出来形成三层画面的叠加合成。这样在室内拍摄的人物经抠像后与各种场景叠加在一起,形成神奇的效果。于是我们在电影中可以看到人在空中飞行、真人明星和动物明星同台献艺等许多有趣的特技效果。在早期的电视制作中,抠像需要昂贵的硬件支持,且对拍摄的背景要求很严,需在特定的蓝背景下拍攝,光线的要求也很严格。现在的抠像技术已发展的很成熟,如蓝屏抠像和绿屏抠像等。利用不同的抠像工具可从各种不同画面内容的前景素材中进行透明通道的提取,最常用的是蓝背景和绿背景两种。原因在于,人身体的自然颜色中不包含这两种色彩,用他们来做背景不会和人物混在一起。如图1所示。

图1

2.基于opencv的蓝屏抠像系统

本文中使用的抠像由于需要实时进行图像抠像并进行实时的图像合成,所以采取的是OpenCV图像库来进行实时的图像检测,OpenCV是Intel OpenCV于1999年由Intel建立,如今由Willow Garage提供支持。OpenCV是一个基于(开源)发行的跨平台计算机视觉库,可以运行在Linux、Windows和Mac OS操作系统上。它轻量级而且高效——由一系列C函数和少量C++类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。

Opencv处理图像流程(如图2所示):通过DirectShow组件获得摄像机图像(由于OpenCV自带的读取摄像机图像的组件性能太差,所以使用底层的Directshow来获取摄像机图像,将图像传递给opencv经过多次的基础图像处理,腐蚀,膨胀,提取人体区域,并将人体边缘处理透明话等处理处理,将图像的纹理及相关透明数据通知unity渲染器,将图像渲染出),处理流程如图2所示。

(1)初始化 DirectShow;

(2)创建 Capture Graph Builder组件, 获取CaptureGraph接口;

(3)在 Filter Graph加入视频源过滤器;

(4)在Filter Graph加入AVI Decompressor Filter;

(5)在Filter Graph加入Sample Grabber Filter并设置媒体类型、缓冲模式;

(6)定义CSampleGrabberCB:public Isa-mpleGrabberCB在该类中重载BufferCB方法获取图像数据。在BufferCB中可以加入用户具体的图像处理函数;

(7)初始化 OpenCV;

(8)读取摄像机图像,跟背景图进行比较,剔除无效区域;

(9)图像二值化,进行形态学处理:腐蚀,膨胀等;

(10)轮廓识别:剔除无效区域,留下人体区域。

根据轮廓识别图像对本帧摄像机图像进行处理,并将其转化成unity3d纹理。

结果(如图3所示):

图3

3.使用unity3d渲染引擎融合图像

Unity3D游戏引擎是用于创建三维视频游戏、建筑可视化、实时三维动画等互动内容的专业级综合创作工具。2009年就被英国develop评入十大游戏引擎的Unity3D仍然保持自己快速的更新速度与开发者们的热捧。Unity3D开发的游戏跨平台非常容易,内置多项移动平台优化技术使其已成为最热门的手游游戏引擎。Unity3D的交互使图形化开发环境方便到极致,使得大型3D游戏也可以由少数做出来。Unity的火爆社区和独有的资产市场,使游戏开发者得到最方便的交流,让中国人不再缺少创意,不再受限于只有创意。Unity游戏引擎已成为业界游戏开发的最佳选择。

Unity3D已经涉及3D游戏、2D游戏、虚拟现实AR、3D Web、建筑、时装、商品宣传等越来越广泛的领域。Unity的使用者既有EA、NC Soft、Bigpoint等世界级游戏厂商,又有各个工作室,个人爱好者。目前Unity技术社区共有超过900,000注册开发人员。苹果应用商店里的Unity3D游戏也已超过1000款。

图4

Unity3D中播放游戏视频的方式在场景中创建一个Plane面对象,摄像机直直的照射在这个面上。 Unity支持的播放视频格式有.mov、.mpg、.mpeg、.mp4、.avi和.asf。只需将对应的视频文件拖拽入Project视图即可,它会自动生成对应的MovieTexture对象。将视频拖拽入Project视图中,如果视频中含有音频的话会对应生成audio文件,接着在Hierarchy视图中创建一个Plane对象视频将在它之上播放,Directional light世界定向光用于照亮整个游戏场景,最后Main Camera对象将直直的照射在Plane对象,然后将opencv识别出的图像,根据透明度与绘制在plane上的纹理图像进行融合显示,结果如图4所示。

参考文献

[1]吴志达.一个基于Unity3d游戏引擎的体感游戏研究与实现[D].广州:中山大学,2012.

[2]宣雨松.Unity游戏开发[M].北京:人民邮电出版社,2012.

[3]DirectX 9.0 SDK Document[M].US:Microsoft Corporation,2002.