(電子科技大學 計算機科學與工程學院, 成都 610054)
摘 要:
基于VTK開源軟件包,結合Java applet編程,采用Java applet簽名技術對程序進行簽名認證。實現了Web方式下DICOM醫學圖像的三維重建,在重建的三維體上清晰顯示出了人體器官的解剖結構,重建可在Internet上以Web模式跨平臺運行,并可在三維體上進行交互切割和模擬手術開窗。分析用Java applet實現基于Web的醫學斷層圖像三維重建是可行的,且實現的系統便于維護和升級,說明在臨床上有很大應用價值。
關鍵詞:醫學圖像; 可視化開發包; 三維重建; Web; 三維切割
中圖分類號:TP39 文獻標志碼:A
文章編號:1001-3695(2009)02-0789-03
Medical image 3D-reconstruction and volume-clipping based on Web
WANG Zhao-wei, CHEN Lei-ting, FANG Chun-lan
(School of Computer Science Engineering, University of Electronic Science Technology of China, Chengdu 610054, China)
Abstract:Based on the VTK open source toolkit and programming with Java applet, signed the program with Java applet sign tool. Developed 3D-Reconstruction system of DICOM medical images, visualized the anatomic structure of human body, and the system is cross-platform and can clipping and cropping the volume data. 3D-Reconstruction based on Java applet can be applied on Web, and can be modified and upgraded conveniently. The system will play great roles in clinical field.
Key words:medical image; VTK; 3D-reconstruction; Web; volume-clipping
隨著計算機可視化技術的發展,醫學影像在醫院臨床診斷、醫學教學科研等方面正發揮著極其重要的作用。傳統的影像技術只是獲得人體某一斷層的影像數據,然后醫生通過膠片進行診斷或通過顯示屏幕進行觀察。而通過對二維醫療圖像序列的三維重建技術可以提供醫療影像數據的真實感官效果,使得醫務人員可以從多方位、多層次的觀察角度對影像數據進行詳細的觀察,減少主觀判斷對診斷結果的影響,提高診斷的準確性。
傳統的醫療圖像三維重建采用的方式均是通過在用戶機器上直接安裝并使用,同一個醫院有多個用戶就要安裝多次,同時系統的升級和維護極為不便。本文研究將Web技術與醫學圖像三維重建相結合,系統一次性安裝,就能實現不同的人員從不同的地點,以不同的接入方式(如LAN、 WAN、 Internet/Intranet等)訪問并進行醫學圖像三維重建和分析操作。系統的升級和維護只需要在服務器進行一次性修改,而不必在每臺安裝了系統的機器上進行升級維護。不僅可以減輕系統維護與升級的成本和工作量,而且可以降低用戶的總成本。通過采用Java這樣的跨平臺語言,可以不必考慮客戶所使用的操作系統平臺,從而使系統的升級和維護更加方便、快捷、高效。
1 醫療圖像序列的三維重建
體可視化(volume visualization)技術是醫學可視化的重要研究內容,其處理過程包括體數據的獲取、模型的建立、數據的映射、體繪制等操作。體數據主要是通過采樣、模擬或建模等技術獲得的。在醫學中主要是指計算斷層造影(CT)、磁共振成像(MRI)、磁共振血管造影(MRA)、超聲波成像(US)、正電子發射計算斷層造影(PET)、單光子發射計算斷層造影(SPECT)等設備采樣的切片數據集,多采用DICOM圖像格式[1]。在醫學中,體可視化的目標就是通過三維數據場可視化技術創建出能準確反映人體的視覺影像[2]。三維數據場的可視化方法主要有兩類:a)面繪制,是指體表面的重建,即由切片數據集提供的三維數據中抽取出等值面,然后再用傳統的圖形學技術實現表面繪制,面繪制可以有效地繪制三維體的表面;b)體繪制(volume rendering)以體素作為基本單元,直接由切片數據集生成三維體的圖像,包括體數據的采樣、重構、重采樣、組合、繪制等操作[3]。
2 醫療圖像可視化開發包(VTK)介紹
VTK(the visualization toolkit) 是美國Kitware公司的一個開放源碼的開發包(open source),主要用于三維計算機圖形學、圖像處理和可視化。它在科學計算可視化尤其是三維重建功能如面繪制和體繪制方面具有強大的功能,使其在可視化,尤其是在醫學圖像三維重建領域得到廣泛應用。VTK支持Windows、UNIX等多種平臺,支持C、C++、Java、Tcl/Tk以及Python等編程語言,目前已發布的穩定版本是5.03。
VTK是在三維函數庫OpenGL的基礎上采用面向對象的設計方法發展起來的,它將開發人員在可視化開發過程中經常遇到的細節屏蔽起來,并將一些常用的算法封裝起來。比如它將在表面重建中比較常見的Marching Cubes算法封裝起來,以類的形式給予支持,這樣在對三維規則點陣數據進行表面重建時就不必再重復編寫Marching Cubes算法的代碼。 VTK是給從事可視化應用程序開發工作的研究人員提供直接的技術支持的一個強大的可視化開發工具,它以用戶使用的方便性和靈活性為主要原則,具有如下的特點:a)具有強大的三維圖形功能。VTK既支持基于體素的體繪制,又保留了傳統的面繪制[4],從而在極大地改善可視化效果的同時又可以充分利用現有的圖形庫和圖形硬件。b)VTK的體系結構使其具有非常好的流streaming和高速緩存caching 的能力,在處理大量的數據時不必考慮內存資源的限制。c) VTK能夠更好的支持基于網絡的工具如Java和VRML。隨著Web和Internet技術的發展VTK有著很好的發展前景。d) VTK具有設備無關性使其代碼具有良好的可移植性。e)既可以工作于Windows操作系統又可以工作于UNIX操作系統極大地方便了用戶[5] 。
本系統充分利用VTK開發包的跨平臺屬性,采用Java語言進行開發[6],結合Java applet技術實現,開發工具采用Jbuilder2006。
3 基于VTK的體繪制技術
VTK采用管線(pipeline)機制對數據進行處理。在醫學圖像序列的體繪制技術中,采用vtkDICOMImageReader類讀取醫學DICOM格式圖像序列,并經過vtkImageShiftScale類進行數據類型轉換;通過選擇不同的vtkVolumeMapper類可以實現不同的體繪制算法,如光線投射算法、2D紋理映射體繪制、3D紋理映射體繪制以及ShearWarp算法等;vtkPieceWiseFunction類通過添加控制點將不同組織的CT值設置一個透明度,可以消隱掉不感興趣的組織或器官,或將某些組織和器官顯示為半透明效果,便于觀察重建體的內部;vtkColorTransferFunction類也可以通過添加控制點的方式給不同CT值的組織賦予不同的顏色,使顯示效果更加逼真;最后,vtkRenderWindow類顯示并管理體繪制結果。繪制管線如圖1所示。
DICOM格式醫學圖像讀取和轉換的Java代碼如下:
vtkDICOMImageReader reader=new vtkDICOMImageReader ();
vtkImageShiftScale reader=new vtkImageShiftScale();
……
reader.SetDirectoryName(DicomDirectory);
reader.Update();
cast.SetInput(reader.GetOutput());
cast.SetShift (2000);
cast.SetOutputScalarTypeToUnsignedShort();
cast.Update();
在現有的三維重建系統中,大多未提供面向用戶的交互手段來進行體重建效果的調節,而只是通過對vtkPieceWiseFunction類和vtkColorTransferFunction類的添加控制點將控制信息寫入程序中,用戶無法對重建效果進行運行時修改。本系統實現了供用戶調節重建體透明度和顏色的控件,如圖2所示,橫坐標表示CT值范圍,縱坐標表示某CT值對應的透明度(透明度0表示完全不顯示該CT值對應的組織)。用戶以直觀的方式在面板上添加修改控制點,將控制點的顏色和透明度參數傳入VTK管線,從而調節不同CT值的組織的顏色和透明度,加強三維體的真實感。例如用戶可以通過調節面板只顯示感興趣的組織如皮膚或骨骼等。
4 三維切割和手術開窗
對重建后的醫學圖像幾何模型進行虛擬剖切,可以方便地看到內部的組織,便于觀察和診斷,使重建后的三維模型更具有診斷價值和手術參考意義。針對醫學圖像重建的表面幾何模型,VTK支持對模型進行平面剖切、立體手術開窗及任意交互切割的算法。
VTK中的vtkVolumeMapper提供AddClippingPlane方法支持對體數據添加切割平面;提供SetCroppingRegionPlanes方法設置切割立方體的頂點,從而依據這些頂點對體數據進行切割。切割立方體的6個面將體數據分為27個區域,通過設置1個27位的區域碼,可以自定義保留這27個區域的那些區域。通過設置區域碼為0x7ffdfff(切除27個區域中的中間1個),可以實現手術開窗效果。切割效果如圖3所示。
Java代碼實現如下:
vtkVolumeRaycastingMapper mapper=new vtkVolumeRaycastingMapper();
……
mapper.SetCroppingRegionPlanes(x1, x2, y1, y2, z1, z2);//頂點
mapper.SetCroppingRegionFlags(0x7ffdfff); //切割掉立方體內部
mapper.CroppingOn();
為便于用戶交互,讓用戶自定義切割平面或切割立方體的位置,系統采用了VTK包中PlaneWidget和BoxWidget為用戶提供交互,鼠標的拖動操作可以改變Widget的位置矩陣,然后通過Widget提供的內部方法獲取切割平面或切割立方體的頂點,實現任意改變切割位置和方向的效果。關鍵代碼如下:
平面切割交互代碼
vtkImplicitPlaneWidget box=new vtkImplicitPlaneWidget();
……
box.GetPlane(plane); //獲取的切割平面
mapper.RemoveAllClippingPlanes(); //清除原切割平面
mapper.AddClippingPlane(plane);//為體數據添加切割平面
立方體切割交互代碼
vtkBoxWidget box=new vtkBoxWidget();
……
box.GetPolyData(vd);//獲取切割立方體的頂點范圍
double x1 =vd.GetPoints().GetPoint(0)[0];
double x2 =vd.GetPoints().GetPoint(1)[0];
double y1 =vd.GetPoints().GetPoint(0)[1];
double y2 =vd.GetPoints().GetPoint(2)[1];
double z1 =vd.GetPoints().GetPoint(0)[2];
double z2 =vd.GetPoints().GetPoint(4)[2];
mapper.SetCroppingRegionPlanes(x1, x2, y1, y2, z1, z2);
5 Web方式的實現及Java applet簽名
開發出來的Java applet程序使用到Web頁面上首先要對生成的class文件打包,生成jar文件,并將其插入HTML文件中;然后將該HTML文件和jar包一并放在Web服務器上。將jar包插入Web頁面的HTML代碼如下:
〈applet
code=\"VolumeRender.class\" //Applet主類
archive=\"VolumeRender.jar\" // jar文件
width=600//顯示寬度
height=600〉//顯示高度
〈/applet〉
出于安全考慮,Java applet程序如果沒有經過簽名,那么訪問的客戶端下載程序后在運行中會受到安全限制,如無法讀寫本地文件等。但是由于三維重建過程中需要讀取本地DICOM格式醫學圖片,必須使用jre自帶的簽名工具對生成的jar包進行簽名,使其有權限訪問本地資源。簽名后,客戶端給予用戶安全提示,用戶確認后瀏覽器能自動下載Java applet,從而能夠使用本地資源。其步驟如下:
a)為包文件(VolumeRender.jar)創建keystore和keys。其中keystore將用來存放密鑰(private keys)和公共鑰的認證。命令如下:
keytool-genkey-keystore monitor.keystore-alias monitor
此命令生成了一個名為monitor.keystore的keystore文件。
b)使用剛才生成的鑰來對jar文件進行簽名:
jarsigner-keystore monitor.keystore VolumeRender.jar monitor
以后如果應用程序進行了修改,直接在服務器端使用如上所示的命令重新對生成的jar文件進行簽名就可以使用了,而無須在每個客戶端重新配置。
c)將公共密鑰導入到一個cer文件中。命令如下:
keytool-export-keystore monitor.keystore-alias monitor-file monitor.cer
d)在c:/admin中產生一個名為monitor.policy的文件。其內容如下:
keystore \"file:c: /admin/monitor.store\", \"JKS\";
grant signedBy \"monitor\"
{
permission java.io.FilePermission \"《ALL FILES》\", \"read\";
};
e)修改\\${java.home}/jre/lib/security目錄下的java.security,找到下面這兩行:
policy.url.1=file:\\${java.home}/lib/security/java.policy
policy.url.2=file:\\${user.home}/.java.policy
在下面添寫第三行:
policy.url.3=file:c: /admin/monitor.policy
最后用HTMLConvert工具,將原有的HTML文件進行轉換。將轉換后的HTML文件替換原來的文件,并放在Web服務器文件目錄中。
6 結束語
隨著Internet/Intranet的發展,基于HTTP協議的Web模式以其安裝、維護和升級的便利性,以及平臺依賴性低等優勢逐漸為開發人員普遍采用,網絡應用軟件的模式正在由傳統的C/S (client/server)模式轉向B/S(browser/server)模式,該模式也將逐漸應用到醫學圖像處理領域。
醫學圖像三維重建在Web下運行成功,將對醫學圖像三維重建系統在臨床應用起重大推動作用。目前臨床上不同型號的設備(CT、MRI、EBCT)分別具有各自的圖像處理系統,其功能十分相似,且受平臺限制相互間不能通用,迫使臨床上軟件不得不重復購置,造成成本提高,嚴重限制了三維醫學重建系統的臨床應用。本研究實現了用Java applet完成Web模式下對醫學圖像的三維重建與三維切割,可從根本上克服上述弊端。Java的平臺無關性使得臨床上所有需要具備三維圖像處理功能的設備如CT、MRI、EBCT等,均可以客戶端的身份連接到網絡環境中,當需要從事三維重建時,直接從瀏覽器下載使用本系統提供的功能進行重建等操作。
本研究還實現了將體繪制效果的調節功能交給用戶來控制,提供了易于理解、使用簡單和交互方便的交互控件,克服了大多數三維重建系統不能調節體繪制顏色和透明度效果的缺點[7]。系統還為用戶提供交互切割和虛擬手術開窗的功能,使系統具有更廣泛的臨床應用前景。
參考文獻:
[1]SHAHIDI R, TOMBROPOULOS R, GRZESZCZUK P R. Clinical applications of three-dimensional rendering of medical data set[J]. Proc of IEEE, 1998,86(3): 555-568
[2]田捷,包尚聯,周明全.醫學影像處理與分析[M]. 北京:電子工業出版社,2003:90-150.
[3]魏娜,王玨,劉明宇.基于visualization toolkit的腦模型三維重建方法研究[J].中國康復理論與實踐,2005(3):167-169.
[4]陳作炳,胡新宇,李世普. 利用DICOM圖片實現CT圖像的三維重建[J]. 武漢理工大學學報,2005,27(2):52-54。
[5]SCHROEDER W J,MARTIN K M,AVILA L S,et al. The VTK user’s guide[K]. [S.l.]: Kitware Inc, 1998.
[6]LEEMPUT K V, HMLINEN J. A cross-platform software framework for medical image processing[C]//Proc of MICCAI’04.Berlin: Springer, 2004:1091-1092.
[7]黃漢青,唐澤圣. 應用于傳遞函數設定的交互式體繪制工具[J]. 計算機學報, 2005,6:1062-1067.