◆石慧煊 張同鋒 陳偉偉
(中國電子科技集團公司第二十八研究所共性產品中心 江蘇 210007)
動作捕捉是利用機械裝置、光學或傳感器等設備獲取人體或其他物體運動數據,并將這些運動姿態重現的技術[1]。通過該技術將采集到的體感數據輸入至虛擬仿真訓練系統,驅動虛擬角色模型動作,形成虛實融合自然體感交互,是實現高沉浸感虛擬訓練的主要手段[2]。
本文針對動作捕捉數據的采樣頻率高、單幀數據量大、不利于網絡傳輸等問題,提出一種基于信息冗余壓縮的動作捕捉骨骼數據編碼優化方法,有效提升多人協同體感交互體驗。
體感數據指通過全身動作捕捉設備獲取的身體各關鍵節點位置與旋轉數據,每一幀數據表示全身關鍵節點的某個瞬時狀態[3],體感數據采樣率可達100Hz。
全身共19個關鍵節點,每個節點包含位置與旋轉兩部分信息,其中位置信息通過3個單精度浮點數記錄,分別表示以米為單位的空間坐標X、Y、Z。旋轉信息同樣通過3個單精度浮點數記錄,分別表示以X、Y、Z為旋轉軸的歐拉角度值。
節點信息冗余是指身體關鍵節點信息中存在的信息冗余。由于節點之間并非互相獨立,而是存在樹形拓撲關系,子節點的位置及旋轉信息與父節點存在相關性,在已知父節點位置及旋轉后息的情況下,子節點位置及旋轉信息可通過正向運動學公式計算得出。
采樣頻率冗余是指體感數據的硬件采樣須率過高產生的信息冗余。一方面,訓練過程中受訓人員并非時刻都有肢體動作,舉槍瞄準后的射擊過程中身體基本保持靜止,而等待與隱蔽也是戰術協作中重要的一環;另一方面,在同一時間段內身體各關鍵節點的運動幅度與速度也存在不同,受訓人員可能在腿部保持靜止的同時上半身進行觀察搜索,或上半身保持瞄準姿勢的同時腿部快速前進。
數據精度冗余是指表示身體關鍵節點信息數據精度超出了實際精度而產生的信息冗余。動作捕捉設備測量的位置信息精度可達毫米級,旋轉信息精度可達1度,在使用單精度浮點數表示位置信息時,小數點后第4位即達到毫米級精度,對于旋轉信息,小數點后第4位可達到千分之一度,后續位數所表達的數據精度已遠超動作捕捉設備能夠采集的數據精度能力[4]。
令(Px,Py,Pz)為父節點位置信息,(Rx,Ry,Rz)為父節點旋轉信息,R為父節點齊次旋轉矩陣,v0為0度方向向量,d為子節點與父節點的距離,則子節點位置p為:

其中0度方向向量v0及節點間距離d均可在動作捕捉設備校準時確定,進行節點信息計算時視為常量。在需要還原全部19個身體關鍵節點的位置及旋轉數據時,可從根節點出發,沿著節點間以樹形拓撲關系構成的正向運動鏈,逐級計算子節點的位置信息。除根節點需要同時記錄位置及旋轉信息外,其余節點僅需要記錄旋轉信息,位置信息則在計算過程中逐級計算得到。
基于上述分析通過刪除體感數據中的節點冗余信息,實現體感數據編碼優化,除根節點外的其余節點,不將其位置信息加入編碼,則完整記錄單體感數據需要231字節,可實現約50%的編碼數據量優化。
根據體感數據的特點,可采用自適應降頻采樣算法,在節點位置及旋轉信息變化速率較低時降低數據采樣頻率,在節點位置及旋轉信息變化速率較高時相應保持較高的數據采樣頻率,對體感數據編碼進行優化。
節點采樣頻率的動態自適應調整算法如下:


