醫(yī)學(xué)圖像三維重建_第1頁
醫(yī)學(xué)圖像三維重建_第2頁
醫(yī)學(xué)圖像三維重建_第3頁
醫(yī)學(xué)圖像三維重建_第4頁
醫(yī)學(xué)圖像三維重建_第5頁
已閱讀5頁,還剩44頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、醫(yī)學(xué)圖像三維重建摘 要圖像的三維重建和顯示是科學(xué)計(jì)算可視化的一個(gè)重要分支,尤其在醫(yī)學(xué)領(lǐng)域得到很大的重視,也成為現(xiàn)今的一大研究熱點(diǎn),具有廣泛的應(yīng)用前景。本文設(shè)計(jì)實(shí)現(xiàn)了基于斷層投影(ct)、核磁共振(mri)二維斷層圖像序列的三維重建系統(tǒng),并同時(shí)介紹了三維重建的典型面繪制算法比如mc算法,以及在這過程中相關(guān)的圖像處理關(guān)鍵技術(shù),比如:圖像平滑、圖像分割、圖像配準(zhǔn)、和插值等。同時(shí)還著重介紹了可視化工具vtk(visualization toolkit)特點(diǎn)及其在vc+6.0編程中的配合使用,最后還討論了運(yùn)用matlab實(shí)現(xiàn)單張ct圖片上感興趣區(qū)域的測(cè)量功能,以結(jié)合重建出來的三維圖形輔助分析和診斷,具有

2、實(shí)用意義。該系統(tǒng)采用vc+6.0和vtk作為開發(fā)工具,以windows xp操作系統(tǒng)為開發(fā)平臺(tái).通過vc+實(shí)現(xiàn)在圖像處理中的核心算法,并調(diào)用vtk庫類來實(shí)現(xiàn)圖像的重建和顯示以及旋轉(zhuǎn)和縮放,實(shí)現(xiàn)全方位的觀察。并可根據(jù)不同需要自行選取多種不同的重建方法來實(shí)現(xiàn)。整個(gè)系統(tǒng)的設(shè)計(jì)遵循面向?qū)ο蟮闹笇?dǎo)思想,保證了系統(tǒng)的可維護(hù)性和擴(kuò)充性。關(guān)鍵詞:三維重建;vtk;面繪制;圖像分割;圖像配準(zhǔn)medical image 3d reconstructionabstractimages 3d reconstruction and display is an important embranchment of the

3、visualization in scientific computing. especially in medical field, it becomes a hot research today, and we can set eyes on great potential application in the future.in this paper, we realize a medical image 3d reconstruction system, which is based on the 2d image sequences such as ct (computed tomo

4、graphy) and mri (magnetic resonance imaging). at the same time, the typical surface rendering arithmetic such as mc and other key technologies of image processing are discussed, which are well related to this design. for example, image registration, image segmentation, pixel data set construction an

5、d interpolation. the traits of vtk (visualization toolkit) and how to use it in the vc+ program are also introduced in this article. at last, it realizes the measure function of a piece of ct image by using matlab. so people can do the analysis and diagnosis work better by combining this function to

6、 the 3d reconstructed image.the reconstruction system uses vc+6.0 and vtk (visualization toolkit) as its developing tools, and its based on the windows xp platform. it uses vc+ to realize the key algorithm in the image processing, and calls the vtk library class to implement the reconstruction, disp

7、lay, rotation and zoom. this will help us to observe the reconstructed image in all direction. and you can choose the different reconstruction methods according to your own need. the whole systems design follows the guiding ideology of object-oriented; it has great maintainability and extendibility.

8、 keywords:3d reconstruction;vtk;surface mapping ;image segmentation;image registration; 目 錄摘 要abstract1 緒論(1)1.1 科學(xué)計(jì)算可視化技術(shù)概論(1)1.2 醫(yī)學(xué)圖像三維重建概況(1)1.2.1 國(guó)內(nèi)外研究概況(1)1.2.2 醫(yī)學(xué)圖像三維重建的原理(2)1.3 醫(yī)學(xué)圖像三維重建的目的和意義(3)2. vtk介紹及應(yīng)用程序設(shè)計(jì)(5) 2.1 vtk簡(jiǎn)介(5) 2.2 vtk進(jìn)行三維重構(gòu)的技術(shù)特點(diǎn)(5) 2.2.1 vtk的框架結(jié)構(gòu)(5) 2.2.2 vtk繪制過程(7) 2.2.3 vtk可

9、視化模型(8) 2.2.4 vtk圖形處理(10) 2.3 vtk在vc+環(huán)境下進(jìn)行三維重建(12) 2.3.1 使用vtk處理大量數(shù)據(jù)(12) 2.3.2 用vtk進(jìn)行ct圖像重建(13)3 三維重建體數(shù)據(jù)預(yù)處理的關(guān)鍵技術(shù)(15)3.1 圖像平滑(15)3.1.1 gaussian smooth(15)3.1.2 中值濾波(16)3.1.3 開運(yùn)算(17)3.2 圖像分割(18) 3.2.1 全局閾值法(18) 3.2.2 大津法(19)3.3 構(gòu)建體數(shù)據(jù)集(20) 3.3.1 圖像配準(zhǔn)(22)3.3.2 插值(24) 3.4 提取所需要的等值面(27)3.5 圖像的旋轉(zhuǎn)(27) 3.6 圖

10、像的縮放(28) 4 醫(yī)學(xué)圖像三維重建(29)4.1 醫(yī)學(xué)圖像三維重建算法概述(29)4.2 面繪制(29)4.2.1 邊界輪廓線表示算法(30)4.2.2 移動(dòng)立方體(mc)算法(31)5 醫(yī)學(xué)圖像三維重建系統(tǒng)(35) 5.1 功能設(shè)計(jì)(35)5.1.1 基本功能(35)5.1.2 輔助功能(35) 5.2 系統(tǒng)結(jié)構(gòu)(36) 5.3 重建系統(tǒng)程序流程(36)5.4系統(tǒng)界面(37)5.5 交互(38)5.5.1 旋轉(zhuǎn)和縮放(38)5.5.2 圖像測(cè)量(39)6論文總結(jié)及改進(jìn)(41)致謝(42)參考文獻(xiàn)(43)iv1 緒論1.1 科學(xué)計(jì)算可視化技術(shù)概論科學(xué)計(jì)算可視化是指運(yùn)用計(jì)算機(jī)圖形學(xué)和圖像處理

