鐘海波, 余偉巍, 席 平, 何 飛
(1. 北京航空航天大學機械工程及自動化學院,北京 100191;2. 昆明醫學院第一附屬醫院骨科,云南 昆明 650032)
隨著計算機技術和醫學三維圖像可視化技術的發展,計算機輔助虛擬外科手術在幫助醫師制訂周密的手術方案、術中導航及臨床教學中均具有重要的指導意義[1]。而在基于醫學圖像數據(CT, MRI等)所重建的三維模型中進行虛擬切割是其中的重點及難點。
文中應用醫學三維圖像可視化技術,結合開發工具VTK和MFC,建立了基于骨組織的計算機輔助模擬手術系統平臺,實現了基于常用繪制算法Marching Cube(移動立方體法)和Ray Casting(光線投射法)的三維圖像模型重建。在此基礎上,給出虛擬切割的交互操作技術以及基于面切割和體切割的三維骨組織模型的切割仿真。
VTK是William J Schroeder, Kenneth M Martin, Willliam E Lorensen三人于1993年在OpenGL 的基礎上利用面向對象技術,設計和實現的可視化開發庫,由美國Kitware公司負責維護。
主要功能是進行計算機圖形、圖像處理和科學計算可視化,尤其提供了強大的三維重建功能[2]。VTK的顯著特點就是管道(Pipeline)化,即一個VTK程序實際上就是一個完整的渲染管道,其具體流程如圖1所示。

圖1 VTK流程圖
虛擬切割的交互操作是利用鼠標模擬手術刀,在三維重構模型上畫出切割線,選定切割區域,剖切位于其中的實體。
(1)坐標系之間的轉換
在計算機圖形學里,通過二維圖像來表現三維立體圖形,如圖2所示三維立體投影到屏幕上得到平面圖像。VTK中提供了虛擬相機(位于視點),用作成像工具。
上述投影變換涉及到了多個坐標系,即世界坐標系,觀察坐標系以及屏幕坐標系,分別對應于圖2中坐標系OXYZ,O′X′Y′Z′,OeXeYeZe。
世界坐標系是用戶所使用的基準,為右手系,同時也用以確定相機及光源的位置和方向。
觀察坐標系是虛擬相機用以成像的坐標系,為左手系。坐標原點O′位于視點上,也即相機的位置,視線方向為Z′軸。相機的特性可表示為一個4×4的變換矩陣,用以將世界坐標轉換為觀察坐標。
屏幕坐標系是圖像平面上真正的像素位置,也是左手系。坐標原點Oe位于視心(視線與屏幕畫面的交點),也即相機的焦點,Ze軸與Z′軸重合。而窗口在屏幕上的大小等因素決定了觀察坐標如何映射為像素位置。

