朱東,雷金樹
(西南科技大學計算機科學與技術學院,綿陽 621010)
醫學可視化是利用計算機對醫學二維斷層圖像序列進行三維重建,使其立體逼真地顯示在屏幕上,且能對三維圖像進行交互,是現代醫學影像研究的重要領域。
虛擬現實(Virtual Reality,VR)是以計算機技術為核心,結合相關科學技術,提供視覺、聽覺、觸覺等方面的高度近似模擬,使人產生身臨其境感,用戶借助必要的設備與虛擬環境交互,虛擬現實已被廣泛應用于航空、醫學、教育、旅游等多個領域[1]。目前的醫學可視化系統大多都是基于二維平面,如PC端、平板端、Web端等,在對三維醫學圖像進行可視分析時,雖然便于用戶操作,但觀察效果不佳。為了增強沉浸式觀察,Power-Wall顯示器或洞穴狀自動虛擬系統(Cave Automatic Virtual Environment,CAVE)[2]等大型顯示設備充分利用人類的全方位視覺,以此達到無限地接近沉浸式,但這些系統往往需要龐大的空間且價格昂貴。頭戴式顯示設備(HMD)則是沉浸式的理想選擇,它體積小,刷新率高,低延遲頭部追蹤,且成本相對較低。沉浸式虛擬現實將用戶的視覺感官完全與外界隔離,使用戶形成持久的專注力,因此傳統的鼠標鍵盤式的交互不再適用于VR環境。
在人機交互方面,為了與虛擬場景進行交互,用戶往往需要通過手中的設備作為外在媒介,如HTC Vive、Oculus Touch、Xbox 360游戲手柄等。但上述設備不能裸手操作,手部受限明顯,影響交互效果。Leap Motion由兩個高清攝像頭、三個紅外LED燈和光學傳感器組成,它利用雙目紅外成像原理重建出手的三維空間運動信息,能夠跟蹤各個骨節、手指、手掌和類似手指的工具,并實時返回它們的空間位置以及方向信息,跟蹤精度達到0.01mm[3],相比于Kinect,更適合用于手勢識別。
沉浸式醫學可視化是一項跨學科的應用性研究,其利用計算機強大的計算功能以及三維圖像繪制算法,結合現在最熱門的VR技術,實現了對構建好的三維醫學圖像進行沉浸式的觀察與交互。因此本文結合可視化工具函數庫(Visualization Toolkit,VTK)、頭戴式顯示設備Oculus Rift、體感交互控制器Leap Motion構建沉浸式醫學可視化系統,幫助用戶多層次多角度立體觀察與分析醫學可視化繪制結果。
系統以VTK作為醫學圖像處理工具,實現三維等值面繪制、體繪制等主流科學可視化繪制算法,并將三維圖像實時顯示在頭戴式虛擬現實設備Oculus Rift上,然后利用體感交互器Leap Motion進行手勢識別,完成交互。系統整體框架如圖1所示。

