工具包的設(shè)計(jì)與實(shí)現(xiàn)_第1頁(yè)
工具包的設(shè)計(jì)與實(shí)現(xiàn)_第2頁(yè)
工具包的設(shè)計(jì)與實(shí)現(xiàn)_第3頁(yè)
工具包的設(shè)計(jì)與實(shí)現(xiàn)_第4頁(yè)
工具包的設(shè)計(jì)與實(shí)現(xiàn)_第5頁(yè)
已閱讀5頁(yè),還剩1頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

工具包的設(shè)計(jì)與實(shí)現(xiàn)

1可視化工具包的提出科學(xué)計(jì)算的可視化是1987年b.h.mccormick和其他科學(xué)家根據(jù)美國(guó)國(guó)家科學(xué)協(xié)會(huì)(nationalacademyof戲劇性科學(xué))發(fā)表的關(guān)于科學(xué)數(shù)學(xué)可視化的報(bào)告正式提出的,其中顯示了可視化的繁榮??梢暬ぞ甙?VisualizationToolkit)就是在這樣的背景下產(chǎn)生的。可視化是運(yùn)用計(jì)算機(jī)圖形學(xué)和圖像處理技術(shù)將科學(xué)計(jì)算過(guò)程及計(jì)算結(jié)果的數(shù)據(jù)轉(zhuǎn)換為圖形及圖像在屏幕上顯示出來(lái)并進(jìn)行交互處理的理論方法和技術(shù)。近年來(lái)伴隨著計(jì)算機(jī)硬件水平的提高和可視化理論及方法的不斷完善,可視化應(yīng)用已經(jīng)涉及到醫(yī)學(xué)、地球科學(xué)、產(chǎn)品設(shè)計(jì)、建筑等各個(gè)領(lǐng)域。由于可視化開(kāi)發(fā)的過(guò)程中涉及到一些專業(yè)知識(shí),所以希望能有一個(gè)專門(mén)的可視化開(kāi)發(fā)工具能夠簡(jiǎn)化這一過(guò)程以利于其廣泛應(yīng)用。本文引入了一個(gè)功能強(qiáng)大、使用方便、源代碼開(kāi)放的可視化開(kāi)發(fā)工具(VTK),它大大提高了我們的工作效率。2vtk編碼簡(jiǎn)介VTK(VisualizationToolkit)是一個(gè)開(kāi)放源代碼,面向?qū)ο蟮能浖到y(tǒng)。VTK從功能上分為3D計(jì)算機(jī)圖形顯示(GraphicsModel),圖像處理(ImagingProcessingModel)和可視化處理(VisualizationModel)。它包括了圖形圖像和可視化領(lǐng)域內(nèi)的上百種算法,可以跨平臺(tái)使用。VTK是一個(gè)目標(biāo)庫(kù),可以很容易嵌入到應(yīng)用程序中并在此基礎(chǔ)上開(kāi)發(fā)自己的庫(kù)函數(shù),從而建立獨(dú)立的大型應(yīng)用系統(tǒng)。在VTK編譯層中,有關(guān)圖像處理相關(guān)數(shù)據(jù)結(jié)構(gòu)、算法、時(shí)間關(guān)鍵性的功能等被封裝成C++對(duì)象,為VTK其它的類或程序所調(diào)用。編譯后的VTK動(dòng)態(tài)鏈接庫(kù),在與相應(yīng)腳本語(yǔ)言綁定以后,形成這些解釋型語(yǔ)言的接口,稱為解釋層部分。利用解釋層接口可以很方便的使用Tcl/Tk,Python/Tk,JavaAWT等解釋型語(yǔ)言進(jìn)行快速開(kāi)發(fā)或試驗(yàn)VTK的新功能,極大的提高了效率。圖1說(shuō)明VTK在圖像處理程序里所處的層次及內(nèi)核與其它高級(jí)語(yǔ)言的關(guān)系。2.2tkob裝置和vtkmoperationVTK(VisualizationToolkit)采用的是流水線(pipeline)的機(jī)制,幾乎可以對(duì)任何類型的數(shù)據(jù)進(jìn)行處理,并且提供了許多相應(yīng)的類對(duì)各種類型的數(shù)據(jù)進(jìn)行轉(zhuǎn)換或處理,所以我們可以根據(jù)需要建立起自己的可視化流程。vtkObject是VTK的基類,它為整個(gè)可視化流程提供基本的方法。vtkSource是vtkObject的派生類和vtkFilter的父類,它為整個(gè)可視化流程定義具體的行為和接口。vtkFilter是vtkSource的派生類,經(jīng)過(guò)filter的處理后,原始的數(shù)據(jù)能夠轉(zhuǎn)換成可以直接用某種算法模塊進(jìn)行處理的形式。vtkMapper是vtkObject的派生類,它將經(jīng)過(guò)filter處理后的應(yīng)用數(shù)據(jù)映射成幾何數(shù)據(jù),為原始數(shù)據(jù)和圖像數(shù)據(jù)之間定義接口。VTK有一個(gè)特點(diǎn)就是對(duì)于任何進(jìn)行可視化的數(shù)據(jù)它都是通過(guò)角色在窗口中表現(xiàn)出來(lái),所以建立目標(biāo)圖形應(yīng)該做的工作包括:·建立actor(交互操作者),使用vtkActor類來(lái)繪制。幾何數(shù)據(jù)的屬性通過(guò)方法SetMapper()告訴演員?!そenderer(演示者),使用vtkRender類將結(jié)果在窗口中顯示出來(lái)。演員通過(guò)方法AddActor()添加到演示者中?!そenderwindow(繪制窗口),使用VtkRenderWindow()類來(lái)繪制。演示者通過(guò)方法AddR-enderer()添加到窗口中。通常使用類vtkRenderWin-dowInteractor可以對(duì)目標(biāo)圖形進(jìn)行交互操作。2.3vtk地圖處理2.3.1圖形模型2.3.1.燈光的位置VTK中的實(shí)現(xiàn)類為vtkLight。它提供了燈光的位置,燈光的開(kāi)關(guān)狀態(tài),亮度,顏色。也可以設(shè)置光源的照射角度和衰減程度。在設(shè)置好光源后,要把光源加到場(chǎng)景(Renderer)中:2.3.1.聚焦點(diǎn)屬性定義VTK中的實(shí)現(xiàn)類為vtkCamera。相機(jī)的作用是定義觀察者的位置、聚焦點(diǎn)和其它有關(guān)屬性,參數(shù)可由調(diào)用者根據(jù)需要設(shè)定。或者想使用一個(gè)已經(jīng)存在的相機(jī)(例如演示者自動(dòng)裝載的相機(jī)),可以使用:2.3.1.actor屬性設(shè)置Actor代表渲染場(chǎng)景中的實(shí)體,通過(guò)一個(gè)4×4的變換矩陣可對(duì)Actor位置、方向以及大小進(jìn)行設(shè)置,還可設(shè)置Actor的渲染特性(Property)、引用(例如Mapper)、紋理影射(Texture)等屬性。2.3.1.5分配模式2.3.1.6個(gè)特征proto2.3.1.7轉(zhuǎn)換trans格式2.3.2圖形數(shù)據(jù)的編碼VTK使用數(shù)據(jù)流方法把原始信息轉(zhuǎn)換成圖形數(shù)據(jù)。在這個(gè)方法中有兩個(gè)基本對(duì)象:數(shù)據(jù)對(duì)象(DataObject)和流程對(duì)象(ProcessObject)。2.3.2.tk支持的數(shù)據(jù)結(jié)構(gòu)VTK的數(shù)據(jù)對(duì)象有很多種數(shù)據(jù)類型,vtkDataSet類是父類,有嚴(yán)格的數(shù)據(jù)結(jié)構(gòu)。VTK支持的數(shù)據(jù)類型有:多邊形數(shù)據(jù)(vtkPolyData)、結(jié)構(gòu)網(wǎng)格(vtkStructureGrid)、非結(jié)構(gòu)網(wǎng)格(vtkUnStructureGrid)、結(jié)構(gòu)點(diǎn)(vtkStructurePoint)、非結(jié)構(gòu)點(diǎn)(vtkUnStructurePoint)。2.3.1.輸出數(shù)據(jù)的執(zhí)行●源對(duì)象(Source)vtkSource是基類,它指定了源目標(biāo)的行為和接口。源對(duì)象的產(chǎn)生可以有兩種方法:從文件讀入源數(shù)據(jù),程序內(nèi)部產(chǎn)生源數(shù)據(jù)。當(dāng)流程處理完畢后,源對(duì)象會(huì)自動(dòng)刪除源對(duì)象輸出的數(shù)據(jù)?!襁^(guò)濾器對(duì)象(Filter)vtkFilter是基類,是vtkSource的派生類。它接受源數(shù)據(jù)的輸出數(shù)據(jù),在這里需要說(shuō)明,過(guò)濾器的輸出數(shù)據(jù)類型可能與輸入數(shù)據(jù)類型不同?!裼成鋵?duì)象(Mapper)vtkMapper是基類,接受過(guò)濾器的對(duì)象輸入的數(shù)據(jù)并把數(shù)據(jù)映射成基本圖元。2.3.3可視化應(yīng)用3重建樹(shù)種細(xì)胞下面用計(jì)算機(jī)斷層掃描CT來(lái)分析利用VTK實(shí)現(xiàn)數(shù)據(jù)可視化。我們要處理的是人體頭部組織的切片數(shù)據(jù),由切片數(shù)據(jù)重建骨骼表面。采用的算法是基于表面繪制的移動(dòng)立方體法(MarchingCube)。3.1重建算法的介紹3.2重建過(guò)程3.2.1c模式數(shù)據(jù)的可視化Visualization-Toolkit所支持的一種數(shù)據(jù)表達(dá)形式,然后根據(jù)其物理結(jié)構(gòu)建立起相應(yīng)的模型。我們給C數(shù)據(jù)建立抽象的等值面模型。最后將物理組件與抽象模型結(jié)合起來(lái)建立CT數(shù)據(jù)的可視化,以幫助用戶正確理解數(shù)據(jù)。我們所要進(jìn)行處理的是有結(jié)構(gòu)點(diǎn)陣數(shù)據(jù),其拓?fù)浜蛶缀味际请[含的。所以只需要知道數(shù)據(jù)的維數(shù)數(shù)據(jù)源和數(shù)據(jù)空間,利用VisualizationToolkit中的vtkVolume-16Reader就可以很方便的讀取切片數(shù)據(jù)。3.2.3數(shù)據(jù)透視最終表面繪制的結(jié)果如圖5(a)(b)所示。4基于mfc圖形界面的可視化設(shè)計(jì)方法VTK是一個(gè)用于可視化應(yīng)用程序構(gòu)造與運(yùn)行的支撐環(huán)境,它是在三維函數(shù)庫(kù)OpenGL的基礎(chǔ)上采用面向?qū)ο笤O(shè)計(jì)方法發(fā)展起來(lái)的。它強(qiáng)大的可視化功能與MFC圖形界面功能相結(jié)合可快捷開(kāi)發(fā)出高性能的可視化程序。掌握好VTK對(duì)于從事可視化工作的研究者具有十分重要的意義,相信隨著Web和Internet技術(shù)的發(fā)展,VTK將會(huì)有更廣闊的發(fā)展前景。2.1vtk的框架模型VTK主要有兩個(gè)部分組成:利用C語(yǔ)言編寫(xiě)的編譯后的核心層(C++類庫(kù))和按照一定規(guī)則生成的支持腳本語(yǔ)言的解釋層(包括Java,Tcl/TkvtkInterpretedInterface)。VTK是一個(gè)面向?qū)ο蟮目梢暬到y(tǒng),它將可視化過(guò)程中常用的算法封裝起來(lái),隱藏了具體的細(xì)節(jié)。用面向?qū)ο蠹夹g(shù)的對(duì)象模型圖表示VisualizationToolkit的框架結(jié)構(gòu),如圖2所示:VTK是使用面向?qū)ο蠹夹g(shù)實(shí)現(xiàn)的,包含了大量的對(duì)象模型(ObjectModels),根據(jù)其繼承關(guān)系,可以將對(duì)象模型大致劃分為:圖形模型對(duì)象(GraphicsModels)和可視化模型對(duì)象(VisualizationModels)。圖形模型利用了其它3D圖形系統(tǒng)的一些簡(jiǎn)單易于使用的特點(diǎn),同時(shí)也采用了一些目前的GUI德方法,在圖形模型中主要的對(duì)象有如下7種。2.3.1.vtk數(shù)據(jù)流程建模vtkRenderer類和vtkRenderWindow類都是基類,它們結(jié)合起來(lái)管理圖形和窗口系統(tǒng)之間的接口。vtkRenderWindow類用于在顯示設(shè)備上生成一個(gè)窗口,可以設(shè)置窗口的大小,也可以產(chǎn)生立體顯示效果。支持雙緩存。渲染器(Renderer)對(duì)象用于控制目標(biāo)的渲染過(guò)程,它把幾何體,燈光以及攝像機(jī)觀察角度轉(zhuǎn)換成圖像的形式。當(dāng)生成場(chǎng)景后,要把渲染器加到渲染窗口中去:vtkMapper派生類通過(guò)一個(gè)向上觀察板(LookupTable)來(lái)映射數(shù)據(jù)和控制圖形庫(kù)中基本圖元的生成。vtkLook-upTable是vtkScalarsToColors的子類。一個(gè)或多個(gè)Actor可以使用同一個(gè)Mapper。Mapper有多個(gè)參數(shù)對(duì)其進(jìn)行控制。VTK中的實(shí)現(xiàn)類是vtkProperty。它指定了幾何物體的光照及其它特性。例如:光照特性(泛光,漫反射,鏡面反射,邊緣顏色)、漫反射強(qiáng)度、物體的灰度、物體的表現(xiàn)形式(點(diǎn)、線框、表面)、著色模式等等。Transform是一個(gè)4×4變換矩陣的堆棧。有很多對(duì)這個(gè)矩陣進(jìn)行操作的方法:平移、縮放和旋轉(zhuǎn)等。VTK利用了數(shù)據(jù)流程模型,在這個(gè)模型中,各個(gè)模塊在網(wǎng)絡(luò)中連接起來(lái),利用模塊對(duì)數(shù)據(jù)進(jìn)行一系列操作。這種模型的特點(diǎn)是適用于不同的數(shù)據(jù)類型和不同的算法,所以靈活性很強(qiáng)。一般指的是過(guò)濾器(Filter),對(duì)數(shù)據(jù)對(duì)象進(jìn)行操作產(chǎn)生新的數(shù)據(jù)對(duì)象。流程對(duì)象表示了系統(tǒng)的運(yùn)算法則,當(dāng)數(shù)據(jù)在網(wǎng)絡(luò)中流動(dòng)時(shí)對(duì)數(shù)據(jù)進(jìn)行操作。流程對(duì)象可以分為:用VTK進(jìn)行可視化應(yīng)用主要包括兩個(gè)步驟。2.3.3.1建立合適的目標(biāo)圖形來(lái)演示數(shù)據(jù)2.3.3.2建立數(shù)據(jù)流水線(datapipeline)來(lái)處理數(shù)據(jù),也就是把Source,Filter,Mapper連接起來(lái)數(shù)據(jù)對(duì)象和流程對(duì)象結(jié)合起來(lái)產(chǎn)生了可視化流程,如圖3,其中箭頭指向數(shù)據(jù)流的流向。表面繪制法是將感興趣的部分以等值面的方式抽取出來(lái)便于利用真實(shí)感技術(shù),通過(guò)旋轉(zhuǎn)和變換光照效果生成高質(zhì)量的三維圖像,并可對(duì)其觀察和分析。這種繪制方法速度快,適合于實(shí)時(shí)性要求高的情形,如交互操作、圖像引導(dǎo)手術(shù)等。它適合于繪制表面特征分明的組織和器官(例如由CT數(shù)據(jù)生成骨骼三維圖像)。在表面繪制算法中較為常用的是MC法(Ma-rchingCube)。其算法是在數(shù)據(jù)體中將位于兩個(gè)相鄰切片上的8個(gè)相鄰的體素構(gòu)成一個(gè)立方體,然后逐個(gè)處理數(shù)據(jù)場(chǎng)中的立方體,分類出與等值面相交的立方體,采用插值計(jì)算出等值面與立方體邊的交點(diǎn),根據(jù)立方體每一頂點(diǎn)與等值面的相對(duì)位置將等值面與立方體邊的交點(diǎn)按一定方式連接生成等值面,從而作為等值面在該立方體內(nèi)的一個(gè)逼近表示。根據(jù)圖4可以看出利用VTK進(jìn)行表面繪制的流程如下。3.2.2繪制窗口的建立首先利用vtkM-archingCubes類來(lái)提取出某一C

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論