圖2 三維投影原理圖
(2)交互實現
利用鼠標在屏幕上構建一個封閉多邊形,并記錄邊界多邊形頂點的坐標,由所獲取的平面封閉多邊形及視線方向OO′構成一個無限長柱體作為所定義的切割區域。為了方便交互操作,文中采用了橡皮筋畫線的方式,即隨著鼠標的移動,動態顯示所畫直線的臨時圖元。
MFC與VTK均有自己獨立的顯示窗口和消息響應機制,雖然在系統中已將MFC與VTK進行了深層次的集成,構建了統一界面和交互響應,但是兩者的窗口坐標系并不統一,所以在利用MFC鼠標響應獲取頂點坐標構建橡皮筋多邊形的同時,需要利用VTK的鼠標響應獲取多邊形頂點坐標用于坐標轉換。程序中關鍵函數代碼如下:
void OnLButtonDown(UINT nFlags, CPoint point)
{ //MFC的左鍵響應函數,point為MFC窗口中屏幕坐標值
……………………………
iren->GetEventPosition(pick[0],pick[1])
//獲取VTK中屏幕坐標值
picker->Pick((double)pick[0], (double)pick[1],0.0, ren);
//到世界坐標系的坐標變換
picker->GetPickPosition( pickPos )
//獲取世界坐標系中坐標值
……………………………
}
虛擬切割主要是模擬手術刀的效果或是剔除不感興趣部分,操作大多是直接作用于模型數據,通過破壞數據的結構而達到切割效果。在VTK管道流各種數據結構形式中,文中用到了其中兩種:
· Structured points(結構化點集),其數據的拓撲屬性和幾何屬性都是規則的。醫學圖像中DICOM格式即是這一種,對應于VTK中類vtkImageData。
· Polygonal Data(多邊形體數據),由簡單的圖形(三角形等)組成的復雜三維圖形通常是用這種數據結構來表示,對應于VTK中類vtkPolyData。
醫學圖像三維模型分別基于面繪制和體繪制算法重建,文中針對上述不同模型采用了不同的切割實現。
Marching Cube算法的基本思想是逐個處理數據場中的立方體(體素),分類出與等值面相交的立方體,并插值計算等值面與立方體邊的交點來構造中間幾何圖元(一般為三角面片)。在VTK管道流中處理的數據結構表示為多邊形數據(PolyData)。
(1)面切割原理
由切割區域邊界與構成三維模型的三角形面片進行求交運算[4]。通過判斷三角面片頂點與切割區域邊界之間的相對位置來檢測三角面片與切割區域的關系,處在切割區域之內的三角面片被去除,處在切割區域之外的三角面片保留在模型中,相交的三角面片將進行切割運算,并在交界處生成新的三角面片,如圖3所示。
結果改變了輸入多邊形數據的內部幾何和拓撲結構,去除被切割的三角形單元,在交界處生成新的三角形單元,這樣就構成了新的多邊形數據,實現了面切割的功能。

圖3 區域邊界與三角面片位置關系
(2)面切割實現
在VTK中,提供了類vtkClipPolyData來裁剪多邊形數據,用戶可以構建該類對象并設置相關屬性來實現對三維重建模型的任意面切割。另外,通過調用函數GenerateClippedOutputOn來獲取并保存被切割部分的多邊形數據,以此實現后續一系列交互功能。如圖4所示為一面切割過程示意圖。

