呂寶媛,蔡煜城,林偉達,曹家榕,楊敬達,蔡澤民
(汕頭大學 工學院,廣東汕頭 515063)
全息投影技術又名虛擬成像技術,通過干涉、衍射等光學原理,將真實物體的三維圖像進行重現。
根據技術方法與實現途徑的不同,可以將全息投影分為以下兩類:
(1)投射全息投影:將激光投射到全息投影材質的膠片上,從全息膠片背面觀察重建之后的圖像。
(2)反射全息投影:將白的光源從觀察者的方向投射到全息投影膠片上,利用反射的原理重建彩色的圖像[1]。
全息投影技術是當今一種前沿的顯像技術。憑借其技術產生了各類全息投影產品,應用于廣告業、博物館、科技館、珠寶企業、車企等領域。但現今的全息投影技術僅限于全息影像的展示,播放全息視頻,并沒有交互功能,用戶體驗不佳,且能進行交互的設備也僅局限于平面播放,并無立體效果。
針對上述問題,本文提出了一種基于Leap Motion與全息投影技術的交互全息投影方法。本方法在傳統只顯示固定內容的全息3D投影方法的基礎上,擴大了成像的體積,增加Leap Motion體感傳感器以實現交互功能,實現了可控制的3D全息影像展示。
本方法不僅可以用于簡單的視頻播放以展示產品、展示3D物體,更可以通過手勢來控制物體的移動及旋轉、控制虛擬人物的移動以進行游覽式觀賞,解決了傳統投影設備無交互效果、用戶體驗差的問題。此外,還加入投影儀以擴大成像體積,采用全息投影技術,實現全息影像的生成,增加成像的靈活度,解決了顯示設備受限、生成圖像單一的問題。
本文提出的基于Leap Motion的交互全息投影方法由人機交互模塊和顯像模塊兩部分實現,如圖1所示。

圖1 交互全息投影模塊結構
人機交互模塊通過對人體手部動作的識別,以獲取人體的控制信息,將人體控制信息傳輸到處理器上,由處理器將收到的控制姿態信息進行分析運算,生成計算機指令對圖像進行控制,最終在顯像系統中顯示并控制三維立體模型。
顯像模塊通過Unity3D及相關算法對所需顯示的模型進行處理,利用金字塔結構將光線反射,使顯像模塊生成三維立體的圖像,同時,Unity3D與Leap Motion進行通信,根據Leap Motion經計算機處理過的指令對顯像模塊中的三維立體圖像進行變換。
本方法所使用的終端設備為個人電腦。此電腦至少應具備支持USB3.0協議的接口、HDMI接口,以用于完成基于Unity3D引擎的圖像處理以及接收用戶與設備互動的信息。本方法所用的顯示模塊由顯示器以及亞克力材質的金字塔組成。人機互動設備采用的是體感傳感器Leap Motion。
在處理終端上,采用Unity3D引擎進行處理。Unity3D是Unity Technologies公司開發的一款能輕松設計3D游戲、可視化模型、實時3D動畫等內容的游戲開發工具,其支持多個平臺與設備,是一個功能強大、整合全面的專業級游戲引擎。因而Unity3D也常常被作為交互圖形化開發的首選環境。
顯像模塊為一個全息投影設備。由該設備接收來自計算機的控制指令,生成全息影像,并根據指令控制影像變換。
本系統采用的全息投影技術是利用佩伯爾幻像原理,能夠把影像懸浮于空中的立體成像技術,利用全息材料制成的反射面,將虛擬影像懸浮于空中,360°均能觀看[2]。
全息投影是一種無需頭戴設備的3D技術。觀眾可以看到的立體的虛擬場景是一種因光的折射、反射而形成的虛像。它能實時地將真實的三維圖像記錄和再現。本方法中利用全息投影技術,生成立體影像并進行交互。圖2為成像系統結構圖。

圖2 成像模塊結構圖
2.3.1多攝像頭設計
在Unity3D中需要多個面觀察引擎中的對象,所以需要多個攝像頭組件同時工作,在此方法中采用了一個由四個攝像頭組成的攝像頭組進行多鏡頭的采集[3]。
在工具欄中選擇攝像頭組件,依次導入四個攝像頭至當前的場景。改變四個攝像頭的位置參數,使其分別在x軸正半軸、x軸負半軸、z軸正半軸、z軸負半軸上,且與原點(0,0,0)等距,目的是使四個畫面中的物體尺寸一致。改變旋轉角參數,使其分別在正向朝向原點,目的是使四個畫面中的物體朝向一致。某一攝像頭的組件參數如圖3所示。

圖3 某一攝像頭的組件參數圖
通過改變攝像頭的位置參數和旋轉角參數,得到了以物體為中心的前后左右四個不同方向的畫面,如圖4所示。

圖4 四個攝像頭的位置及朝向圖
2.3.2圖像輸出組件
創建四個圖像組件,改變其位置參數,使其相互緊貼組成一個2×2的大正方形陣列,并加上一個等腰直角三角形的透明遮罩層,使大正方形的邊線中點間組成一個小正方形,該小正方形即為圖像顯示的UI界面。
通過攝像機Target Texture目標紋理技術,將之前四個攝像機拍攝得到的圖像轉換成紋理貼圖,做成材質依次應用到四個圖像組件上。
根據由亞克力板構成的金字塔尖端的朝向,需要調整各個圖像組件的旋轉角參數,使從金字塔外的四個面看圖像都為正向,如圖5所示。