圖1 沉浸式醫學可視化系統框架
醫學數據三維可視化繪制采用科學可視化中的面繪制和體繪制方法。面繪制是通過幾何單元拼接,對物體表面進行擬合而忽略物體內部信息的重建方法。體繪制是將每個體素都參與繪制,直接將體素投影到顯示平面的方法。本文同時采用這兩種繪制方法,面繪制中采用經典的移動立方體算法(Marching Cubes Algorithm,MC),其原理是根據給定的閾值提取三角面片,并按照一定的空間坐標和拓撲關系組成等值面,該算法獲得的圖像分辨率高,易交互[4]。體繪制算法采用基于GPU加速的光線投射算法,其基本思想是屏幕上的每個像素點發出一條光線,然后通過GPU完成對體數據的遍歷、采樣和計算,然后對各像素點的顏色和不透明度進行合成[5]。光線投射算法在各階段操作都具有高度的獨立性和很好的算術密集度,能夠很好地利用GPU進行加速,提高繪制效率,改善用戶在沉浸式虛擬環境中的交互體驗。
VTK采用面向對象的設計思想,基于管線流程進行設計,數據在管線流程中的過程對象間輸入輸出,并在可視化管線中進行相應的處理。目前,VTK已經提供了專門用于Oculus模塊的類,涉及到的類有vtkOculusRenderWindow,這個類處理Oculus接口的大部分內容;vtkOculusCamera從Oculus獲取矩陣用于渲染,它包含一個縮放和平移矩陣,用于將世界坐標系映射到頭戴式顯示器空間[6];vtkOculusRenderWindowInteractor用于捕獲控制器事件并將其轉換為鼠標、窗口事件,該類屬于VTK系統中的交互器類,但它不具備任何交互功能,因此為了創建一個用于沉浸式環境下的手勢交互,需要對其功能進行擴充。為此從原有的交互器上派生出新的類vtkMyOculusInteractor,重寫循環事件響應處理函數StartEventLoop(),并為其提供Leap Motion接口和手勢識別模塊。
沉浸式環境下的虛擬手模型是采用計算機視覺獲取人手信息并在虛擬環境下對其呈現,因此視覺手姿態估計中的信息獲取顯得十分重要。三維手模型分為體模型、幾何模型、網絡模型以及骨架模型,結合VTK的繪制特點,本文選取骨架模型作為虛擬手模型。為了簡化人手姿態估計,采用關鍵點模型姿態估計方法[7],該方法通過選取手部信息的關鍵點作為參數進行姿態估計,然后驅動虛擬手完成交互。本文選取21個關鍵點,用線條進行連接,構成簡易虛擬骨架手模型。

圖2 虛擬骨架手模型
結合沉浸式環境下的交互特點,本文提供了4種基本操作(a)移動(b)旋轉(c)縮放(d)修改透明度,如圖3所示。前三個手勢的設計是參考Piumsomboon[8]等人的工作,他們對用戶在AR中的行為偏好和手勢進行研究,并創建了一個用戶定義的手勢集。其同樣也適用于VR環境,但由于部分手勢過于復雜,Leap Motion也存在原始手部運動捕捉不準確等問題,因此對手勢標準進行改進,增大手勢之間的特征差異,使其更易被Leap Motion識別[9]。根據Leap Motion SDK提供的手部跟蹤反饋數據,設置相應的閾值來識別不同的手勢。表1列出了手勢的功能和標準,其中GrabStrength為抓握力度,pinchStrength為捏力度。

表1 手勢的功能和標準

