楊晨彬 高 瞻
(南通大學(xué)計算機(jī)科學(xué)與技術(shù)學(xué)院 江蘇 南通 226019)
隨著醫(yī)學(xué)圖像三維可視化技術(shù)的發(fā)展,醫(yī)療工作者可以方便地將由計算機(jī)斷層技術(shù)(CT)、核磁共振(MRI)得到的二維切片數(shù)據(jù)通過三維重建,達(dá)到重構(gòu)人體的器官組織及病變部位的目的,從而提高醫(yī)療診斷和治療的精確性和科學(xué)性[1]。
傳統(tǒng)的醫(yī)學(xué)體數(shù)據(jù)可視化系統(tǒng)對于三維醫(yī)學(xué)體數(shù)據(jù)可視化影像的顯示,都是使用二維的計算機(jī)屏幕來顯示圖像,并通過鍵盤鼠標(biāo)在屏幕上完成交互操作。陳文池[2]利用可視化工具包VTK實(shí)現(xiàn)了醫(yī)學(xué)圖像的三維重建系統(tǒng),系統(tǒng)中使用體繪制算法對體數(shù)據(jù)進(jìn)行了三維可視化,并實(shí)現(xiàn)了平移、旋轉(zhuǎn)和截取等交互操作。但是使用者通過計算機(jī)二維屏幕進(jìn)行觀察,無法感受到三維圖像的深度信息,也無法清楚地看到三維圖像的內(nèi)部細(xì)節(jié)信息,從而影響使用者進(jìn)一步的觀察和理解,同時在二維屏幕對三維數(shù)據(jù)的交互操作也存在著不便。而隨著虛擬現(xiàn)實(shí)技術(shù)的進(jìn)步和虛擬現(xiàn)實(shí)頭戴式顯示設(shè)備(HMD)的商用化[3-4],虛擬現(xiàn)實(shí)技術(shù)在醫(yī)學(xué)教育、輔助診斷、醫(yī)學(xué)可視化等領(lǐng)域的應(yīng)用大大增加[5],通過虛擬現(xiàn)實(shí)技術(shù)可以彌補(bǔ)傳統(tǒng)屏幕在顯示及交互上的不足。Laha等[6]從理論上分析了VR技術(shù)所帶來的沉浸式體驗(yàn)在醫(yī)學(xué)體數(shù)據(jù)可視化的重要作用,VR平臺與傳統(tǒng)平臺相比具有明顯優(yōu)勢,但是并沒有給出實(shí)現(xiàn)方案。而He等[7]使用可分離式的腦部網(wǎng)格模型,結(jié)合HTC Vive,在虛擬現(xiàn)實(shí)中通過交互完成對腦部結(jié)構(gòu)的觀察操作,實(shí)現(xiàn)可視化,具有良好的沉浸式顯示效果。但該方案需要預(yù)先制作腦部各組織的網(wǎng)格模型,同時無法觀察組織內(nèi)部信息,使用不便。
當(dāng)前主要有兩類醫(yī)學(xué)影像可視化系統(tǒng)實(shí)現(xiàn)方案。一類是客戶端形式的,這類系統(tǒng)需要在計算機(jī)端安裝特定的軟件,不利于后期系統(tǒng)更新及維護(hù)[8]。另外一類就是基于瀏覽器形式的[9],本文使用基于瀏覽器的體繪制實(shí)現(xiàn)方案,使用WebGL作為體繪制實(shí)現(xiàn)工具,使用光線投射法作為體繪制的實(shí)現(xiàn)算法。對于光線投射算法,Congote等[10]提出了使用多通道渲染管線來實(shí)現(xiàn)體繪制的方法。這種方法需要使用一個單位立方體作為體數(shù)據(jù)的載體。在第一道渲染管線中根據(jù)單位立方體的頂點(diǎn)坐標(biāo)生成坐標(biāo)紋理,用來在第二道管線中計算光線投射方向,然后根據(jù)光線的方向和起止坐標(biāo)進(jìn)行顏色合成,得到渲染圖像。其中因?yàn)樾枰褂妙~外的紋理和渲染管線,對性能會有一定的影響。對此,Mobeen等[11]提出了使用單通道的體繪制方法,在片元著色器中只需根據(jù)場景中相機(jī)的坐標(biāo)以及片元坐標(biāo)即可計算出光線投射方向,而該片元坐標(biāo)就是光線的起始點(diǎn)。對光線的終止條件的判斷則需要在片元著色器中判斷光線上各采樣點(diǎn)與單位立方體的位置關(guān)系,當(dāng)采樣點(diǎn)坐標(biāo)在單位立方體之外時立即終止循環(huán),得到結(jié)果。
以上方法在傳統(tǒng)屏幕上具有良好的顯示效果,但是結(jié)合虛擬現(xiàn)實(shí)后,在實(shí)際使用中有兩點(diǎn)不足:(1) 當(dāng)需要交互時,在傳統(tǒng)屏幕中,可以通過改變場景中相機(jī)的位置間接實(shí)現(xiàn)場景中物體的平移旋轉(zhuǎn)。但是在虛擬現(xiàn)實(shí)中,相機(jī)的方向、位置等參數(shù)由使用者的頭戴式顯示設(shè)備(HMD)的狀態(tài)信息確定,無法使用傳統(tǒng)方法對相機(jī)進(jìn)行操作,所以需要通過單位立方體的平移旋轉(zhuǎn)操作來實(shí)現(xiàn)對渲染結(jié)果的多角度觀察體驗(yàn)。因?yàn)樗惴ǖ脑?,單位立方體的頂點(diǎn)坐標(biāo)在片元著色器中難以更改,會導(dǎo)致單位立方體在頂點(diǎn)著色器和片元著色器中所處的坐標(biāo)系不一致,不利于交互操作的實(shí)現(xiàn)。(2) 在計算光線投射方向和起點(diǎn)坐標(biāo)時,使用片元坐標(biāo)減去相機(jī)坐標(biāo)得到方向向量,光線起點(diǎn)為片元坐標(biāo),最終合成的顏色值即為表面片元的顏色。但是當(dāng)相機(jī)位置處在單位立方體內(nèi)時,方向向量和起點(diǎn)坐標(biāo)的計算方式不再適用,需要以新的方式重新計算。否則,當(dāng)使用者近距離觀察渲染結(jié)果或者在進(jìn)行交互操作時,有可能不經(jīng)意地造成距離過近而使圖像突然消失,影響用戶體驗(yàn)。基于以上兩點(diǎn)原因,需要對光線投射算法進(jìn)行一些改進(jìn),實(shí)現(xiàn)虛擬現(xiàn)實(shí)環(huán)境中體繪制可視化。
針對以上的不足,本文提出了基于WebVR的方法來實(shí)現(xiàn)醫(yī)學(xué)體數(shù)據(jù)可視化,系統(tǒng)通過服務(wù)器端向?yàn)g覽器發(fā)送體數(shù)據(jù),然后瀏覽器使用WebGL進(jìn)行渲染,通過傳統(tǒng)屏幕或者虛擬現(xiàn)實(shí)設(shè)備HTC Vive以普通模式或VR模式顯示可視化結(jié)果并實(shí)現(xiàn)相應(yīng)交互操作。在普通模式中,使用者可以實(shí)現(xiàn)旋轉(zhuǎn)、平移、縮放的操作;在VR模式中,針對虛擬現(xiàn)實(shí)環(huán)境的特點(diǎn),提出了單通道光線投射體繪制算法在虛擬現(xiàn)實(shí)環(huán)境中的改進(jìn)方法,實(shí)現(xiàn)體數(shù)據(jù)內(nèi)部可視化、激光拾取和平面裁剪的交互方式,可以通過立體視覺以任意角度觀察體數(shù)據(jù)表面及內(nèi)部細(xì)節(jié)信息,增強(qiáng)使用者對人體的器官組織或病變部位的感知與認(rèn)識。
本系統(tǒng)整體設(shè)計使用B/S模式,采用富客戶端策略,系統(tǒng)的核心功能基本都是通過瀏覽器端來實(shí)現(xiàn),服務(wù)器端只需要完成數(shù)據(jù)存儲,負(fù)擔(dān)較小。同時只需一次性的數(shù)據(jù)傳輸,瀏覽器端與服務(wù)器端無需頻繁的數(shù)據(jù)通信,對網(wǎng)絡(luò)的要求也較低。這種模式最大的優(yōu)點(diǎn)就是沒有平臺的限制,無需安裝,使用和維護(hù)都很方便。
如圖1所示,系統(tǒng)整體架構(gòu)主要由三部分組成:服務(wù)器端、瀏覽器端與虛擬現(xiàn)實(shí)端。系統(tǒng)的實(shí)現(xiàn)主要由醫(yī)學(xué)影像數(shù)據(jù)存儲、數(shù)據(jù)傳輸、數(shù)據(jù)預(yù)處理、數(shù)據(jù)渲染、瀏覽器顯示、虛擬現(xiàn)實(shí)顯示、虛擬現(xiàn)實(shí)交互等部分構(gòu)成。其中服務(wù)器負(fù)責(zé)數(shù)據(jù)存儲;瀏覽器端與服務(wù)器端間的數(shù)據(jù)請求與數(shù)據(jù)傳輸通過HTTP協(xié)議來實(shí)現(xiàn);使用Web端醫(yī)學(xué)影像處理庫Cornerstone.js對接受到的圖像數(shù)據(jù)進(jìn)行預(yù)處理,處理成能夠被WebGL使用的紋理數(shù)據(jù);使用WebGL進(jìn)行可視化渲染,將普通三維影像在瀏覽器端顯示出來;通過WebVR實(shí)現(xiàn)瀏覽器與虛擬現(xiàn)實(shí)設(shè)備HTC Vive實(shí)現(xiàn)連接,使用HTC Vive的頭戴式顯示器實(shí)現(xiàn)虛擬現(xiàn)實(shí)環(huán)境中三維影像的顯示并通過配套的手柄控制器完成交互操作。
圖1 系統(tǒng)結(jié)構(gòu)圖
在服務(wù)器端與瀏覽器端之間,體數(shù)據(jù)的傳輸使用基于HTTP通信機(jī)制的Web技術(shù),采用的是請求-獲取的數(shù)據(jù)傳遞模式,將服務(wù)器端的DICOM格式體數(shù)據(jù)壓縮包傳輸?shù)娇蛻魹g覽器端。系統(tǒng)通過采用Fetch API中GlobalFetch.Fetch()方法實(shí)現(xiàn)遠(yuǎn)程數(shù)據(jù)獲取??蛻魹g覽器端根據(jù)所需體數(shù)據(jù)存儲的URL路徑,使用Fetch()方法,發(fā)起對遠(yuǎn)程數(shù)據(jù)的請求,最終得到數(shù)據(jù)。
由服務(wù)器處得到一組DICOM文件,其中每個DICOM文件只存放單張CT或MRI斷層切片,每個DICOM文件數(shù)據(jù)由文件頭數(shù)據(jù)和像素數(shù)據(jù)兩部分組成。由于DICOM文件所需存儲空間太大,而且WebGL無法直接讀取操作DICOM數(shù)據(jù),所以需要對DICOM文件數(shù)據(jù)進(jìn)行預(yù)處理。使用Cornerstone.js將DICOM文件中原始像素數(shù)據(jù)解析出來,具體方法是使用Cornerstone.js中的圖像加載器讀取DICOM文件,然后得到其中每一個像素數(shù)據(jù)的灰度值,依次存入一個數(shù)組中,最后將數(shù)組轉(zhuǎn)為數(shù)據(jù)格式為Uint8的類型化數(shù)組。處理成這種格式后,WebGL即可將其作為三維紋理傳入著色器中。
光線投射算法是以圖像空間為序的直接體繪制算法。從視點(diǎn)出發(fā),沿著視線方向依次發(fā)射若干條光線穿過體數(shù)據(jù),在此過程中對體數(shù)據(jù)等間距采樣并獲得顏色值,依次對各采樣點(diǎn)的顏色值進(jìn)行合成,當(dāng)所有光線穿越完整個體數(shù)據(jù)后,得到渲染結(jié)果[12]。
WebGL為Web瀏覽器提供了內(nèi)置的硬件3D加速渲染功能,從而為實(shí)現(xiàn)無插件的三維醫(yī)學(xué)圖像可視化提供了底層支持。最新版本的WebGL2.0標(biāo)準(zhǔn)開始支持三維紋理的使用,可以實(shí)現(xiàn)基于硬件的自動插值,提高運(yùn)行效率。本文使用封裝了WebGL的第三方庫Three.js來編程實(shí)現(xiàn)。
本文使用基于單通道的光線投射體繪制方法。實(shí)現(xiàn)流程如圖2所示。
圖2 單通道光線投射算法流程圖
具體步驟如下:
(1) 繪制單位立方體,作為體紋理的載體。向頂點(diǎn)著色器中傳入單位立方體各頂點(diǎn)坐標(biāo),再傳入片元著色器中,通過光柵化和背面剔除,得到立方體外表面正面各片元坐標(biāo),作為光線的起始位置坐標(biāo)。
(2) 在片元著色器中,傳入體數(shù)據(jù)的三維紋理和一維傳遞函數(shù)的紋理以及相機(jī)的坐標(biāo)。通過片元坐標(biāo)減去相機(jī)坐標(biāo)可以計算出的光線的方向向量,通過設(shè)置好的采樣步長,沿著射線方向在單位立方體內(nèi)均勻采樣。對于每個采樣點(diǎn)根據(jù)使用者設(shè)置的傳遞函數(shù)為其賦予顏色值和不透明度值。
(3) 圖像合成。沿著每一條射線在單位立方體內(nèi)均勻采樣,依次對該射線方向上所有采樣點(diǎn)進(jìn)行顏色值和不透明值的合成即可得到單位立方體對應(yīng)片元的顏色值。合成公式為:
(1)
傳遞函數(shù)定義了為三維數(shù)據(jù)場的數(shù)據(jù)屬性到光學(xué)屬性的映射[13]。從傳遞函數(shù)的定義域分類可以分為一維、二維、多維的傳遞函數(shù)。本文使用最為常用的一維傳遞函數(shù)。一維傳遞函數(shù)以體數(shù)據(jù)的標(biāo)量值,即灰度屬性值作為傳遞函數(shù)的輸入,輸出經(jīng)過映射得到的顏色(RGB)和不透明度(Alpha)?;竟饺缦拢?/p>
(2)
式中:α表示該采樣點(diǎn)的灰度值;Rα、Gα、Bα、Aα分別代表由α生成顏色的紅、綠、藍(lán)分量以及不透明度。傳遞函數(shù)可以在程序運(yùn)行時由使用者進(jìn)行手動設(shè)置,傳遞函數(shù)的設(shè)置方式如圖3所示。在右上方的菜單中,可以添加三個控制點(diǎn),并且可以設(shè)置這三個點(diǎn)位置、顏色和透明度,然后根據(jù)這三個點(diǎn)自動插值出其它位置的顏色和不透明度,生成一張長255像素、寬20像素的RGBA格式圖像。這張圖像作為紋理立即傳入片元著色器中,影響最終圖像的生成。在程序運(yùn)行中,使用者對傳遞函數(shù)的設(shè)置可以實(shí)時得到反饋,經(jīng)過調(diào)整即可達(dá)到最優(yōu)的顯示效果。
圖3 傳遞函數(shù)的設(shè)置方式
2.5.1渲染圖像的平移與旋轉(zhuǎn)
由2.3節(jié)可知,單通道體繪制相比于多通道體繪制,由于無法得到單位立方體背面片元坐標(biāo),所以無法得到光線的終止點(diǎn)坐標(biāo),所以需要額外的方式來判斷光線上采樣點(diǎn)與單位立方體的位置關(guān)系。在片元著色器中,單位立方體的頂點(diǎn)坐標(biāo)如圖4所示,該坐標(biāo)系為單位立方體的局部坐標(biāo)系。在此坐標(biāo)系下,對采樣點(diǎn)與單位立方體的位置判斷只需要看采樣點(diǎn)在三個坐標(biāo)軸上的取值是否在0到1之間即可。同時,單位立方體各頂點(diǎn)坐標(biāo)與三維紋理的坐標(biāo)取值區(qū)間相同,無需額外的映射。所以在片元著色器中使用局部坐標(biāo)系特別方便。此時,如果要實(shí)現(xiàn)渲染圖像的平移與旋轉(zhuǎn),需要在頂點(diǎn)著色器中,通過模型矩陣乘以單位立方體的頂點(diǎn)坐標(biāo),得到世界坐標(biāo)系下的頂點(diǎn)坐標(biāo)值。雖然使用這種方式可以實(shí)現(xiàn)旋轉(zhuǎn)和平移變換,但是,頂點(diǎn)和片元著色器中的單位立方體所處的坐標(biāo)系不同,對后續(xù)交互操作的計算產(chǎn)生障礙。改進(jìn)方式有兩種。第一種是將片元著色器中的單位立方體的坐標(biāo)系由局部坐標(biāo)系轉(zhuǎn)為世界坐標(biāo)系。此方法如果要實(shí)現(xiàn)需要解決兩個問題:從單位立方體內(nèi)部采樣點(diǎn)坐標(biāo)到三維紋理坐標(biāo)的映射以及采樣點(diǎn)坐標(biāo)與單位立方體的位置關(guān)系判定。以上兩個問題都很難解決,所以,本文使用另一種改進(jìn)方式,就是將傳入片元著色器中的其他坐標(biāo)值從世界坐標(biāo)系轉(zhuǎn)換到單位立方體的局部坐標(biāo)系中,再進(jìn)行其他的計算。
圖4 單位立方體頂點(diǎn)坐標(biāo)示意圖
2.5.2體數(shù)據(jù)的內(nèi)部可視化
當(dāng)在虛擬現(xiàn)實(shí)環(huán)境中對體數(shù)據(jù)進(jìn)行觀察操作時,如果使用者通過激光拾取操作來近距離觀察渲染結(jié)果,有可能導(dǎo)致相機(jī)位置進(jìn)入單位立方體內(nèi)部時,造成渲染圖像突然消失。因?yàn)樵趥鹘y(tǒng)算法中,并沒有針對相機(jī)位置的變化來對光線的方向向量與光線的起始點(diǎn)進(jìn)行重新計算。同時,為了減少計算量,開啟了背面剔除,所以單位立方體內(nèi)部的片元未被渲染。改進(jìn)方法流程如圖5所示。
圖5 體數(shù)據(jù)的內(nèi)部可視化實(shí)現(xiàn)流程圖
通過計算得到相機(jī)在單位立方體局部坐標(biāo)系下的相對位置坐標(biāo),即可根據(jù)坐標(biāo)值的大小判斷相機(jī)是否處于單位立方體內(nèi),如果相機(jī)處于單位立方體外部,則原來的算法保持不變。如果相機(jī)處于單位立方體內(nèi)部,則將光線起點(diǎn)改為相機(jī)位置,并關(guān)閉背面剔除,光線的方向向量則通過背面片元坐標(biāo)減去相機(jī)坐標(biāo)獲得。
由于并不是所有使用者都接入了VR設(shè)備,所以保留了傳統(tǒng)的基于二維屏幕的顯示方式。當(dāng)Web端利用WebGL完成圖像的渲染時,渲染結(jié)果將以普通模式顯示在屏幕上。然后再檢測是否有VR設(shè)備接入Web,若檢測到有設(shè)備接入,則使用者點(diǎn)擊“ENTER VR”按鈕,即可由普通模式切換到VR模式。
渲染圖像在VR中顯示需要利用WebVR API。WebVR API能為虛擬現(xiàn)實(shí)設(shè)備的使用提供支持,提供了如Oculus Rift或者HTC Vive等頭戴式顯示設(shè)備與Web端的連接??梢酝ㄟ^獲取VR設(shè)備返回的位置和動作信息,來改變使用者在虛擬空間里的位置、行為。本文使用HTC Vive來實(shí)現(xiàn)虛擬現(xiàn)實(shí)中的體繪制可視化。
在普通模式中,利用WebGL渲染的三維空間中的物體必須通過模型矩陣、視圖矩陣、投影矩陣的矩陣變換轉(zhuǎn)變成屏幕上的二維圖像才能正常顯示。在Three.js中,投影矩陣和視圖矩陣被封裝到了相機(jī)的屬性當(dāng)中,在使用時可以方便地調(diào)用。
通過控制相機(jī)在世界坐標(biāo)系中的位置,即改變視圖矩陣來間接實(shí)現(xiàn)對場景中物體的平移、旋轉(zhuǎn)和縮放的操作,在普通模式中提供簡單的交互操作。
VR模式中物體的顯示與普通模式有很大區(qū)別。主要區(qū)別在于:首先,對WebVR場景中的顯示需要進(jìn)行雙屏渲染。如圖6所示,需要根據(jù)瞳距等信息分別設(shè)置左右兩個相機(jī),再根據(jù)左右相機(jī)的視圖矩陣和投影矩陣?yán)L制圖像。其次,WebVR場景相機(jī)的方向、位置等參數(shù)由使用者的頭戴式顯示設(shè)備的狀態(tài)信息確定。當(dāng)使用者的現(xiàn)實(shí)視角發(fā)生變化時,WebVR場景的相機(jī)也隨之動態(tài)變化。
圖6 WebVR成像示意圖
在VR模式中,渲染流程如下:
(1) 獲取接入Web瀏覽器的VR設(shè)備信息,完成準(zhǔn)備工作。
(2) 設(shè)置渲染循環(huán)。由于需要根據(jù)使用者行為動態(tài)繪制每一幀場景,所以需要使用一個循環(huán)函數(shù),不斷執(zhí)行遞歸循環(huán),實(shí)現(xiàn)動態(tài)更新。接入VR后會優(yōu)先使用VR設(shè)備原生的刷新率,以達(dá)到合適的渲染幀頻,實(shí)現(xiàn)更佳的顯示效果。
(3) 動畫渲染。在每一幀中,瀏覽器可以通過WebVR得到渲染所需的幀數(shù)據(jù)。其中包括當(dāng)前幀的左右視口的投影矩陣和視圖矩陣。分別設(shè)置左右相機(jī)和左右視口,并將視圖、投影矩陣賦值給左右相機(jī),然后傳入著色器,著色器分兩次在左右視口中進(jìn)行繪制,得到左右眼的渲染圖像,再通過WebVR將圖像發(fā)送至HTC Vive中顯示出來。
為了充分發(fā)揮虛擬現(xiàn)實(shí)技術(shù)在體數(shù)據(jù)可視化中的優(yōu)勢。結(jié)合HTC Vive的手柄控制器硬件,在VR環(huán)境中,為渲染后的三維圖像設(shè)計實(shí)現(xiàn)了三維交互功能:激光拾取、平面裁剪。
從手柄處射出一道具有一定長度的激光射線,當(dāng)激光與虛擬現(xiàn)實(shí)場景中物體發(fā)生碰撞事件時,通過按手柄上的扳機(jī)鍵并移動或旋轉(zhuǎn)手柄即可使該物體發(fā)生對應(yīng)的移動與旋轉(zhuǎn)。在虛擬現(xiàn)實(shí)環(huán)境中對體繪制可視化結(jié)果實(shí)現(xiàn)任意角度、任意距離的觀察。實(shí)現(xiàn)方式如下:
(1) 初始化手柄。在世界坐標(biāo)系中載入預(yù)制的手柄模型對象。
(2) 在渲染循環(huán)中,獲取手柄對象的模型矩陣,其中包含了手柄對象在世界坐標(biāo)系中的坐標(biāo)、旋轉(zhuǎn)方向、縮放等信息數(shù)據(jù)。利用坐標(biāo)和旋轉(zhuǎn)方向,即可從手柄頂端出發(fā),沿著手柄的方向繪制射線。由于所有信息在循環(huán)中動態(tài)更新,所以射線的位置和方向相對于手柄保持同步變換。
(3) 當(dāng)按下扳機(jī)鍵時,利用Raycaster對象,得到與射線相交物體。Raycaster對象在Three.js中用于進(jìn)行光線與物體的碰撞檢測。用上一步中得到的坐標(biāo)和旋轉(zhuǎn)方向設(shè)置Raycaster對象就可以得到與射線相交物體對象列表,并在列表中選擇與手柄距離最近的相交物體對象。
(4) 為手柄與相交物體建立“父子關(guān)系”,相交物體成為手柄的子對象,隨著父對象的移動發(fā)生移動。首先,獲取已得到的相交物體的模型矩陣,模型矩陣控制物體在世界坐標(biāo)下的坐標(biāo),然后通過父對象的模型矩陣更新子對象的模型矩陣即可。
(5) 松開扳機(jī)鍵時,解除手柄與相交物體的“父子關(guān)系”。
由此,即可完成相關(guān)操作。
在醫(yī)學(xué)可視化中,往往需要將體數(shù)據(jù)中的內(nèi)部細(xì)節(jié)信息顯示出來。雖然調(diào)節(jié)傳輸函數(shù)能夠展示體數(shù)據(jù)的不同部分,但是對于比較復(fù)雜的體數(shù)據(jù),很難僅通過傳輸函數(shù)將所需內(nèi)部細(xì)節(jié)表現(xiàn)出來。因此需要體數(shù)據(jù)裁剪工具,屏蔽外部遮擋的部分,以凸顯內(nèi)部細(xì)節(jié)信息。傳統(tǒng)的醫(yī)學(xué)可視化系統(tǒng)所提供裁剪面功能,由于二維屏幕的限制,只有由矢狀面、冠狀面和水平面等特定方向進(jìn)行平面裁剪操作,且操作與設(shè)置需要不斷調(diào)整,使用不便。因此,本文設(shè)計了在虛擬現(xiàn)實(shí)空間中的平面裁剪功能,使用激光拾取功能可以自由操控體數(shù)據(jù)以及裁剪平面的位置,實(shí)現(xiàn)沿著任意角度對體數(shù)據(jù)進(jìn)行裁剪,操作簡便。流程如下:
(1) 初始化裁剪平面。通過確定平面內(nèi)一點(diǎn)P及其法向量n,即可確定平面在世界坐標(biāo)中的位置和方向,以此來初始化平面對象。
(2) 動態(tài)更新裁剪平面。由于單位立方體在頂點(diǎn)著色器和片元著色器中的坐標(biāo)不同,所以兩者的交互需要在單位立方體的局部坐標(biāo)系下計算,即以單位立方體為參照,裁剪平面的位置和方向。點(diǎn)P和法向量n并不會自動更新,所以需要在每一幀中通過計算更新,得到點(diǎn)P和法向量n在單位立方體的局部坐標(biāo)系下的值。公式如下:
(3)
(3) 將點(diǎn)P和法向量n傳入片元著色器中,計算裁剪后的結(jié)果并顯示。在光線投射法體繪制中,每當(dāng)沿著一道射線進(jìn)行顏色和不透明度合成時,對于每一個采樣點(diǎn),都需要判斷該采樣點(diǎn)與裁剪平面的位置關(guān)系,若該采樣點(diǎn)在裁剪平面的正面一側(cè),就進(jìn)行合成運(yùn)算;若在背面一側(cè),則跳過該采樣點(diǎn),重復(fù)該操作,直到合成結(jié)束。
這樣就得到了經(jīng)過裁剪的體繪制結(jié)果。
實(shí)驗(yàn)計算機(jī)配置為Intel?CoreTMi7- 6700HQ CPU @2.60 GHz;顯卡為NVIDIA GeForce GTX 1070;內(nèi)存為16 GB;Windows 10 64位操作系統(tǒng)。實(shí)驗(yàn)體數(shù)據(jù)為頭部CT數(shù)據(jù),分辨率為256×256×225;測試瀏覽器使用FireFox。在常規(guī)模式中,結(jié)果如圖7所示,在VR模式中的結(jié)果如圖8所示,體數(shù)據(jù)內(nèi)部可視化結(jié)果如圖9所示。系統(tǒng)運(yùn)行流暢,無卡頓,顯示效果清晰。
圖7 普通模式下的可視化結(jié)果
圖8 VR模式下的可視化結(jié)果
圖9 體數(shù)據(jù)內(nèi)部可視化結(jié)果
本文實(shí)現(xiàn)了在虛擬現(xiàn)實(shí)環(huán)境中的醫(yī)學(xué)體數(shù)據(jù)可視化系統(tǒng),并針對虛擬現(xiàn)實(shí)環(huán)境設(shè)計了激光拾取、體數(shù)據(jù)內(nèi)部可視化與平面裁剪功能,提供沉浸式的可視化與交互體驗(yàn),有利于針對三維醫(yī)學(xué)影像的醫(yī)學(xué)診斷與教學(xué)工作。同時,運(yùn)行于Web端,無需下載安裝軟件及其他可視化插件,可以跨平臺運(yùn)行,使用方便。下一步的工作主要包括兩方面:(1) 在交互方面,將可交互的傳遞函數(shù)直接集成到VR環(huán)境中,在VR模式實(shí)現(xiàn)對傳遞函數(shù)的操作;(2) 在體繪制方面,目前的成像效果還有不足,下一步將在體繪制算法中加入實(shí)現(xiàn)光照的算法,實(shí)現(xiàn)更好的顯示效果。