11、技術(shù),將科學(xué)計(jì)算過程中及計(jì)算結(jié)果的數(shù)據(jù)轉(zhuǎn)換成圖形及圖像在屏幕上顯示出來并進(jìn)行交互處理的理論、方法和技術(shù),它是當(dāng)前計(jì)算機(jī)科學(xué)的一個(gè)重要方向1。發(fā)達(dá)國(guó)家在20世紀(jì)80年代后期提出并發(fā)展這一新的研究領(lǐng)域。在1987年2月召開的關(guān)于科學(xué)計(jì)算可視化的首次會(huì)議中將這一涉及多學(xué)科的領(lǐng)域定名為“visualization in scientific computing”。隨后,西方各國(guó)的著名大學(xué)、科研機(jī)構(gòu)、大公司紛紛進(jìn)行科學(xué)計(jì)算可視化理論和方法的研究。經(jīng)過短暫的十幾年的發(fā)展,科學(xué)計(jì)算可視化理論和方法的研究已經(jīng)在國(guó)際上蓬勃開展起來并開始走向應(yīng)用。隨著技術(shù)的發(fā)展,科學(xué)計(jì)算可視化的含義已經(jīng)大大擴(kuò)展。它不僅包括科學(xué)計(jì)

12、算的可視化,而且包括工程計(jì)算數(shù)據(jù)的可視化,也包括測(cè)量數(shù)據(jù)的可視化,如用于醫(yī)療領(lǐng)域的計(jì)算機(jī)斷層掃描(ct)數(shù)據(jù)及核磁共振(mri)數(shù)據(jù)的可視化,就是最為活躍的研究領(lǐng)域之一??茖W(xué)計(jì)算可視化將圖形生成技術(shù)、圖像處理技術(shù)和人機(jī)交互技術(shù)結(jié)合在一起,其主要功能是從復(fù)雜的多維數(shù)據(jù)中產(chǎn)生圖形,也可以分析和理解送入計(jì)算機(jī)的圖像數(shù)據(jù)。它涉及到計(jì)算機(jī)圖形學(xué)、圖像處理、計(jì)算機(jī)輔助設(shè)計(jì)、計(jì)算機(jī)視覺及人機(jī)交互技術(shù)等幾個(gè)領(lǐng)域。它的意義在于以下幾個(gè)方面:(1)大大加快數(shù)據(jù)的處理速度,使目前每日每時(shí)都在產(chǎn)生的龐大數(shù)據(jù)得到有效的利用;(2)實(shí)現(xiàn)人與人和人與機(jī)之間的圖像通訊,而不是目前的文字或數(shù)字通訊,從而使人們觀察到傳統(tǒng)方法難以

13、觀察到的現(xiàn)象和規(guī)律;(3)使科學(xué)家不僅被動(dòng)地得到計(jì)算結(jié)果,而且知道在計(jì)算過程中發(fā)生了什么現(xiàn)象并可改變參數(shù),觀察其影響,對(duì)計(jì)算過程實(shí)現(xiàn)引導(dǎo)和控制;(4)可提供在計(jì)算機(jī)輔助下的可視化技術(shù)手段,從而為在網(wǎng)絡(luò)分布環(huán)境下的計(jì)算機(jī)輔助協(xié)同設(shè)計(jì)打下了基礎(chǔ)。1.2 醫(yī)學(xué)圖像三維重建概況1.2.1 國(guó)內(nèi)外研究概況作為科學(xué)計(jì)算可視化技術(shù)最為活躍的研究領(lǐng)域之一,醫(yī)學(xué)圖像可視化己經(jīng)經(jīng)歷了二十多年的發(fā)展,國(guó)際上很多著名的科研機(jī)構(gòu)都致力于可視化系統(tǒng)方面的研究,部分甚至已經(jīng)產(chǎn)品化了。目前有很多比較成熟的三維醫(yī)學(xué)圖像重建系統(tǒng),其中包括美國(guó)賓州大學(xué)開發(fā)的3dviewnix系統(tǒng)和德國(guó)漢堡大學(xué)開發(fā)的voxel-man系統(tǒng)等,但都是

14、運(yùn)行在unix環(huán)境下。由美國(guó)國(guó)家健康協(xié)會(huì)(national institute of health)給出的一份臨床醫(yī)學(xué)圖像處理軟件的名單是目前在網(wǎng)絡(luò)上能夠搜索到的較全面和詳細(xì)的相關(guān)產(chǎn)品目錄。其中包括了有關(guān)圖像處理、可視化、圖像配準(zhǔn)、圖像分割等多方面的圖像處理軟件系統(tǒng)。單就可視化方面的軟件,目前共羅列了有36種,如: vtk和3dslice等,這些系統(tǒng)都是由國(guó)際上知名的研究所,大學(xué)和公司等組織開發(fā)研究的。 在國(guó)內(nèi),在可視化方面一直致力于提高重建速度(實(shí)時(shí)顯示利于交互操作),使重建效果理想,減少冗余信息及存儲(chǔ)空間。許多科研單位均作了大量的研究,也取得了一定的成果,如清華大學(xué)開發(fā)的人體斷層解剖圖像三

15、維重構(gòu)系統(tǒng),西北大學(xué)可視化研究所研制的三維醫(yī)學(xué)可視化分析平臺(tái),中科院自動(dòng)化所開發(fā)的visualizer, mitk、3dmax等,但目前還沒有成熟的商業(yè)化系統(tǒng)。這些醫(yī)學(xué)圖像處理系統(tǒng)均考慮到了我國(guó)的具體國(guó)情,并主要從以下幾個(gè)方面進(jìn)行了研發(fā): (1)不完全數(shù)據(jù)提出一個(gè)足夠精確的數(shù)據(jù)提取方案。(2)能夠快速準(zhǔn)確地實(shí)現(xiàn)圖像重建的算法設(shè)計(jì)。(3)界面接口及操作方式的人機(jī)工程方面的優(yōu)化設(shè)計(jì)。 目前很多大醫(yī)院都配有三維圖形工作站,利用工作站醫(yī)生們可以將病人的多幅二維圖像重構(gòu)成三維的形體,并直觀地顯示出來。從而一改醫(yī)生們只能憑經(jīng)驗(yàn)由多幅一維圖像去估計(jì)病灶的大小和形狀,“構(gòu)思”病灶與其周圍組織的三維幾何關(guān)系而給

16、治療帶來困難這一現(xiàn)狀。不過,要獲得一個(gè)好的可視化效果,對(duì)專業(yè)知識(shí)的要求很強(qiáng),繁瑣的參數(shù)設(shè)置調(diào)節(jié)無疑會(huì)給通常不具有專業(yè)可視化技術(shù)的醫(yī)生們帶來很多不便,同時(shí)又降低了診斷效率。目前的可視化軟件需要很多的手工設(shè)置和調(diào)整,這樣即使對(duì)專業(yè)人員而言,達(dá)到最佳的顯示效果也很不易。一幅圖像的顯示,少則需要10多分鐘,多則需要1-2小時(shí)。更重要的是醫(yī)生們漸漸對(duì)工作站失去興趣和耐心,都不愿去用它。從而導(dǎo)致了設(shè)備的閑置和資源的浪費(fèi)。正是因?yàn)檎J(rèn)識(shí)到對(duì)大規(guī)模數(shù)據(jù)的可視化處理的難度,所以現(xiàn)在許多可視化軟件都提出了各種算法,解決時(shí)間及空間的相關(guān)技術(shù),但是在這方面還有很多地方需要不斷地進(jìn)行完善,以滿足日益繁重的可視化處理在時(shí)間

