摘 要:可視化是在信息化進程中發展起來的一個全新領域,VT是一個功能強大的可視化工具包。體繪制技術作為可視化最活躍的領域之一,其算法不斷得到改進和完善。簡要介紹VT的功能和應用,描述幾種不同的繪制算法,并在此基礎上用TCL語言實現一個簡單的基于VT的體繪制系統,給出具體設計實現過程。該系統實現體繪制技術中4種不同的算法,為VT工具包更好地應用于可視化領域提供了實踐基礎。
關鍵詞:可視化;VT;體繪制;三維重建
The Implement of Volume Rendering System Based on VT
LI Jing,LI Changhua
(School of Information Control Engineering,Xi′an University of Architecture and Technology,Xi′an,710055,China
Abstract:Visualization is an emerging filed that developed in information progress,VT is a visualization toolkits with strong functions.Volume rendering technology,as an active filed,its algorithm is improving and becomes perfect.In this paper,it introduces the function and application of VT,describes several different rendering algorisms.It realizes a simple volume rendering system which uses TCL,and provides complete process.This system accomplishes four different algorisms about volume rendering.It provides the practical basis that VT toolkit applied in visualization.
eywords:visualization;VT;volume rendering;3D reconstruction
1 引 言
隨著社會信息化的發展和網絡應用的日益廣泛,人們所獲得的信息源越來越龐大,對于大型數據甚至海量數據的處理需求日益迫切。科學計算可視化(Visualization in Scientific Computing就是在這種背景下提出并發展起來的一個全新的領域。科學計算可視化的本質是運用計算機圖形學和圖像處理技術,將科學計算過程中產生的數據及計算結果轉換為圖像,在屏幕上顯示出來并進行交互處理,其核心是三維數據場的可視化[1]。體繪制是可視化最活躍的研究子領域之一 ,它不借助中間圖元,而是直接將三維空間的離散數據轉換為二維圖像。十多年來,在廣大科研人員的努力下,已經發展了一些體繪制技術來分析、理解和繪制數據場中包含的物體,并且已在醫學、天文、地理、氣象、航天等計算機模擬中得到廣泛應用。本文主要簡單介紹可視化工具包VT的功能及應用,并具體實現一個基于VT的利用TCLT語言開發的體繪制系統。
2 可視化工具包VTK
VT(The Visualization Toolkits是一個基于面向對象方法設計的、功能強大的可視化和圖形圖像處理的工具箱。它是在三維函數庫OpenGL 的基礎上發展起來的,VT構造在C++語言之上,它不僅基于C++類庫,還支持腳本語言TCLTk,Java,Python,支持Windows,Unix等操作系統。VT能夠支持和處理多種表示格式的數據,如有規則的或無規則的點陣 (pointsets,圖像 (image,體元數據 (volume 等[2]。此外VT還將在可視化開發過程中會經常遇到的細節屏蔽起來,并將一些常用的算法進行封裝,同時,用戶還可以在VT基類的基礎上開發自己的類庫。自從1993年問世以來,VT憑借其開放靈活的特性受到越來越多人的青睞,不斷地被改進和完善。
2.1 VTK的繪圖模式
VT的繪圖模式可用于2D,3D等一般圖形的處理,它主要有9種基本對象:
角色(Actor:VTActor代表渲染場景中的繪制對象實體,通過調節參數可以設置角色的位置、方向、渲染特性、紋理影射等屬性。
燈光(Light:VTLlight類提供了燈光的位置、燈光的狀態(開關、亮度、顏色等。同時也可以設置光源的照射角度以及衰減程度。
照相機(Camera:VTCamera類用來設置視點的位置以及焦點位置及其他屬性。
屬性(Property:Property主要用來說明幾何物體的一些特征。比如光照特性、著色模式、物體灰度等。
映射(Mapper:Mapper指定數據與基本圖元之間的關系,VTMapper的派生類通過一個向上觀察板(LookupTable來映射數據,同時控制與圖形庫相連的圖元的生成。
變換(Trasform:VTTrasform是一個放置4×4變換矩陣的堆棧,可以對這個矩陣進行平移、縮放、旋轉等操作。
渲染窗口(RenderWindow:其基類為VTRenderWindow,用于在顯示設備中生成一個窗口,渲染窗口是用戶圖形界面,可以設置渲染窗口的大小,也可以產生立體顯示效果,支持雙緩存。
渲染器(Render:基類為VTRenderer,主要用于控制目標的渲染過程,管理光源、照相機位置等屬性。
窗口交互(Render Window Interactor:在VT中,VtkRenderWindowlnteractor是場景交互方法的一種,它作為一種簡單的工具可以用來操作相機、選取對象、調用用戶定義的函數等。
2.2 VT的可視化模式
可視化模式主要用于可視化過程中的數據模式如CT,MRI的數據輸入及處理。VT使用數據流的方式將源數據轉換為圖像數據。這里包含數據對象和處理對象2類基本對象。數據對象用來表示各種類型的數據,它由幾何結構、拓撲結構以及屬性數據(如向量、標量組成。處理對象一般分為源處理對象(Source、過濾器(Filter、映射器(Mapper三類,它用來操作數據對象并生成新的數據對象。處理對象表示系統中對數據進行處理的算法。將數據對象和處理對象連接在一起就形成VT中的可視化流水線[3],如圖1所示。

3 體繪制系統介紹與實現
這里使用TCLT語言,利用VT函數庫實現一個簡單的體繪制系統。通過這個系統主要介紹如何通過調用VT函數庫實現圖像重建,并且通過一個切片數據bolt.slc向大家展現不同的繪制方法所表現出的不同的效果。它可大體分為前臺交互及后臺計算2部分。其中前臺交互是通過Tk實現的,后臺的計算則以TCL為開發平臺,通過對VT中封裝的對象及方法的調用來實現。在整個系統中,對三維數據的繪制使用4種不同的方法:最大密度投影法;合成法;等值面法;二維紋理映射法。
3.1 TCLT
TCI 代表“ Tool Command Language” ,是一種簡單的腳本語言,它幾乎在所有的平臺上都可以解釋運行,功能強大。TCL主要用于發布命令給一些交互程序如文本編輯器、可視化工具軟件、仿真工具等。它語法很簡單,并有很強的擴充性。T是對 TCL的圖形工具箱擴展。T發行版與 TCL 的發行版是在一起的[4]。在創建 T小部件時,幾乎很少使用命令,一半以上都是按鈕或文本小部件的變體。選用TCLTk作為開發語言,是因為它靈活的特性和簡單的語法可以很方便地與VT進行融合。
3.2 常用繪制算法介紹
(1 MC算法:Marching Cubes 算法是一種應用很廣泛的由體密度數據重構三維等值面的方法。MC算法也被稱為“等值面提取”(Isosurface Extraction,其本質是將一系列兩維的切片數據看作一個三維的數據場,從中將具有某種域值的物質抽取出來,以某種拓撲形式連接成三角面片。MC算法流程如下:每次讀出2張切片,形成1層,2張切片上下對應的8個點構成1個立方體,然后按從左到右,從前到后的順序處理1層中的立方體,抽取每個立方體中的等值面,然后從下到上直至處理到n-1層,所以稱為移動立方體算法。MC算法屬于面繪制,也可以稱為間接體繪制。
(2 光線投射算法:光線投射算法(Ray Casting是直接體繪制中最常用的算法,它的基本思想是:從屏幕上的每一像素點發出1條視線,這條視線穿過三維場的體元矩陣,沿這條視線等距設置采樣點,將距離采樣點最近的8個數據點所組成體素的顏色值及不透明度進行三次線形插值,求出該采樣點的不透明度及顏色值。然后可以按從前到后或從后到前的合成公式對所有采樣點的顏色和不透明度進行合成。當對所有像素點都進行以上過程后,就會得到此數據場的體繪制結果圖像。
3.3 四種繪制方法分析與實現
(1 最大密度投影法:假設每一個體元都是能夠發光的立方體,沿著光線方向,選擇每條與體元相交的直線上的全部點中的最大的密度值作為圖像投影平面密度值,這就是最大密度投影(MIP算法。在MIP描繪過程中,主要實現光線路徑上的點中最大密度點投影的功能。這一過程在VT的定義中屬于光線投射算法的三維數據體繪制。在VT實現過程中首先通過調用vtkSLCReader函數讀取切片數據并設置讀取路徑,這里與Slice方法不同的是,是通過設計轉換函數實現顏色和不透明度設置。在這里通過調用vtkPiecewiseFunction函數和vtkcolorTransferFunction函數將體數據值轉換成不透明度和顏色等光學屬性,并使用vtkVolumeProperty函數對其顏色、不透明度等屬性進行加載,接著調用vtkVolumeRayCastMIPFunction函數加載繪制方法,然后使用AddVolume將產生的mip_volume及通過類vtkCubeSource定義的Actor:outline_mapper加入到ren2中。最后調用vtkRenderer進行投影。在MIP中有2種方法可以用來改變最大值操作的行為:SetMaximizeMethodToScalarValue( 方法或SetMaximizeMethodToOpacity(方法。如果采用第一種方法,則沿著射線的每一個采樣點的標量值均被考慮,其中具有最大標量值的采樣點被選擇,然后這個標量值被傳遞給顏色和不透明度轉換函數用來來生成最后的射線值;如果調用第二種方法,則沿著射線的每一個采樣點的不透明度都將被計算,其中具有最大不透明度的采樣點將被選擇。在這里采用第一種方法,即通過調用vtkVolumeRayCastMIPFunction類中的SetMaximizeMethodToScalarValue方法來實現最大密度投影設置。效果圖如圖3所示。

(2 合成算法:合成算法(Composite是對每條光線上的每個像素點的密度進行加權求和,將結果作為圖像投影像素的密度值。在Composite描繪過程中,主要實現光線路徑上所有點的密度加權和的投影功能。這一過程在VT的定義中同屬基于光線投射算法的三維數據體繪制。它的實現過程基本類似于MIP,在這里借助于類vtkVolumeRayCastCompositeFunction對取得“光線路徑上所有點的密度之和的投影”這一功能做了定義。在vtkVolumeRayCastCompositeFunction 中,有2種方法可以用來改變插值和分類的順序,分別是:SetCompositeMethodToInterPolateFirst(插值優先方法和SetCompositeMethodToClassifyFirst(分類優先方法。這種設置僅在采用三線性插值的時候才會產生影響。在第一種情況中,先執行插值,以此決定采樣點的標量值,然后在將這個值用于分類;在第二種情況中,將先執行分類,之后在執行插值。插值優先通常能產生較好的效果,因此在這里采用默認的第一種插值優先法。效果圖如圖3所示。
(3 等值面法:等值面法(Isosurface是利用表面的信息對圖像進行繪制。雖然該方法同屬基于光線投射算法的三維數據體繪制,但是其本質更接近于面繪制。在實現過程中借助ShadeOn方法及SetInterpolationTypeToLinear方法對陰影功能和插值功能進行定義。并使用類vtkVolumeRayCastIsosurfaceFunction中的方法SetIsoValue設置等值面的初始值。在Isosurface描繪過程中,主要實現光線路徑上所有密度相同的點組成的等值面的投影功能。效果圖如圖4所示。
(4 二維紋理映射法:二維紋理映射二維紋理映射的體繪制是將體數據沿正交方向生成序列二維圖像,產生二維紋理切片,然后將這些二維紋理切片依次堆疊完成體繪制過程。紋理映射算法同屬于體繪制算法,因此同樣需要設置不透明度、顏色、梯度3個傳遞函數來控制三維體的外觀。與光線投射算法不同的是,它調用的映射類型為二維紋理映射。在實現過程中通過vtkPiecewiseFunction函數將體數據值轉換成不透明度和顏色等光學屬性, 使用vtkVolumeProperty函數對其顏色、不透明度、陰影、插值等功能進行加載,調用vtkVolumeTextureMapper2D函數定義二維紋理映射,使用setCamera設置視點位置,并使用[ren1 GetActiveCamera] oom來設置放大系數,最后調用Render進行繪制。效果圖如圖5所示。

3.4 結果討論
試驗結果表明,Slice方法由于是切片投影,數據量相對比較小,因此成像速度快,并可以很清楚的觀測到不同的切片面關于不同數軸的繪制效果。但是它重建的圖像表面不光滑,容易出現鋸齒效應,這可能是由于圖像像素間的距離過大造成的,因此可通過插值計算來緩解這個現象。MIP算法不需要太多的參數設置,實現起來比較簡單,但是它對圖像的細節顯示得不清楚,在細節的描繪上不如Composite算法,這是由于投影密度值選擇方法的不同造成的,因此只能用于對細節要求不高的情況下。Isosurface算法是利用表面的信息進行重建,因此它的表面繪制效果很逼真,能夠很清楚直觀的顯示物體表面信息。
通過VT提供的封裝算法,在一個普通的PC機上實現圖像的三維重建只需幾秒鐘的時間,還可以利用鼠標直接拖動三維模型,實現旋轉、縮放、平移等操作,便于用戶根據需要從不同的視角觀察物體,增強了系統的交互能力。與OpenGL和Matlab相比,VT具有使用靈活簡單、重建速度快,可視化效果好等優點。
4 結 語
在可視化發展過程中,VT憑借其開源、靈活、可封裝、可移植等特性被越來越多的開發人員所采用,它極大地簡化了程序,為開發人員節省了很多的時間和精力,在圖像的三維重建中得到了廣泛應用。本文所實現的系統就是一個將VT應用到體繪制系統中的典型例子。VT將一些常用到的體繪制算法進行封裝,系統通過直接調用這些VT基類實現切片數據的三維重建可視化,通過4種不同的繪制方法,展現了不同的繪制效果。這對于幫助人們更好更深層次地分析、理解、掌握圖像信息產生了極大的推動作用。隨著今后信息化進程的發展,可視化領域將會有更廣闊的發展空間,體繪制技術也將會日益改進和完善。
參 考 文 獻
[1]唐澤圣.三維數據場可視化[M].北京:清華大學出版社,1999.
[2]Will Schroeder.The VT User′s Guide[M].itware,2002.
[3]Will Schroeder.Visualization Toolkit[M].3rd Edition itware,2002.
[4]王道義.TCL/T組合教程[CD2]雙語教材+多媒體教室[M].北京:電子工業出版社,2001.
[5]陳琰,梁云,楊海新.基于VT技術的可視化研究[J].電腦知識與技術,2007,2(11:1 282-1 283,1 304.