圖3 操作手勢集
我們定義了如下的交互流程:各個操作之間互斥執行,每次只能執行一種操作,當某一操作被識別,手勢識別將進入鎖定狀態,不再識別其他手勢,直到當前操作完成,手勢進入釋放狀態,才能開始識別下一個手勢。釋放狀態的手勢被定義為單手五指伸開或雙手五指伸開,此狀態不進行任何操作。各手勢的具體操作定義如下:
(1)位移操作
位移操作的目的是改變圖像的位置,便于用戶調整合適的距離,其規則為右手握拳,為了保證位移操作的原子性,對于手的每一次移動,圖像只會按照手的最大位移偏差的方向移動,圖像的位移差量與手的實際位移差量同步。
(2)旋轉操作
旋轉操作的目的是改變圖像的方向,便于用戶多角度觀察圖像,其規則定義為雙手握拳,以左手作為旋轉中心點,右手朝某一方向移動,圖像以某一軸作為旋轉軸旋轉。右手朝X軸移動,圖像平行于Z軸旋轉;右手朝Y軸方向移動,圖像平行于X軸旋轉;右手朝Z軸方向移動,圖像平行于Y軸旋轉。右手移動方向的確定與位移操作中的方法一致。旋轉過程為先將旋轉軸平移至坐標軸,然后旋轉,最后平移至原來的位置,即
F'=F*T*R*T'
其中T為平移操作,R為旋轉操作。
(3)縮放操作
縮放操作的目的是改變圖像的大小,其規則定義為雙手呈捏狀態,當兩手之間的距離增大時,圖像將被放大,兩手距離減小時圖像將被縮小。
(4)透明度修改
由于醫學可視化中的傳遞函數修改操作過于復雜,我們只考慮對單一的傳遞函數值進行修改。修改操作的手勢規則為右手食指伸直,其余手指彎曲,呈數字手勢“1“,當手指開始上下按壓時開始修改圖像的透明度值。
為驗證本文提出的沉浸式環境下醫學可視化系統的可行性,我們建立了相應的實驗。本實驗的硬件環境為操作系統為Windows 10、處理器為Intel Core i7 3.40GHz(16 GB內存)和顯卡為NVIDIA GeForce GTX 750 Ti的 PC、Oculus Rift頭戴式顯示器(HMD)、Leap Motion體感交互控制器。軟件環境包括VS2013、VTK-8.0.1、CMake 3.7.0。實驗數據為一組膝蓋CT掃描數據,分辨率為 379×229×305。
圖4展示了實驗數據進行體繪制后經過平移操作、旋轉操作、縮放操作以及參數修改這四種操作的實現效果。其中(a)移動圖像:右手握拳,向右水平移動,圖像向右水平移動。(b)旋轉圖像:雙手握拳,左手放于旋轉中心,左手不動,右手向右移動,圖像繞Z軸旋轉。(c)縮放圖像:雙手呈捏狀態,向內拉伸,圖像縮小。(d)修改透明度:右手呈數字手勢“1”,做從上到下點擊動作,皮膚透明度被修改為0,皮膚變得不可見,呈現出骨頭。

圖4 實驗結果
針對沉浸式下醫學可視化問題,本文提出了基于VTK、Oculus、Leap Motion的沉浸式醫學可視化系統框架,并定義符合人自然行為習慣的操作手勢集,極大地拓寬了在沉浸式虛擬環境中的交互方式,改善用戶交互體驗。目前,傳統的醫學可視化的一些交互功能還未能實現,例如切片操作、復雜傳遞函數修改等,此外手勢識別的精度也需要提高。下一步,我們將豐富沉浸式下醫學可視化的交互方式以及優化手勢的定義和識別算法。
[1]陳浩磊,鄒湘軍,陳燕,劉天湖.虛擬現實技術的最新發展與展望[J].中國科技論文在線,2011,6(1):1-5.
[2]A.Febretti,A.Nishimoto,T.Thigpen,J.Talandis,L.Long,J.D.Pirtle,T.Peterka,A.Verlo,M.Brown,D.Plepys,D.Sandin,L.Renambot,A.Johnson,and J.Leigh.CAVE2:A Hybrid Reality Environment for Immersive Simulation and Information Analysis.in Proc.Eng.Reality Virtual Reality,Article 864903,2013.
[3]Leap Motion,Inc.Leap Motion.https://www.leapmotion.com/
[4]石玉.基于VTK的可視化技術研究與實現[M].西安建筑科技大學,2009.5
[5]唐振禹,呂曉琪,任國印.基于GPU加速的改進的光線投射算法研究[J].現代電子技術,2016,39(21):56-60.
[6]Kitware.VTK.https://blog.kitware.com/using-virtual-reality-devices-with-vtk/.
[7]胡弘,晁建剛,楊進等.Leap Motion關鍵點模型手姿態估計方法[J].計算機輔助設計與圖形學學報,2015,27(7):1211-1216.
[8]T.Piumsomboon,A.Clark,M.Billinghurst,and A.Cockburn.User Defined Gestures for Augmented Reality.In IFIP Conference on Human Computer Interaction.282-299.Springer,2013
[9]Y.-j.Huang,T.Fujiwara,Y.-X.Lin,W.-C.Lin,K.-L.Ma.A Gesture System for Graph Visualization in Virtual Reality Environments.In IEEE Pacific Visualization Symposium.DOI:10.1109/PACIFICVIS.2017.8031577.