17、、空間以及硬件等方面的要求。算法的改進(jìn)也己經(jīng)成為科學(xué)計(jì)算可視化領(lǐng)域的一個(gè)研究熱點(diǎn)。三維圖形工作站除具備高質(zhì)量的可視化軟件外,還配備高性能的硬件支持。通常,它能提供強(qiáng)大的圖像處理功能,海量存儲(chǔ),網(wǎng)絡(luò)支持等豐富的功能和特色,并提供方便、友好的人機(jī)交互接口。由于醫(yī)學(xué)圖像數(shù)據(jù)的海量特征,醫(yī)學(xué)圖像可視化通常都是在影像工作站甚至小型機(jī)上實(shí)現(xiàn)的,然而即使如此,可視化速度(尤其是體繪制速度)受計(jì)算機(jī)硬件條件的限制,一直達(dá)不到令人滿意的效果。目前使用的可視化系統(tǒng)基本上都是基于面繪制的,因?yàn)樗哂杏?jì)算量小的特點(diǎn)。但在同時(shí),它也具有不能保留物體的內(nèi)部信息的缺點(diǎn),故限制了其在醫(yī)學(xué)圖像可視化中發(fā)揮更大的作用,如果能解決

18、這一問題,面繪制將成為最好的選擇。1.2.2 醫(yī)學(xué)圖像三維重建的原理醫(yī)學(xué)圖像三維重建,就是把由ct、mri等數(shù)字化成像技術(shù)獲得的人體信息在計(jì)算機(jī)上直觀地表現(xiàn)為三維效果,從而提供用傳統(tǒng)手段無法獲得的結(jié)構(gòu)信息2。其可視化過程包括:(1)數(shù)據(jù)預(yù)處理: 可視化的數(shù)據(jù)來源十分豐富,數(shù)據(jù)格式也是多種多樣的,這一步將各種各樣的數(shù)據(jù)轉(zhuǎn)換為可視化工具可以處理的標(biāo)準(zhǔn)格式;(2)映射: 映射就是運(yùn)用各種各樣的可視化方法對(duì)數(shù)據(jù)進(jìn)行處理,提取出數(shù)據(jù)中包含的各種科學(xué)規(guī)律、現(xiàn)象等,將這些抽象的、甚至是不可見的規(guī)律和現(xiàn)象用一些可見的物體點(diǎn)、線面等表示出來;(3) 繪制: 將映射的點(diǎn)、線、面等用各種方法繪制到屏幕上,在繪制中有

19、些物體可能是透明的,有些物體可能被其他物體遮擋;(4) 顯示: 顯示模塊除了完成可視信息的顯示,還要接受用戶的反饋輸入信息,其研究的重點(diǎn)是三維可視化人機(jī)交互技術(shù)。 經(jīng)過多年的發(fā)展,科學(xué)計(jì)算可視化技術(shù)己經(jīng)成為科學(xué)研究中必不可少的手段,它的應(yīng)用使科學(xué)研究工具進(jìn)一步現(xiàn)代化,從而使科學(xué)研究的面貌發(fā)生著根本性的改變。1.3 醫(yī)學(xué)圖像三維重建的目的和意義在人類的發(fā)展過程中一直面臨著與疾病的斗爭(zhēng),這個(gè)斗爭(zhēng)的過程必然要求從人體獲取各種各樣盡可能豐富的信息。因而,與醫(yī)學(xué)相關(guān)的、反映人體各種生理病理狀態(tài)的解剖和功能信息,以及獲取這些信息的方式方法等對(duì)疾病的診斷和治療以及研究具有重大的意義。自古以來“望、聞、問、切

20、”都是國(guó)內(nèi)外進(jìn)行醫(yī)學(xué)診斷最基本的手段。自1895年倫琴發(fā)現(xiàn)了x射線以來,首先應(yīng)用于醫(yī)學(xué)領(lǐng)域,通過透視和照相對(duì)疾病進(jìn)行診斷,從而開創(chuàng)了x射線照相技術(shù),第一次無創(chuàng)傷地為人類提供了體內(nèi)器官組織的解剖形態(tài)圖像,使醫(yī)學(xué)的診斷方式發(fā)生了翻天覆地的變化。1972年x射線計(jì)算機(jī)斷層成像技術(shù)(x-ct:x-ray computerized tomography)的出現(xiàn)奠定了現(xiàn)代醫(yī)學(xué)影像學(xué)的基礎(chǔ),標(biāo)志著人類進(jìn)入二維斷層可視時(shí)代。其后,磁共振成像(mri:magnetic resonanceimaging)、超聲成像(ultrasonic omogra-phy)、數(shù)字血管減影成像(dsa:digitalsubtra

21、ction angiography)、核醫(yī)學(xué)成像(pet、pect)等各種新興的醫(yī)學(xué)成像技術(shù)相繼出現(xiàn)并在臨床上得到了廣泛的應(yīng)用,使得傳統(tǒng)的醫(yī)學(xué)診斷方式發(fā)生了革命性的變化。使用計(jì)算機(jī)對(duì)醫(yī)學(xué)影像設(shè)備采集到的影像進(jìn)行處理這一技術(shù),被稱為醫(yī)學(xué)影像處理與分析,它可以輔助醫(yī)生進(jìn)行更好、更準(zhǔn)確的診斷。隨著現(xiàn)代計(jì)算機(jī)科學(xué)技術(shù)的發(fā)展,醫(yī)學(xué)影像處理與分析越來越多地受到人們的重視,現(xiàn)在己經(jīng)成為一門新興的發(fā)展迅速的交叉科學(xué)領(lǐng)域。然而,現(xiàn)有的二維影像數(shù)據(jù)只表達(dá)某一截面的解剖信息,醫(yī)務(wù)人員主要是通過膠片或者在顯示屏幕觀察二維影像進(jìn)行診斷。無論是膠片還是屏幕顯示仍然是二維圖像,并且只能以固定方式對(duì)圖像進(jìn)行觀察,所得到的診斷

