邵剛
【摘要】影像訓練系統都是采取事先拍攝準備好視頻資料用作訓練,不能夠根據教官的要求有足夠的變化,或者就是對抗場景訓練,場景受限,只能使用攝像機照射的位置的圖像進行訓練。本文通過介紹藍屏摳像的視頻圖像處理技術,并將處理的圖像加入到新的渲染引擎。
【關鍵詞】虛擬訓練;實景視頻演繹;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.