算法中,首先,計算節點數據變化量,該變化量采用節點數據向量間的歐式距離描述。其次,對該變化量進行歸一化處理后,與自適應閾值進行比較,若變化量小于閾值,則根據節點數據變化量降低采樣頻率,否則根據節點數據變化量提高采樣頻率。采樣率的降低與提高和節點數據變化量相關,使得最后對采樣頻率進行上下限約束后返回計算結果。
當對節點釆樣時,將節點數據加入體感數據幀編碼中,否則該節點數據為空。當體感數據幀編碼中不存在任何節點數據時,不發送該幀數數據。
4字節單精度浮點數的有效精度可達到小數點后7位,根據前述動作捕捉設備數據精度情況,單精度浮點數能夠支持的數據精度已遠超體感數據的實際精度,通過將單精度浮點數的小數點第4位后部分刪除,對體感數據中的數據精度冗余進行壓縮,可進一步優化體感數據編碼。
IEEE-754規定單精度浮點數標準格式采用32位二進制表示。如圖1所示:

圖1 單精度浮點數二進制表示
第1位為符號位,表示浮點數的正負;之后8位為指數位,用計算2的乘方;最后23位為浮點數位,表示浮點數小數點后的數值。最終浮點數Float計算方法為:
Float=Sign(S)*1.FFF…FF*2EE…E
根據上式可知單精度浮點數的數據精度通過8位指數位與23位小數位共同控制。在取值范圍已知的情況下,指數位通常為固定值,僅由小數位確定數據精度。身體關鍵節點的位置信息取值范圍在0到2之間,指數位一直為0,可以在數據編碼中直接忽略;旋轉信息取值范圍在0到360之間,指數位的可能取值在0到8之間,需要保留4位編碼。
單精度浮點數的小數位可視作對數據的加權求和,小數位為1時權重為1,為0時權重也相應為0。各小數位對應的數值由其位置決定:第1位為0.5,第2位為0.25,第3位為0.125,第4位為0.0625,以此類推。小數位第10位以后的數據精度已經小于0.001,從10位至23位可以從數據編碼中忽略。
身體關鍵節點的位置信息及旋轉信息都是正數,因此可以進一步刪除數據編碼中的符號位。
基于上述分析,在已知數據取值范圍的情況下,通過將浮點數轉化為定點數,消除數據編碼中的精度冗余,可以進一步優化體感數據編碼。對單精度浮點數重新進行16位編碼,將數據量壓縮為原來的50%,重新編碼后的二進制表示如圖2所示:

圖2 精度冗余優化后的二進制表示
重新解析數據時,首先將數據首位置0,表示正數;其次在4位指數位前補0,補齊8位;接著在12位小數位后補0,補齊23位;最后將數據按照單精度浮點數據格式解析。
根據上述冗余壓縮方法,對動作捕捉骨骼數據采用數據頭加數據體的形式進行編碼。數據頭部分存儲0度方向向量及關鍵節點之間的距離。數據體部分采用編碼優化方法存儲動作捕捉骨骼數據幀。
單幀數據幀編碼最多包含:
(1)根節點的位置數據,需要3個浮點數,每個浮點數2字節,共6字節;
(2)全部19個節點的旋轉數據,每個節點需要3個浮點數,每個浮點數2字節,共114字節;
(3)在降頻采樣情況下,使用3字節以比特位形式記錄節點是否被正常采樣,如果節點被正常采樣,則比特位置1,否則置0。
在這樣的編碼機制下,每幀數據最多需要123字節,遠小于原始數據編碼。
本文提出了一種基于信息冗余壓縮的動作捕捉骨骼數據編碼優化方法。首先,研究動作捕捉骨骼數據的信息特性,分析骨骼數據中存在的節點信息、采樣頻率、數據精度等三類信息冗余;然后,針對三類信息冗余,分別提出對應的信息壓縮方法;最終,匯總三類信息冗余壓縮結果,形成動作捕捉骨骼數據編碼優化方法。通過實驗數據驗證了該方法對動作捕捉骨骼數據編碼具有良好的壓縮效果,可有效降低數據尺寸,在多人協同實時體感交互應用中,能夠有效提高動作捕捉數據的實時傳輸同步效率,優化交互體驗,為進一步提升沉浸式虛擬仿真訓練系統的訓練效果打下基礎。