22、結(jié)果帶有醫(yī)生的主觀判斷,這在很大程度上取決于醫(yī)生的臨床經(jīng)驗(yàn)。在放射治療應(yīng)用中,僅由二維斷層圖像上某些解剖部位進(jìn)行簡(jiǎn)單的坐標(biāo)疊加,不能給出準(zhǔn)確的三維影像,造成病變(靶區(qū))定位的失真。目前大多數(shù)臨床應(yīng)用都還停留在這個(gè)水平,而這顯然不能充分利用圖像數(shù)據(jù)中隱含的很多重要信息?,F(xiàn)代醫(yī)學(xué)的發(fā)展使得臨床診斷和治療對(duì)充分利用醫(yī)學(xué)圖像中包含的豐富信息的要求越來越高??茖W(xué)計(jì)算可視化技術(shù)和計(jì)算機(jī)技術(shù)的迅速發(fā)展,使得提供直觀、逼真而且能夠包含原始信息中隱含的豐富內(nèi)容的三維甚至四維(時(shí)間作為第四維)信息成為可能。通過圖像圖形技術(shù),可以對(duì)影像進(jìn)行任意放大、縮小、旋轉(zhuǎn)、對(duì)比調(diào)整、三維重建等處理。而通過醫(yī)學(xué)影像可視化技術(shù),充

23、分利用醫(yī)學(xué)圖像中包含的豐富信息,重建醫(yī)學(xué)影像數(shù)據(jù)中隱含的三維解剖結(jié)構(gòu)和功能信息,揭示人體內(nèi)部精細(xì)的組織解剖信息,增強(qiáng)人們對(duì)人體結(jié)構(gòu)和機(jī)能的理解,為醫(yī)療人員提供病變區(qū)域的三維模型,便于他們從多角度、多層次進(jìn)行觀察,并對(duì)病變體或感興趣的區(qū)域進(jìn)行準(zhǔn)確的定量分析,這無疑對(duì)提高影像數(shù)據(jù)的利用價(jià)值有深遠(yuǎn)的意義,而且對(duì)提高臨床診斷的準(zhǔn)確性和正確性有很大益處。近幾年的siggraph會(huì)議上都設(shè)有可視化、重建技術(shù)在醫(yī)學(xué)中的應(yīng)用專題。醫(yī)學(xué)圖像的三維重建技術(shù)能充分利用ct、mri等醫(yī)學(xué)圖像體數(shù)據(jù),采用面繪制或體繪制的成像算法,可根據(jù)需要得到任意視角透視的三維投影圖像,便于醫(yī)生對(duì)人體內(nèi)部結(jié)構(gòu)進(jìn)行觀察4。利用三維重建技

24、術(shù)對(duì)醫(yī)學(xué)圖像進(jìn)行處理,構(gòu)造三維模型,并對(duì)三維模型從不同方向投影顯示,提取出相關(guān)器官的信息,能使醫(yī)生對(duì)感興趣器官的大小、形狀和空間位置獲得定量描述。三維重建技術(shù)使得醫(yī)生能夠直觀、定量地察看器官的三維結(jié)構(gòu),加強(qiáng)圖像中原有的各種細(xì)節(jié),從而幫助醫(yī)生作出更正確的診斷。采用醫(yī)學(xué)三維圖像重建技術(shù),病人只需要進(jìn)行一次掃描,獲取其患病部位的若干斷層的數(shù)據(jù)(原始數(shù)據(jù)),通過該技術(shù)就可以讓醫(yī)生從多角度進(jìn)行觀察,方便了診斷。醫(yī)生不僅可以從任意角度、位置觀察患病區(qū)域,而且還可以應(yīng)用模式識(shí)別技術(shù),由系統(tǒng)自動(dòng)分析出病灶部位信息,如腫瘤、血栓的位置、大小等。這減輕了醫(yī)生的工作強(qiáng)度,提高了工作效率,有利于提高醫(yī)療行業(yè)的現(xiàn)代化水

25、平。 在臨床手術(shù)中,通過對(duì)患者手術(shù)前后三維圖像的比較很容易進(jìn)行手術(shù)效果的評(píng)定。有利于建立客觀的評(píng)判標(biāo)準(zhǔn),一改以往定性的手術(shù)醫(yī)療模式,引入定量的機(jī)制,從而使醫(yī)學(xué)更加嚴(yán)謹(jǐn)和規(guī)范。因此,將目標(biāo)物體在三維結(jié)構(gòu)上表現(xiàn)出來的醫(yī)學(xué)三維圖像重建成為可視化研究的一個(gè)重要方面。通過對(duì)傳統(tǒng)技術(shù)獲得的離散數(shù)據(jù)進(jìn)行處理,將其轉(zhuǎn)變成為具有直觀立體效果的圖像,充分展現(xiàn)組織或器官的三維狀態(tài),從而提供若干用傳統(tǒng)手段無法獲得的解剖結(jié)構(gòu)信息。而且這種技術(shù)可以為諸如虛擬窺鏡、虛擬解剖等虛擬技術(shù)的進(jìn)一步發(fā)展提供了視覺交互基礎(chǔ)。在此基礎(chǔ)上,也可以實(shí)現(xiàn)矯形手術(shù)、放射治療等計(jì)算機(jī)模擬及手術(shù)規(guī)劃。研究出有效的三維圖像重建技術(shù),能大大的改變目前

26、醫(yī)療的方式,提高醫(yī)療技術(shù)水平,減輕患者痛苦,特別是對(duì)提高手術(shù)成功率有很大的意義。醫(yī)學(xué)影像可視化的研究成果可廣泛應(yīng)用在輔助醫(yī)療診斷、手術(shù)及放射治療規(guī)劃、整形與假肢外科、醫(yī)學(xué)教育等方面。這一新興學(xué)科有著它本身的特點(diǎn),其中很多關(guān)鍵性的問題還未得到圓滿的解決,而這些問題的解決直接影響到計(jì)算機(jī)圖像、圖形技術(shù)在醫(yī)學(xué)上的成功應(yīng)用,并且這些問題的解決不僅有著理論上的意義,而且具有十分重要的應(yīng)用意義。2 vtk介紹及應(yīng)用程序設(shè)計(jì)2.1 vtk簡(jiǎn)介vtk可視化類庫是william j.schroeder, kenneth m.martin, william e.lorensen 三人于1993年,利用面向?qū)ο蟮慕?/p>

27、模技術(shù),設(shè)計(jì)和實(shí)現(xiàn)的源代碼開放的三維可視化類庫3。vtk構(gòu)造在c+語言上,可在windows、unix等操作系統(tǒng)下運(yùn)作,其內(nèi)核獨(dú)立于操作系統(tǒng)。它包含兩個(gè)子系統(tǒng):一個(gè)是c+類庫,另一個(gè)是支持tcl/tk、python, java語言操作編譯過的c+類庫的封裝層。其主要功能包括三維計(jì)算機(jī)圖形學(xué)、圖像處理和可視化三大部分,封裝了圖形圖像學(xué)和可視化領(lǐng)域內(nèi)多種常用算法;同時(shí)開發(fā)人員還可根據(jù)需要在vtk基本類的基礎(chǔ)上開發(fā)自己的類庫。另外,vtk支持多種數(shù)據(jù)類型,如有規(guī)則或無規(guī)則的點(diǎn)陣(point sets),圖像(image),體素?cái)?shù)據(jù)(volume)等,這些數(shù)據(jù)類型的互相轉(zhuǎn)換也非常方便。在vtk中,提供

