邵剛
【摘要】影像訓(xùn)練系統(tǒng)都是采取事先拍攝準(zhǔn)備好視頻資料用作訓(xùn)練,不能夠根據(jù)教官的要求有足夠的變化,或者就是對抗場景訓(xùn)練,場景受限,只能使用攝像機照射的位置的圖像進(jìn)行訓(xùn)練。本文通過介紹藍(lán)屏摳像的視頻圖像處理技術(shù),并將處理的圖像加入到新的渲染引擎。
【關(guān)鍵詞】虛擬訓(xùn)練;實景視頻演繹;OpenCV
1.藍(lán)屏摳像系統(tǒng)原理說明
摳像技術(shù)是視頻編輯中常用的特技?!皳赶瘛币辉~從早期電視制作中得來的。英文稱作“key”,意思是吸取畫面中的某一種顏色作為透明色,將它從畫面中摳去,從而使背景透出來形成三層畫面的疊加合成。這樣在室內(nèi)拍攝的人物經(jīng)摳像后與各種場景疊加在一起,形成神奇的效果。于是我們在電影中可以看到人在空中飛行、真人明星和動物明星同臺獻(xiàn)藝等許多有趣的特技效果。在早期的電視制作中,摳像需要昂貴的硬件支持,且對拍攝的背景要求很嚴(yán),需在特定的藍(lán)背景下拍攝,光線的要求也很嚴(yán)格?,F(xiàn)在的摳像技術(shù)已發(fā)展的很成熟,如藍(lán)屏摳像和綠屏摳像等。利用不同的摳像工具可從各種不同畫面內(nèi)容的前景素材中進(jìn)行透明通道的提取,最常用的是藍(lán)背景和綠背景兩種。原因在于,人身體的自然顏色中不包含這兩種色彩,用他們來做背景不會和人物混在一起。如圖1所示。
圖1
2.基于opencv的藍(lán)屏摳像系統(tǒng)
本文中使用的摳像由于需要實時進(jìn)行圖像摳像并進(jìn)行實時的圖像合成,所以采取的是OpenCV圖像庫來進(jìn)行實時的圖像檢測,OpenCV是Intel OpenCV于1999年由Intel建立,如今由Willow Garage提供支持。OpenCV是一個基于(開源)發(fā)行的跨平臺計算機視覺庫,可以運行在Linux、Windows和Mac OS操作系統(tǒng)上。它輕量級而且高效——由一系列C函數(shù)和少量C++類構(gòu)成,同時提供了Python、Ruby、MATLAB等語言的接口,實現(xiàn)了圖像處理和計算機視覺方面的很多通用算法。
Opencv處理圖像流程(如圖2所示):通過DirectShow組件獲得攝像機圖像(由于OpenCV自帶的讀取攝像機圖像的組件性能太差,所以使用底層的Directshow來獲取攝像機圖像,將圖像傳遞給opencv經(jīng)過多次的基礎(chǔ)圖像處理,腐蝕,膨脹,提取人體區(qū)域,并將人體邊緣處理透明話等處理處理,將圖像的紋理及相關(guān)透明數(shù)據(jù)通知unity渲染器,將圖像渲染出),處理流程如圖2所示。
(1)初始化 DirectShow;
(2)創(chuàng)建 Capture Graph Builder組件, 獲取CaptureGraph接口;
(3)在 Filter Graph加入視頻源過濾器;
(4)在Filter Graph加入AVI Decompressor Filter;
(5)在Filter Graph加入Sample Grabber Filter并設(shè)置媒體類型、緩沖模式;
(6)定義CSampleGrabberCB:public Isa-mpleGrabberCB在該類中重載BufferCB方法獲取圖像數(shù)據(jù)。在BufferCB中可以加入用戶具體的圖像處理函數(shù);
(7)初始化 OpenCV;
(8)讀取攝像機圖像,跟背景圖進(jìn)行比較,剔除無效區(qū)域;
(9)圖像二值化,進(jìn)行形態(tài)學(xué)處理:腐蝕,膨脹等;
(10)輪廓識別:剔除無效區(qū)域,留下人體區(qū)域。
根據(jù)輪廓識別圖像對本幀攝像機圖像進(jìn)行處理,并將其轉(zhuǎn)化成unity3d紋理。
結(jié)果(如圖3所示):
圖3
3.使用unity3d渲染引擎融合圖像
Unity3D游戲引擎是用于創(chuàng)建三維視頻游戲、建筑可視化、實時三維動畫等互動內(nèi)容的專業(yè)級綜合創(chuàng)作工具。2009年就被英國develop評入十大游戲引擎的Unity3D仍然保持自己快速的更新速度與開發(fā)者們的熱捧。Unity3D開發(fā)的游戲跨平臺非常容易,內(nèi)置多項移動平臺優(yōu)化技術(shù)使其已成為最熱門的手游游戲引擎。Unity3D的交互使圖形化開發(fā)環(huán)境方便到極致,使得大型3D游戲也可以由少數(shù)做出來。Unity的火爆社區(qū)和獨有的資產(chǎn)市場,使游戲開發(fā)者得到最方便的交流,讓中國人不再缺少創(chuàng)意,不再受限于只有創(chuàng)意。Unity游戲引擎已成為業(yè)界游戲開發(fā)的最佳選擇。
Unity3D已經(jīng)涉及3D游戲、2D游戲、虛擬現(xiàn)實AR、3D Web、建筑、時裝、商品宣傳等越來越廣泛的領(lǐng)域。Unity的使用者既有EA、NC Soft、Bigpoint等世界級游戲廠商,又有各個工作室,個人愛好者。目前Unity技術(shù)社區(qū)共有超過900,000注冊開發(fā)人員。蘋果應(yīng)用商店里的Unity3D游戲也已超過1000款。
圖4
Unity3D中播放游戲視頻的方式在場景中創(chuàng)建一個Plane面對象,攝像機直直的照射在這個面上。 Unity支持的播放視頻格式有.mov、.mpg、.mpeg、.mp4、.avi和.asf。只需將對應(yīng)的視頻文件拖拽入Project視圖即可,它會自動生成對應(yīng)的MovieTexture對象。將視頻拖拽入Project視圖中,如果視頻中含有音頻的話會對應(yīng)生成audio文件,接著在Hierarchy視圖中創(chuàng)建一個Plane對象視頻將在它之上播放,Directional light世界定向光用于照亮整個游戲場景,最后Main Camera對象將直直的照射在Plane對象,然后將opencv識別出的圖像,根據(jù)透明度與繪制在plane上的紋理圖像進(jìn)行融合顯示,結(jié)果如圖4所示。
參考文獻(xiàn)
[1]吳志達(dá).一個基于Unity3d游戲引擎的體感游戲研究與實現(xiàn)[D].廣州:中山大學(xué),2012.
[2]宣雨松.Unity游戲開發(fā)[M].北京:人民郵電出版社,2012.
[3]DirectX 9.0 SDK Document[M].US:Microsoft Corporation,2002.