圖5 四個image組件位置及其旋轉圖
2.3.3將物體導入至場景
Unity3D支持FBX、STL等3D物品格式,可以方便地將物品的3D模型導入至場景中,并將物品移至坐標原點處,目的是方便用戶觀察。
為了進一步讓用戶更方便地全方位觀察物品,可以使物品自動旋轉,將物品的每個細節展示給用戶。具體實現方法是:添加C#腳本,在腳本中獲取當前物體的旋轉角度,在相同的時間周期內改變相同的旋轉角度,實現物體的自旋轉。
人機交互模塊由用于人體手勢識別的體感傳感器Leap Motion以及用于接收傳感器傳來的人體控制信息的處理器兩個部分組成。人體在設備前做出動作,利用Leap Motion接收并識別人體控制信息,初步處理后交由處理器將控制信息轉化為計算機指令。
Leap Motion是基于計算機視覺技術的三維數據追蹤傳感器設備[4]。它主要由兩個高幀率攝像頭、LED燈、紅外濾光器以及一片USB3.0芯片組成,傳感器的上下左右的視野范圍大約為150°,其結構如圖6所示。

圖6 Leap Motion結構圖
Leap Motion的可工作范圍大約在設備前方的25~600 ms。Leap Motion采用兩個超廣角相機的快門傳感器,運行速度高達120 fps,是一種更專業的手勢采集設備[5]。
Leap Motion系統采用的是右手笛卡爾坐標系。以真實世界中的毫米為單位返回具體的手勢數據。原點位于Leap Motion控制器的中心。x軸和z軸在控制器的水平面上,x軸則與設備的長邊平行,z軸與短邊平行,y軸是垂直的,朝上為軸的正方向。
Leap Motion的基本原理:使用紅外LED燈充當主動光源,兩個高清攝像頭從不同角度采集紅外圖像,模擬人體雙目立體視覺原理進行手勢的判斷[6]。
Leap Motion與ZED、Kinect等其他深度傳感器的不同在于它的精度達0.01 mm,手部微小的運動也可以捕捉。
3.2.1LeapMotion的工作流程
如圖7所示,交互模塊首先使用紅外雙目攝像頭Leap Motion從兩個角度拍攝用戶手部圖像,雙目數據流達到120 fps,通過USB3.0高速傳輸到電腦處理,通過Leap Motion的SDK處理傳回的雙目信息,計算出深度信息,對深度信息中的手進行特征分析,最終獲取手勢數據發布給Leap Motion Service程序,在Unity3D下綁定腳本,通過判斷手指的情況以確定人體當前手勢,并執行相應的程序和動作。

圖7 交互功能實現流程圖
3.2.2具體實現方法
(1)判斷手掌是否握拳
如圖8所示,輸入對應的手(左手或右手,在Unity3D中為一對象),對每個手指判斷其方向向量與掌心的方向向量之差的距離,若小于閾值則表示手指彎曲,若大于閾值則表示手指伸直,由此遍歷每個手指。之后判斷彎曲的手指數,若彎曲的手指數為5,則表示所有的手指彎曲,手掌握拳;若彎曲的手指數小于5,則表明手掌未握拳,最終返回判斷的結果。
(2)判斷雙手組合
運用圖8中的方法對左右手進行判斷,根據左手和右手握拳狀態的不同,控制Unity3D中的任務進行相應的動作。若左手握拳,右手握拳,則停止運動;若左手握拳,右手不握拳,則右轉;若左手不握拳,右手握拳,則左轉;若左手不握拳,右手不握拳,則控制前進,如圖9所示。

圖9 判斷不同的手勢組合做出相應動作
本實驗以城市探索模式為例,進行了現場體驗測試。測試環境為Windows 10 64位+Unity3D 2017.3。測試者位于交互全息投影設備前方,做出不同姿勢,以驗證不同人體姿態識別分析的準確性。當測試者左右手做出不同的動作時,顯像模型做出相應的反應,如表1所示,速度快而且識別率高,測試者能夠流暢地控制全息投影中的人物進行城市探索。

表1 不同手勢系統做出的反應
實驗結果表明,利用Leap Motion能精確地識別人體動作姿勢信息,通過相應的算法及顯像設備,從而實現對全息3D影像中虛擬人物的狀態、移動速度、移動方向的控制,充分驗證了基于Leap Motion的交互全息投影方法的可行性。
本文提出了一種基于Leap Motion與全息投影技術的交互全息投影方法。該方法通過采集人體姿態信息、人體控制信息,通過對采集到的信息進行分析處理來控制全息影像的變換及場景移動等,解決了傳統全息投影設備僅限于全息影像的展示、視頻的播放,無交互效果,用戶體驗較差的缺陷,也彌補了其他能夠進行交互的設備僅局限于平面成像、并無立體效果的不足。該方法使用戶可以以第一視角進行三維立體影像的觀光體驗,增強用戶的代入感,提高用戶體驗,有良好的應用前景。