28、了靈活豐富的用于讀取各種數(shù)據(jù)格式的文件,及其相互轉(zhuǎn)換的類,如從vtkimagereader繼承而來的各種用于讀取圖像的類:vtkbitmapreader(位圖讀取類),vtkjpjegreader(jpeg 圖像讀取類)等。也可以擴(kuò)展基類vtkimagereader,vtkimagewriter,以增加讀寫其他格式圖像的類,如vtkdicomreader,vtkdicomwriter等dicom標(biāo)準(zhǔn)的圖像。同樣,在vtk中,將眾多常用的圖形操作及圖像處理算法封裝成不同的類,易于理解和調(diào)用。應(yīng)用vtk進(jìn)行開發(fā)的系統(tǒng)包含兩種模型:可視化模型和圖像模型??梢暬P陀脕韺?duì)原始數(shù)據(jù)進(jìn)行處理,通過映射(m

29、apper)把數(shù)據(jù)轉(zhuǎn)換成圖像數(shù)據(jù),再通過圖像模型對(duì)圖像數(shù)據(jù)進(jìn)行繪制和顯示。2.2 vtk進(jìn)行三維重構(gòu)的技術(shù)特點(diǎn)2.2.1 vtk的框架結(jié)構(gòu)vtk是在三維函數(shù)庫opengl的基礎(chǔ)上,采用面向?qū)ο蟮脑O(shè)計(jì)方法發(fā)展起來的。它將我們?cè)诳梢暬_發(fā)過程中常用的算法封裝起來,屏蔽了具體的細(xì)節(jié)。vtk采用的是pipeline (流水線)機(jī)制,幾乎可以對(duì)任何類型的數(shù)據(jù)進(jìn)行處理,并提供了許多相應(yīng)的類對(duì)各種類型的數(shù)據(jù)進(jìn)行轉(zhuǎn)換或處理。根據(jù)所要處理的原始數(shù)據(jù)類型的不同和所使用的算法以及所要達(dá)到的結(jié)果,我們可以設(shè)計(jì)和建立起自己的可視化流程,并由此選擇不同的數(shù)據(jù)處理和轉(zhuǎn)換的類,用數(shù)據(jù)通道將這些類連接起來,將原始數(shù)據(jù)類型轉(zhuǎn)換為

30、所采用的算法模塊可以直接進(jìn)行處理的數(shù)據(jù)類型,最終得到我們所需要的可視化的結(jié)果,而且所有的類和算法模塊都是可擴(kuò)充的,用戶可以將自己開發(fā)的類或模塊轉(zhuǎn)換成系統(tǒng)可以接受的形式,并可替換或擴(kuò)充原有的類。所以vtk是一個(gè)開放的系統(tǒng),可以擴(kuò)展到任何應(yīng)用領(lǐng)域。vtk采用流水線(pipeline)機(jī)制,大體框架2.1圖所示。source是流水線的開始,首先通過讀入文件等方式產(chǎn)生源數(shù)據(jù),論文中的數(shù)據(jù)源是一組序列位圖文件。濾波器(filter)可有若干數(shù)據(jù)輸入并可產(chǎn)生若干數(shù)據(jù)輸出,是一個(gè)獨(dú)立的計(jì)算機(jī)模塊,其功能是對(duì)數(shù)據(jù)作各種交換。原始數(shù)據(jù)經(jīng)若干濾波器處理后輸出計(jì)算結(jié)果。mapper是流水線的終端,將filter的輸

31、出轉(zhuǎn)換為圖形數(shù)據(jù),是可視化流水線和圖形模型之間的接口。顯示數(shù)據(jù)時(shí),首先要建立一個(gè)顯示窗口,actor是顯示窗口中的實(shí)體,接收mapper傳來的數(shù)據(jù)屬性。然后建立一個(gè)renderer,通過renderer把結(jié)果最終在窗口中演示出來,一個(gè)窗口可以建立多個(gè)renderer。sourcefiltermapperactorrenderer圖2.1 vtk流水線(pipeline)機(jī)制框架圖用面向?qū)ο蠹夹g(shù)的對(duì)象模型圖表示vtk的框架結(jié)構(gòu)如圖2.2所示。用vtk來產(chǎn)生圖形和進(jìn)行可視化應(yīng)用是非常方便的,它包括兩個(gè)基本部分。首先,建立一個(gè)數(shù)據(jù)流水線(datapipeline)來處理數(shù)據(jù);其次,建立適當(dāng)?shù)哪繕?biāo)圖形

32、來演示數(shù)據(jù)。建立流水線(pipeline)就是將sources,filters和mappers連接起來。 vtkobjectvtksourcevtkfiltervtkrendertkrendervtkactorvtkmapper圖2.2 visualization toolkit對(duì)象模型的框架結(jié)構(gòu)圖vtkobject是vtk的基類,它為整個(gè)可視化流程提供基本的方法。vtksource是vtkobject的派生類和vtkfilter的父類,它為整個(gè)可視化流程的開始(比如讀取數(shù)據(jù)等)定義具體的行為和接口。vtkfilter是vtksource的派生類,它對(duì)數(shù)據(jù)進(jìn)行各種處理,將原始數(shù)據(jù)經(jīng)過各種fil

33、ter的處理后,轉(zhuǎn)換為可以直接用某種算法模塊對(duì)其進(jìn)行處理的形式。vtkmapper也是vtkobject的派生類,它將經(jīng)過各種filter處理后的應(yīng)用數(shù)據(jù)映射為幾何數(shù)據(jù),為原始數(shù)據(jù)與圖像數(shù)據(jù)之間定義了接口。這樣,依據(jù)要處理的數(shù)據(jù)的類型和想要實(shí)現(xiàn)的功能,多種類型的sources 、filters和mappers就連接了起來。類型檢查控制著哪一類的filters可以連接在一起。vtk一個(gè)很特別的地方是:對(duì)于任何進(jìn)行可視化的數(shù)據(jù),它都是通過角色在窗口中表現(xiàn)出來的,因此建立目標(biāo)圖形應(yīng)該做以下工作:·建立renderingwindow(繪制窗口);·建立actor(交互操作者),vt