圖4 面切割過程圖
RayCasting算法的基本思想是對于圖像平面上的每個像素向數據場投射光線,在光線上采樣并沿線段積分計算光亮度和透明度,按采樣順序進行圖像合成,得到結果圖像。可以生成高質量的顯示圖像,由于體繪制計算數據量大,所以相比面繪制,速度較慢。在VTK管道流中處理的數據結構表示為結構化點集(Structured points)。
(1)體切割原理
體繪制模型的切割方法一般有兩種:分別基于投射光線或三維體數據進行處理來達到切割效果。
· 基于投射光線的切割[5]通過投射光線與切割區域邊界面的求交,確定新的光線采樣區間,僅在區間上進行重采樣計算并合成最終圖像。這種方法的優點是保存了數據的完整性,并且由于減少了RayCasting算法采樣點的計算,極大地提高了繪制速度。但是,這種方法不能對被切割掉的部分進行操作。
· 基于三維體數據的切割[6]通過直接對體數據進行操作,檢測體素與切割區域的位置關系,將處于切割區域內的體素值置為所設定閾值,使體數據丟掉該部分灰度信息,從而使其在最終圖像中不可見來達到切割效果。由于三維體數據量比較大,相比面切割,切割速度會比較慢。
由于在虛擬切割過程中,往往需要恢復已被前面切除的部分并進行重新定位切割,以及在切割完成之后,可能需要保留被切割部分并對之進行交互操作。所以文中采用第二種方法,可以直接對體數據進行操作來完成上述功能。
(2)體切割實現
由于VTK中體繪制管道流數據結構Structured points的特殊性,不能改變其數據的拓撲結構,并不能像多邊形數據那樣去除掉數據單元來實現切割,所以只能改變每個體素所包含的灰度值信息。
體數據量非常巨大,達到千萬級(文中CT數據512×512×233),如果遍歷體數據中的每個體素并進行位置關系判斷,計算量將非常大,可以在預處理階段通過設定閾值threshold構建一vtkIdList鏈表,來記錄有效數據點的Id,這樣極大地減少了所需處理的體素數,提高了切割速度。
空間點與切割區域之間的位置關系,一般可以通過點與切割區域邊界(多邊形柱體)之間的距離dis來判斷。若dis<0,則處于切割區域內,將會被“切割”。但是,空間點與面之間三維距離的計算包含大量的乘除法運算,將會影響計算速度。文中通過投影將三維距離計算轉為點與直線二維距離的計算,并在判斷過程中加入了包圍盒的檢測,大大優化了計算速度。
另外,在體切割過程中需要保存被切割的體數據,可以通過構造一與初始數據具有相同拓撲結構的空vtkImageData數據ImageData_T,來臨時儲存體數據,并在切割完成后,獲取被切割體數據的最小包圍盒來優化ImageData_T。
綜上所述,通過遍歷vtkIdList中體素,體繪制切割算法的具體描述如下:
1)獲取當前體素的空間坐標CurrentPoint;
2)將CurrentPoint按視線方向投影到觀察坐標平面,獲取投影坐標ProjectPoint;
3)將ProjectPoint與切割多邊形包圍盒Bounds進行位置關系的初步判斷。若在區域內,則轉至 4),否則轉至 1);
4)將ProjectPoint與切割多邊形繼續進行位置關系判斷,若在區域內,則轉至 5),否則轉至1);
5)將當前體素灰度值按對應位置存入ImageData_T中,并修改當前體素灰度值為所設定閾值。然后轉至 1);
6)獲取被切割體數據最小包圍盒,優化ImageData_T。
圖5為一體切割過程示意圖。

圖5 體切割過程圖
本文利用兩種三維重建方法構建了基于醫學CT數據的三維骨組織可視化模型,并分別成功地在三維重建模型完成了虛擬切骨。對于所述兩種切割方法各有優缺點,由于可視化算法和處理數據的不同,面切割的速度要明顯優于體切割,兩者的切割速度還受切割區域大小的影響;但面切割是對骨面的切割,切割后只是空洞的面,而體切割后能看到骨組織的內部結構。另外,在利用上述方法進行切割過程中,可以把切割后和被切割的數據分別保存,這樣就可以實現重復切割,撤銷切割以及顯示和操作被切割的數據等功能。上述方法均已在輔助模擬手術系統中實現。
結合MFC和VTK實現了虛擬任意切割功能。采用源代碼公開的VTK類庫作為開發醫學系統的基礎,避免了過多介入計算機圖形圖像學底層的算法,也可以根據自己的需要,改進和增加醫學圖像處理所需要的特殊算法,因而可以把更多時間和精力用于模擬手術系統功能的開發,可大大降低開發系統的難度,減少開發時間。
[1]Rhodes Michael L, Roberstson Douglas D. Applications in surgery and therapy [J]. Computer Graphics and Applications, 1996, 16(1): 28-29.
[2]Kitware, Inc. The VTK user’s guide [EB/OL]. USA,http://www.vtk.org.com.
[3]祁俐娜, 羅述謙. 基于VTK的醫學圖像三維重建[J].北京生物醫學工程, 2006, 25(1): 1-5.
[4]秦緒佳, 歐宗瑛, 侯建華. 醫學圖像三維重建模型的剖切與立體視窗剪裁[J]. 計算機輔助設計與圖形學學報, 2002, 14(3): 275-279.
[5]位 軍, 齊 華, 王 毅, 等. 一種實時體切割繪制的光線分段預處理方法[J]. 計算機工程與應用,2006, (34): 225-227.
[6]王滿寧, 韓正之, 宋志堅. 三維醫學圖像的快速重建與任意切割[J]. 復旦學報(醫學版), 2002, 29(2):142-144.