李錦++童立靖++英祥++楊金秋


摘要:人體運動的仿真模擬是虛擬現實、增強現實和混合現實等領域的重要研究內容。本文通過Kinect設備掃描得到人體運動骨骼數據,根據骨骼矢量變化計算三維虛擬人體的骨骼的旋轉角度,利用骨骼皮膚綁定技術實現人體的動態模型,并使用定時器控制三維人體模型的動態刷新,從而完成真實人體行走姿態的模擬。實驗表明通過Kinect采集得到的人體運動數據可以實時驅動三維人體模型,完成人體行走姿態的模擬。
關鍵詞:三維動態模型;動作捕捉;人體姿態模擬;人體動畫
中圖分類號:TP391 文獻標識碼:A 文章編號:1007-9416(2017)10-0058-04
1 引言
隨著三維掃描技術和計算機圖形學的發展以及計算機性能的提高,三維模型已經成為繼聲音、圖像和視頻之后的第四種多媒體數據類型。對三維模型的使用與研究在娛樂、醫學、機械工程、計算機仿真和虛擬現實、工業應用等領域得到了認可,日益發達的互聯網技術為人們對三維模型的共享和處理提供了條件,這些都導致對三維模型應用需求的增長。人體運動姿態模擬是動作捕捉技術的一個重要方向,用Kinect設備獲取數據應用到人體運動姿態研究中效率高、操作簡便,在各領域得到廣泛應用。
針對現有的動作捕獲技術,許多的國內外學者對人體的運動姿態模擬做了大量的研究。HUANG,TEJERA等人通過4D性能捕獲數據為人物的動畫提出了一個新穎的混合表示方法,并結合了骨骼控制與表面運動圖[1],該方法支持生成滿足用戶指定約束的新表面序列關鍵幀或目標骨骼運動。Gao,Lai等人提出一個新的旋轉不變量變形表示和一種新穎的重建算法來同時重建姿態和局部旋轉[2],該方法提供有約束的變形,并為網格變形和非剛性物體的變形提出一種新的數據驅動方法。趙正旭等人提出一種通過采用貝塞爾曲線和數值數據編輯人體運動姿態的模擬方法[3],運用 OpenGL 構建虛擬人體模型,利用動作捕捉技術設計人體運動姿態的模擬程序。陳忠等人提出一種基于骨骼模型的人物運動模型的算法,通過讀取BVH格式文件的動畫模型,實現對人體動畫的模擬[4],BVH格式的文件提供了關于人體關節的運動信息,這將大大減少動畫的計算量。這些學者主要側重于采用特定的人體動作數據格式完成關節的運動和人體的運動姿態模擬。
本文采用的是廣泛使用的OBJ文件格式,通過Kinect設備采集真實的人體運動骨骼數據,以VC++和 OpenGL為工具,讀取動作捕捉文件數據。通過與人體運動的骨骼數據綁定實現三維虛擬人體運動姿態的模擬。
2 人體運動骨骼數據的捕獲
三維人體運動數據的采集是人體運動姿態模擬過程中非常重要的一個環節,骨骼數據的獲取是本課題的基礎工作。運動捕捉數據的質量直接決定了后續三維動作重建的效果,骨骼追蹤技術通過處理深度數據來建立人體各個關節的坐標,骨骼追蹤能夠確定人體的各個部分,如哪部分是手,頭部,以及身體,還能確定他們所在的位置。要想將Kinect用于三維動作捕捉,重點關注的是如何能夠獲取人體的三維動作信息。首先,Kinect利用采用TOF技術測量深度來獲取人體的深度信息,通過隨機決策森林等算法對人體的各個部分進行不同的標記,最后從各個不同的標記中提取人體的骨架信息[5],即骨骼關節點表征的人體,從而可以保存人體的動作數據。相對與Kinect一代的Light Coding技術,第二代采集到的骨骼數據相對較為準確。
在Kinect2.0中,是通過25個關節點來表示一個骨架的。當Kinect的視野范圍開始捕捉到人體的時候,人體的25個關節點的位置就能被Kinect找到,位置通過(x,y,z)坐標來表示。人體的各關節點位置通過(x,y,z)坐標來表示,與深度圖像空間坐標不同的是,這些關節點的坐標單位是米。坐標軸x,y,z是深度感應器實體的空間x,y,z坐標軸。這個坐標系是右手螺旋的,Kinect感應器處于原點上,z坐標軸是與Kinect感應的朝向一致的。y軸正半軸向上延伸,x軸正半軸(從Kinect感應器的視角來看)向左延伸。NUI骨骼跟蹤分主動和被動兩種模式,提供最多兩副完整的骨骼跟蹤數據。主動模式下需要調用相關幀讀取函數獲得用戶骨骼數據,而被動模式下還支持額外最多四人的骨骼跟蹤,但是在該模式下僅包含了用戶的位置信息,不包括詳細的骨骼數據。
本課題采用基于TOF技術的Kinect2.0,使用NUI骨骼跟蹤的主動模式獲取人體的運動骨骼數據,通過采集的得到的動作數據來驅動三維模型的運動,以此來真實地模擬人體的運動姿態。
3 人體運動姿態的合成
人體模型的運動合成是由Kinect運動捕獲數據驅動所得,本文使用的模型為三維網格模型。現有的三維網格模型格式有多種,例如OFF格式、OBJ格式等等,本文釆用的是OBJ格式的三維網格模型。三維網格模型是由許多三角面片組成,三角面片由邊的信息構成,邊是由頂點信息定義的。本文在獲取Kinect深度數據的基礎上,采用OpenCV進行人體姿態獲取,通過更改OBJ格式中各頂點的位置信息驅動三維人體模型運動。
3.1 關節點的坐標提取
在Kinect中利用骨骼追蹤技術通過處理深度數據來建立人體各個關節的坐標,骨骼追蹤能夠確定人體的各個部位,以及各個部位所在的坐標位置。在初始化并打開骨骼跟蹤后,可以從Skeleton Stream中獲取到骨骼數據。Skeleton Stream產生的每一幀數據skeleton Frame都是一個骨骼對象集合。包含了一個骨架數據結構的數組,其中每一個元素代表著一個被骨架追蹤系統所識別的一個骨架信息。每一個骨架信息包含有描述骨骼位置以及骨骼關節的數據。每一個關節有一個唯一標示符如頭(head)、肩(shoulder)、肘(dlbow)等信息和對應的三維坐標數據。
Kinect能夠追蹤到的骨骼數量是一個常量。在整個應用程序中為數組分配內存。循環遍歷skeleton Frame,每一次處理一個骨骼。通過繪圖函數將讀取到的骨骼關節點繪制出來,如圖1所示。
3.2 肢體的變換矩陣
對于人體的三維點云數據中的某點繞關節點A旋轉到的過程為:先將關節點A平移到坐標原點O,點平移到,點平移到;再計算點經過角度旋轉到的旋轉矩陣,并根據該矩陣計算點旋轉后的位置;最后根據反向平移矩陣將各點平移回去。平移矩陣T如式(1)所示:
(1)
其中,平移向量m。
三維人體模型點云數據中的點P繞其綁定的關節點A旋轉角度到Q位置的幾何關系如圖2所示,三維人體模型中的各點繞關節點的旋轉角度依式(2)計算,法矢量u依式(3)計算。
(2)
u= (3)
根據旋轉關節點A平移到原點O得到的平移矩陣T重新計算三維人體模型點云數據中各點的位置,然后乘以旋轉矩陣來完成角度的旋轉。旋轉矩陣依式(4)計算:
(4)
其中,,其中()是u的單位向量的分量形式。
完成模型中各點的旋轉后再將其反向平移回原位置,其反向平移矩陣如式(5)所示。
(5)
三維人體模型中各點的總變換矩陣依式(6)計算。
(6)
4 人體運動動畫的實現
人體的運動是由關節點的變化實現的,關節點之間是以一種“父子”關系表示的。人體模型的動畫根據“父子”關節點間的關系實現。關節點通過骨架的鏈接結構有層次地組織在一起,從根節點到末梢節點,關節點的旋轉變化是一層聯系著一層變化的。Kinect采集到的數據只有關節點的位置信息,沒有其對應的旋轉信息。本文通過一定的算法將各個關節點獨立的位置信息轉換為具有一定骨架層次結構的并包含有骨架旋轉的運動數據信息。具體算法實現如下:
(1)通過Kinect讀取人體運動關鍵幀的關節點位置信息,計算每一個關節點的變換矩陣;
(2)利用變換矩陣對當前關節點進行旋轉變換;
(3)如果該骨骼節點有子節點,利用父節點的旋轉平移算出子節點的平移向量,并平移子骨骼節點;
(4)利用人體運動的下一關鍵幀讀取關節點位置信息,計算變換矩陣。重復第(2)步。
三維虛擬人體模型的動畫采取定時器的方法,多次調用窗口的繪制函數實現人體的動畫顯示,計算機動畫的控制要素是時間。Windows為程序開發提供SetTimer()函數來為應用程序分配一個系統定時器,通過該函數可以設置時間間隔,Windows將按設定的周期向程序發送消息。在消息響應函數OnTimer()中編寫程序實現動畫控制。
5 實驗結果
基于前文的算法,本文實現了一個原型系統:基于Kinect人體動畫合成系統。該系統是在Window 7平臺下幵發的,系統中的主要算法是用C++語言實現的,三維網格模型由OpenGL繪制,人體的運動數據通過Kinect設備獲取。本文采用三維人體模型模擬真實的人體行走姿態。通過Kinect采集到的人體行走關節圖如圖3所示。
基于圖3的行走序列的骨骼數據所完成的三維虛擬人體模型的行走姿態模擬序列如圖4所示。
6 結語
近幾年來,動作捕捉技術漸漸成為了人體運動姿態模擬研究中的一項關鍵技術,通過模擬人體運動姿態以實現人體運動動作的識別以及自由編輯控制變得非常關鍵。本文通過Kinect提取人體骨骼關節點數據,根據骨骼矢量變化計算三維虛擬人體的骨骼的旋轉角度,利用骨骼皮膚綁定技術實現人體動畫,并利用定時器控制三維人體模型的動畫,從而完成真實人體行走姿態的模擬。實驗表明,本原型系統可以有效地實現人體的動畫模擬。該技術在舞蹈與表演的教學訓練、體育競技的運動分析、個性化人體角色的影視特效生成等領域具有較好的應用前景。
在本課題的研究過程中發現,在人體姿態模擬的過程中有些人體的運動部位發生了形變失真。針對人體運動中的形變失真問題,提出相應的形變處理算法是下一步需要研究的具體內容。
參考文獻
[1]Huang P,Tejera M,Collomosse J,et al.Hybrid Skeletal-Surface Motion Graphs for Character Animation from 4D Performance Capture[J].Acm Transactions on Graphics,2015,34(2):1-14.
[2]Gao L, Lai Y K, Liang D, et al. Efficient and Flexible Deformation Representation for Data-Driven Surface Modeling[J]. Acm Transactions on Graphics,2016,35(5):158.
[3]趙正旭,戴歡,趙文彬,等.基于慣性動作捕捉的人體運動姿態模擬[J].計算機工程, 2012,38(5):5-8.
[4]陳忠,趙學輝,孫秋瑞.基于OpenGL的三維人體運動模型實現[J].計算機應用,2008,28(S2):310-312.
[5]L. A. Schwarz, A. Mkhitaryan, D. Mateus, et al., Human skeleton tracking from depth data using geodesic distances and optical flow. Image and VisionComputing, 2012:217-226.