34、kactor類用來表達(dá)繪制場(chǎng)景中的一個(gè)實(shí)體,也就是繪制場(chǎng)景中的演員,它通過setmapper方法將幾何數(shù)據(jù)的屬性告訴演員。·建立renderer(演示者),通過vtkrender類將結(jié)果在窗口中顯示出來。2.2.2 vtk繪制過程vtk的設(shè)計(jì)目標(biāo)之一是將復(fù)雜的圖形、圖像處理和顯示過程分割成盡量簡(jiǎn)單的對(duì)象,每個(gè)對(duì)象都必須定義明確,實(shí)現(xiàn)上述處理過程的部分功能。在圖形、圖像的顯示方面,共有許多種類控制他們的屬性和操作。一是窗口類,該種類型的類都是從vtkwindow繼承而來,要顯示計(jì)算機(jī)圖形或圖像到計(jì)算機(jī)屏幕上,必須首先打開一個(gè)計(jì)算機(jī)屏幕上的窗口,窗口類負(fù)責(zé)打開一個(gè)窗口,管理打開的窗口資源

35、以及該窗口在屏幕上的位置,使用底層的圖形圖像顯示函數(shù)庫,將圖形、圖像顯示到該窗口,vtkrenderwindow就是我們進(jìn)行繪制時(shí)主要使用的窗口類,為了使用工業(yè)標(biāo)準(zhǔn)的圖形庫,我們還可以使用vtkrenderwindow擴(kuò)展類vtkopenglrenderwindow,實(shí)現(xiàn)對(duì)opengl圖形庫的支持。另一種重要的類是繪制類(rendering),基類為vtkrenderer,該類包含所要顯示的數(shù)據(jù)對(duì)象,控制該圖形或圖像數(shù)據(jù)的空間坐標(biāo)系,控制它們?cè)诖翱谥械娘@示區(qū)域,該類還可以設(shè)置相機(jī)坐標(biāo),控制顯示圖形圖像的平移、旋轉(zhuǎn)、縮放等操作,可以通過該類設(shè)置顯示背景、光照等參數(shù),因而繪制類是控制圖形和圖像等顯

36、示的最重要的一個(gè)類。一個(gè)繪制窗口類可以包含多個(gè)繪制類,這樣在一個(gè)窗口中就可以同時(shí)顯示幾個(gè)不同的場(chǎng)景,這樣的設(shè)計(jì)對(duì)于在一個(gè)窗口中比較可視化的效果是非常有效的。通常所用的繪制類為vtkopenglrenderer,它繼承自vtkrenderer,增加了對(duì)opengl圖形庫的支持。vtkopenglrenderwindow和vtkopenglrenderer在類庫中的繼承關(guān)系如下圖2.3所示:vtkobjectvtkobjectvtkviewportvtkrenderwindoww vtkrenderervtkopenglrenderwindowvtkopenglrenderervtkwin32op

37、englrenderwindowvtkxopenglrenderwindow圖2.3 vtkopenglrenderwindow和vtkopenglrenderer在類庫中的繼承關(guān)系vtkrenderwindow類管理繪制進(jìn)程,它通過調(diào)用render()函數(shù),促使vtkrenderer類刷新窗口中顯示的內(nèi)容,完成繪制過程。一般的繪制過程如下: vtkrenderwindow renwin; renwin->setsize(600,300); /設(shè)置顯示窗口在計(jì)算機(jī)屏幕上的位置 vtkrenderer ren1;/在這里需設(shè)置繪制類所包含的圖形圖像數(shù)據(jù)及其屬性ren1->setvie

38、wport(0.0,0.0,0.5,1.0);/設(shè)置第一個(gè)繪制類所控制的圖形圖像的窗口坐標(biāo)系ren1->setbackground(0.8,0.4,0.2);/設(shè)置背景 renwin->addrenderet(ren);/將它包含到繪制窗口類中 vtkrenderer ren2;/在這里需設(shè)置繪制類所包含的圖形、圖像數(shù)據(jù)及其屬性 ren2->setviewport(0.5,0.0,1.0,1.0);/ ren2->setbackground(0.1,0.2,0.4);/ renwin->addrenderer(ren2);/將它包含到繪制窗口類中 renwin-&

39、gt;renderstart();/開始執(zhí)行繪制命令,完成繪制操作上面所介紹的是普通的繪制過程,沒有涉及到圖形圖像數(shù)據(jù)的裝載、處理等內(nèi)容。在vtk中,控制具體的圖形、圖像數(shù)據(jù),還有它們屬性的類,主要是props, mappers, properties三種類型的類。props類型的類表示所要顯示的二維、三維實(shí)體,它包含該實(shí)體的可見性信息、方向、大小以及該實(shí)體的位置等。vtkprop是所有這些類的基類,在vtkprop中引用mapper類型和property類型的對(duì)象,mapper類型的對(duì)象引用數(shù)據(jù)對(duì)象,并知道怎樣繪制該數(shù)據(jù)對(duì)象,property類型的對(duì)象包含繪制時(shí)所需的參數(shù),例如繪制時(shí)的前景和

40、背景顏色、材質(zhì)等。mapper類型和property類型對(duì)象的基類分別為vtkmapper, vtkproperty這幾種類型的類在繪制過程中的包含、引用關(guān)系如下圖2.4:vtkmappervtkprop繪制vtkwindowvtkrendervtkpropertyvtkdataobject設(shè)置繪制參數(shù)顯示實(shí)體裝入繪制類裝入繪制參數(shù)增加對(duì)該數(shù)據(jù)對(duì)象的引用計(jì)數(shù)得到需顯示的數(shù)據(jù) 圖2.4 繪制過程中各類的相互關(guān)系上面為簡(jiǎn)要的引用、包含關(guān)系圖,實(shí)際在繪制時(shí)一般都是生成這些類的子類的對(duì)象的實(shí)例,在繪制過程中,如果沒有設(shè)置各種屬性,則采用這些屬性的缺省值。2.2.3 vtk可視化模型vtk模型可以與許多

41、商業(yè)應(yīng)用軟件一樣,利用了數(shù)據(jù)流程模型。在此模型中,各個(gè)模塊在network(網(wǎng)絡(luò))中連接起來。當(dāng)數(shù)據(jù)在網(wǎng)絡(luò)中走向時(shí),利用模塊對(duì)數(shù)據(jù)進(jìn)行系列操作。此數(shù)據(jù)流程模型的執(zhí)行是響應(yīng)數(shù)據(jù)的處理以及響應(yīng)用戶輸入。這種模型的特點(diǎn)是靈活性強(qiáng),可適用于不同的數(shù)據(jù)類型及不同的算法。數(shù)據(jù)流程模型由兩種基本對(duì)象組成:·流程對(duì)象:包括可視化流程的模塊及算法。·數(shù)據(jù)對(duì)象:數(shù)據(jù)處理,當(dāng)數(shù)據(jù)在網(wǎng)絡(luò)中流動(dòng)時(shí)對(duì)數(shù)據(jù)進(jìn)行操作。(1) 流程對(duì)象流程對(duì)象又可以分為:1)源(sources)對(duì)象vtksource是基類,指定源目標(biāo)的行為和接口。源對(duì)象是可視化流程的起點(diǎn),源對(duì)象包括readers(從文件中讀入源數(shù)據(jù))vt

