許嘉琳 朱耀麟 武桐



摘 要:針對虛擬場景中實時視頻顯示過程中設計流程復雜,代碼多,畫面不暢等問題,提出了基于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-),女,碩士,講師.研究領域:虛擬場景建模與實現.