42、kdatasetreader類,程式源對(duì)象vtkpolydatasource, vtkstructuredgridsource,vtkstructuredpointssource,vtkunstructuredgridsource,源對(duì)象同時(shí)會(huì)產(chǎn)生輸出數(shù)據(jù)。當(dāng)流程處理數(shù)據(jù)結(jié)束以后,源對(duì)象會(huì)自動(dòng)刪除源對(duì)象輸出的數(shù)據(jù)。2)過濾器(filters)對(duì)象vtkfilter是基類,叢vtksource派生而來,接受從源對(duì)象的輸出數(shù)據(jù),得到數(shù)據(jù)類型及其值。3)映射(mapper)對(duì)象vtkmapper是基類,mapper指定了基本圖元與數(shù)據(jù)之間的接口,接受過濾器對(duì)象輸入的數(shù)據(jù)類型及數(shù)據(jù)值,把數(shù)據(jù)映射為基本

43、圖元。(2) 數(shù)據(jù)對(duì)象vtk共有5種數(shù)據(jù)類型:多邊形數(shù)據(jù)(vtkpoiydata)、結(jié)構(gòu)點(diǎn)(vtkstructurepoint)、非結(jié)構(gòu)點(diǎn)(vtkunstructurepoint)、結(jié)構(gòu)網(wǎng)格(vtkstructuregrid)、非結(jié)構(gòu)網(wǎng)格(tkunstnxcturegrid);vtkdataset是基類。1) vtkdataset類提供關(guān)于數(shù)據(jù)的信息:數(shù)據(jù)的中心,包圍盆,取樣長(zhǎng)度。在vtk中,數(shù)據(jù)由結(jié)構(gòu)(兒何體及表圓形狀)和屬性數(shù)據(jù)組成。結(jié)構(gòu)定義為cells(原子)的集合類,結(jié)構(gòu)的幾何體包括點(diǎn)坐標(biāo)及cells的插值函數(shù),結(jié)構(gòu)的表面形狀由cells的類型及原子于定義點(diǎn)之間的關(guān)系決定的。屬性數(shù)據(jù)可

44、以是點(diǎn)數(shù)據(jù)或cells數(shù)據(jù)。2) 多邊形數(shù)據(jù)(vtkpolydata類)vtkpolydata是vtkdataset派生來的數(shù)據(jù)類型,vtkpolydata可以表示由頂點(diǎn)、直線、多邊形及三角片組成的幾何結(jié)構(gòu),同時(shí)也表示了點(diǎn)的屬性(scalars,向量)值。由vtkpolydata支持的原子類型(vtkcelltype)包括(vtkpolyvertex, vtkvertex , vtkline, polyline,vtktriangle,vtktrianglestrip,vtkpolygon,vtkpixell及vtkquade。vtkpolydata的對(duì)象可以使用特定的方法來遍歷所有數(shù)據(jù)點(diǎn)及對(duì)

45、數(shù)據(jù)進(jìn)行操作:如getcell( )可以得到vtkcellarray的對(duì)象,這樣一來,就可以使用inittraversal()及getnextcell()對(duì)vtkpolydata中的cell進(jìn)行遍歷。3)結(jié)構(gòu)點(diǎn) vtkstructuredpoints是一包括表面形狀及幾何形狀的點(diǎn)陣的幾何體結(jié)構(gòu)。4)非結(jié)構(gòu)網(wǎng)格非結(jié)構(gòu)網(wǎng)格可以為任意cell類型的組合,其中包括od(如點(diǎn)),1d(如線、多義線),2d(如三角形、多邊形)及3d(如六面體、四面體)??梢杂胕nsertnextcell( )插入cell類型。5)結(jié)構(gòu)網(wǎng)格:結(jié)構(gòu)網(wǎng)格指定了幾何體的結(jié)構(gòu)。2.2.4 vtk圖形處理在vtk中,處理圖形和可視化

46、有兩種不同的方式:(1)圖形模式:用于2d, 3d圖形,如一般的圖形處理。(2)可視化模式:用于可視化過程的數(shù)據(jù)流模型,如ct數(shù)據(jù)輸入及處理。圖形模式利用了其他3d圖形系統(tǒng)的一些簡(jiǎn)單易于使用的特點(diǎn),其基本思想來自于電影制作業(yè),同時(shí)也采用了一些目前的gui的方法,在圖形模式中有9種基本對(duì)象:1) 渲染窗口(renderwindow ) vtkrenderwindow是基類,用于在顯示設(shè)備上生成一個(gè)窗口,渲染窗口是用戶圖形界面,可以設(shè)置渲染窗口的大小,也可以產(chǎn)生立體顯示效果,支持雙緩存。其派生類包括:vtkwin320g1rrenderwindow, vtkwin320penglrenderwin

47、dow,vtkxrenderwindow等等。vtkrenderwindow *renwindow=vtkrenderwindow:new();/renwindow->setwindowid(getsafehwnd();/可嵌入到mfc的窗口/renwindow->initialize();/初始化/renwindow->swapbufferson();/設(shè)置雙緩存2) 渲染器(renderer )vtkrendeerer是基類。renderer(渲染器)對(duì)象用于控制目標(biāo)的渲染過程,renderer把幾何體、指定的燈光及攝像機(jī)觀察角度轉(zhuǎn)換成圖像形式。提供了世界坐標(biāo)系,觀察坐標(biāo)

48、系及顯示坐標(biāo)系之間的轉(zhuǎn)換。當(dāng)生成renderer(相當(dāng)于場(chǎng)景)以后,需要在窗口中顯示出來,即把渲染器加入到renderwindow(渲染窗口)中去。vtkrenderer *ren=vtkrenderer:new();renwindow->addrenderer(rend) ;3) 燈光(light) vtklight類提供了燈光的位置,燈光的狀態(tài)(開/關(guān))、亮度、顏色。vtk支持點(diǎn)光源、平行光源。同時(shí)也可以設(shè)置光源的照射角度,以及衰減程度。設(shè)置好光源以后,要把光源加入到renderer(相當(dāng)于場(chǎng)景)中。vtklight *light=vtklight:new();light->s

49、etfocalpoint(camera->getfcalpoint();light->setposition(cameia->getposition();ren->addlight(light );4) 攝像機(jī)(camera )vtkcamera類設(shè)置視點(diǎn)的位置以及視點(diǎn)的焦點(diǎn)位置及攝像機(jī)的一些操作。攝像機(jī)的參數(shù)如下圖2.5所示。 圖 2.5 攝像機(jī)的參數(shù)設(shè)置5) 角色(actor)場(chǎng)景中的目標(biāo)物體。vtkactor代表渲染場(chǎng)景中的實(shí)體,可以設(shè)置actor的位置和方向(從vtkobject繼承來的函數(shù)),也可以對(duì)指定的actor進(jìn)行縮放,actor還具有渲染特性,引用(r

50、eference)(如mapper),以及設(shè)置actor的紋理影射(texture)。actor(角色)把這些變換融合為一個(gè)4x4的變換矩陣x y z 1=x y z 1;這樣,可以進(jìn)行各種變換操作,平移,縮放,繞x,y,z軸旋轉(zhuǎn)。繞世界坐標(biāo)系旋轉(zhuǎn),繞指定軸旋轉(zhuǎn)。6)特征(property )要使三維物體具有真實(shí)感,必須對(duì)物體表面進(jìn)行光照處理。vtkproperty類指定了幾何物體的光照及其他的特性。其特性包括:光照特性(泛光、漫反射、鏡面反射、邊緣顏色)、漫反射強(qiáng)度、物體的灰度、物體的表現(xiàn)形式(點(diǎn)、線框、表面),著色模式(flat , gouraud , phong)等等。7)映射(mapp

51、er )mapper指定了數(shù)據(jù)與基本因元之間的聯(lián)系,vtkmapper的派生類通過一個(gè)向上觀察板(lookuptable)來映射數(shù)據(jù),同時(shí)控制與圖形庫相連的圖元的生成。可以通過向上觀察板( lookuptabie )及數(shù)據(jù)映射的scalar的范圍指定來控制映射方式。mapper有多種控制方式:如scalarvisibility可以設(shè)置scalar的數(shù)據(jù)是否影響相關(guān)的actor的顏色。scalarmode決定物體的顏色是scalar還是celldata的值。mappr另一特點(diǎn)可以決定使用即時(shí)渲染( immediatemoderenderingon ),還是顯示列表渲染( immediatemod

52、erenderingof f )。當(dāng)使用顯示列表渲染時(shí),在渲染庫中會(huì)自動(dòng)生成一數(shù)據(jù)結(jié)構(gòu),渲染庫可以很快地遍歷此數(shù)據(jù)結(jié)構(gòu),并形成渲染。但顯示列表渲染占用內(nèi)存很大,從而影響系統(tǒng)的性能。注:vtklookuptable用來把scalar的位映射到rgb值,或把rgb值映射到scalar的值上。8)變換(transform ) transform是一個(gè)4x4變換矩陣的堆棧,有很多對(duì)此矩陣進(jìn)行操作的方法,如:平移、縮放、旋轉(zhuǎn)。這些操作都在棧的頂部進(jìn)行。actor和camera使用transform矩陣變換操作。注:transform所有的操作都是在右手坐標(biāo)系中進(jìn)行的。2.3 vtk在vc+環(huán)境下進(jìn)行三維

53、重建2.3.1 使用vtk處理大量數(shù)據(jù)在vtk的使用過程中存在的一個(gè)問題是如何處理大量的數(shù)據(jù)。一般情況下,考慮到內(nèi)存空間的有效利用率問題,vtk適用于處理少量的數(shù)據(jù)。對(duì)于大量的數(shù)據(jù),我們可以通過如下的方法來解決:使用releasedataflag在系統(tǒng)默認(rèn)情況下,vtk在每一個(gè)流程中對(duì)濾波器之間的所有中間結(jié)果都有一個(gè)備份。在一個(gè)包含5個(gè)濾波器的流程中,在內(nèi)存中可能會(huì)產(chǎn)生6個(gè)數(shù)據(jù)備份,這可以通過releasedataflagon和globalreleasedataflagon來控制。如果releasedataflagon被設(shè)置到一個(gè)目標(biāo)數(shù)據(jù),一旦一個(gè)濾波器完成對(duì)這個(gè)目標(biāo)數(shù)據(jù)的利用后,內(nèi)存馬上就被

54、釋放。同樣,如果globalreleasedataflagon被設(shè)置到任何目標(biāo)數(shù)據(jù),這些目標(biāo)數(shù)據(jù)所依賴的濾波器停止運(yùn)行后,它們的內(nèi)存馬上就會(huì)被釋放。例如在c+環(huán)境中vtkpoiydatareader *reader=vtkpoiydatareader:new( );reader->getoutput( )->releasedataflagon( );或者:vtkpoiydatareader *reader=vtkpoiydatareader:new( );reader->getoutput( )->globalreleasedataflagon( );設(shè)置release

55、dataflagon( )后,將會(huì)減少對(duì)內(nèi)存影響,但也有缺點(diǎn),那就是內(nèi)存中不會(huì)保留所有的中間結(jié)果。因此,如果我們要間接的改變一個(gè)濾波器的參量,所有的濾波器都必須要重新運(yùn)行來產(chǎn)生新的結(jié)果。如果內(nèi)存中對(duì)間接結(jié)果有保留的話,只有改變參量的濾波器需要重新執(zhí)行。為了取得較好的運(yùn)行效果,我們有一個(gè)建議,當(dāng)在一個(gè)流水線中如果只有一個(gè)步驟的參量可以改變,我們只需要保持?jǐn)?shù)據(jù)在此步驟的較高的優(yōu)先級(jí)并且在所有其它步驟中都使用releasedataflagon即可。使用immediatemoderendering在系統(tǒng)默認(rèn)的情況下,vtk使用opengl演示列表,這樣會(huì)在內(nèi)存中對(duì)數(shù)據(jù)產(chǎn)生備份。對(duì)大部分的大量數(shù)據(jù)來說,

56、為了節(jié)省內(nèi)存,最好不要使用演示列表。我們可以通過打開immediatemoderenderingon來關(guān)閉演示列表。這可以通過immediatemoderenderingon在一個(gè)mapper中加以控制。還可以通過利用globalimmediatemoderenderingon對(duì)一個(gè)過程中的所有mapper進(jìn)行控制。例如:vtkpoiydatamapper *mapper=vtkpoiydatamapper:new( );mapper->immediatemoderenderingon( );或者vtkpoiydatamapper *mapper=vtkpoiydatamapper:ne

57、w( );mapper->globalimmediatemoderenderingon( );用immediatemoderendering的缺點(diǎn)就是如果內(nèi)存不夠大的話,那么繪制速率就會(huì)變得很慢。通過vtkstripper來使用trianglestrips在vtk中大部分的濾波器是獨(dú)立的三角形或者多邊形,但是它們都不是可以最簡(jiǎn)潔,最有效的演示出來的。為了從多邊形數(shù)據(jù)中產(chǎn)生出三角形,我們可以首先利用vtktrianglefilter來將任何多邊形轉(zhuǎn)變?yōu)槿切?,然后通過vtkstipper來運(yùn)行,將三角形轉(zhuǎn)變?yōu)檫B環(huán)三角形。例如:在c+環(huán)境中 vtkpoiydatareader *reader=vtkpoiydatareader:new(); reader->setfilename(/yourdatafile。vtk); reader->getoutput()一>releasedataflagon(); vtktrianglefilter *tris=vtktrianglefitter:new(); tris->setinput(re

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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)論