專利名稱::一種基于三維紋理硬件加速的海量數(shù)據(jù)體繪制方法
技術(shù)領(lǐng)域:
:本發(fā)明涉及計算機圖形學(xué)中三維可視化領(lǐng)域,特別涉及海量數(shù)據(jù)的直接體繪制方法和基于三維紋理硬件的加速方法?,F(xiàn)有技術(shù)在大數(shù)據(jù)量的應(yīng)用程序中,速度較快的內(nèi)部存儲器與速度較慢的外部存儲器之間的數(shù)據(jù)交換通常是主要的效率瓶頸所在。專門為消除這種瓶頸而設(shè)計的算法被稱為外存算法(external-memoryalgorithms)。對外存算法的研究很早就開始了,最初是用于解決小內(nèi)存計算機無法同時裝載大量數(shù)據(jù)的問題,同時通過仔細(xì)設(shè)計內(nèi)存和外存之間數(shù)據(jù)交換的策略,可以克服直接采用操作系統(tǒng)提供的虛擬內(nèi)存管理功能所帶來的低效問題。這是一類典型的以空間換時間的算法,通常通過增加計算機內(nèi)存容量可以避免采用此類算法并且得到更高的運行效率。隨著各種影像獲取設(shè)備硬件技術(shù)的不斷進步,所獲取影像的空間分辨率越來越高,隨之而來的是影像數(shù)據(jù)量急速上升,給已有的圖像處理及可視化算法帶來了嚴(yán)峻的挑戰(zhàn)。特別是自從美國的可視人體(VisibleHuman)項目實施以來,虛擬人體采集的圖像數(shù)據(jù)量已經(jīng)達到43GB,而國內(nèi)研究機構(gòu)于2002至2003年完成的中國男性和女性數(shù)字化可視人體的數(shù)據(jù)量已分別達到90.65GB和131.04GB。如此海量的數(shù)據(jù)使得三維實時處理和顯示變得更為困難。需要特別注意的是這里所說的"海量數(shù)據(jù)"是專指這樣一類數(shù)據(jù)其原始數(shù)據(jù)量已經(jīng)超過了計算機內(nèi)存所能容納的數(shù)據(jù)量(通常也超過了可尋址空間的大小),因而不可能將其完全裝入內(nèi)存再進行處理。大多數(shù)文獻將這樣一類處理"海量數(shù)據(jù)"的外存算法稱為Out-of-Core算法。體繪制算法是可視化算法中最為重要的一種,以能夠產(chǎn)生高質(zhì)量且逼真的繪制結(jié)果而聞名。對體繪制的研究出現(xiàn)于上個世紀(jì)80年代末,傳統(tǒng)的體繪制算法可以分為三個大類圖像空間(ImageSpace)的繪制算法、物體空間(ObjectSpace)的繪制算法以及圖像和物體空間混合(Hybrid)繪制算法。其中,常見的經(jīng)典體繪制算法有體數(shù)據(jù)光線投射法(VolumeRayCasting)、Splatting算法和ShearWarp算法等。這些經(jīng)典算法大多需要對原始數(shù)據(jù)進行隨機訪問,這就意味著需要將全部數(shù)據(jù)裝入內(nèi)存再進行計算,否則將帶來嚴(yán)重的效率問題。此外,即使在小數(shù)據(jù)量的環(huán)境下,這些算法也無法達到實時的要求。針對海量數(shù)據(jù),F(xiàn)arias和Silva在2001年中提出了一種在有限內(nèi)存的情況下對海量數(shù)據(jù)進行直接體繪制的方法。該方法遍歷整個數(shù)據(jù)集的所有體元,基于穿過該體元的一段光線進行計算,為該體元在投影平面上所覆蓋的每個像素保存兩個片段(fragment)(光線與體元相交兩次)。第一次遍歷完成后對所有產(chǎn)生的片段做外排序,排序以片段所在像素(位置)為第一關(guān)鍵字,以片段的深度為第二關(guān)鍵字,在排序產(chǎn)生的結(jié)果上就可以進行有效的光線投射計算。該方法雖然可以處理海量數(shù)據(jù),但是由于使用外排序而嚴(yán)重影響了繪制速度。此外,隨著圖形硬件的快速發(fā)展,基于圖形硬件加速的體繪制算法正逐漸成為主流。1994年,BrianCabral等人提出使用紋理映射來加速體繪制的速度,但由于此算法只能運行在昂貴的圖形工作站的顯卡上,因此直至1998年,研究人員一直沒有認(rèn)識到這個算法的重要性。隨著三維游戲等娛樂市場的不斷需求,普通PC機上裝配的顯卡的三維加速能力越來越強,同時紋理映射所需要的二維光柵處理能力也越來越強,使用圖形硬件來作體繪制也變得更為可行。Westermann等人在1998年結(jié)合當(dāng)前的顯卡所提供的功能,實現(xiàn)了一個比較實用的基于硬件的體繪制算法,并且于后來的工作中被完善,加入了基于硬件加速的分類和光照計算。另外在2000年C.Rezk-Salama等人總結(jié)了前人所作過的工作,并且使用顯卡中剛提供的多紋理功能,在普通的PC機上實現(xiàn)了實時的體繪制。在此后幾年中仍不斷有新的基于圖形硬件加速的體繪制方法提出來,但到目前為止,大多硬件加速的體繪制算法仍然只針對小數(shù)據(jù)量(in-core)的體數(shù)據(jù),還未用來加速海量數(shù)據(jù)的體繪制。
發(fā)明內(nèi)容現(xiàn)有技術(shù)體繪制算法只針對小數(shù)據(jù)量的體數(shù)據(jù)進行處理,不能對超出內(nèi)存容量的海量數(shù)據(jù)進行體繪制,本發(fā)明的目的是提供一種利用三維紋理圖形硬件來加速計算的海量數(shù)據(jù)體繪制方法,用于對數(shù)據(jù)量超過計算機物理內(nèi)存容量極限的數(shù)據(jù)集進行快速體繪制。為了實現(xiàn)所述的目的,本發(fā)明基于三維紋理硬件加速的海量數(shù)據(jù)體繪制方法,包括如下步驟步驟Sl:對原始體數(shù)據(jù)合理的分塊處理,將無法為物理內(nèi)存所容納的海量原始體數(shù)據(jù)分解成可裝入內(nèi)存及顯卡顯存的獨立子數(shù)據(jù)塊,并將獨立子數(shù)據(jù)塊存入磁盤備用,從而能夠處理傳統(tǒng)基于紋理加速的體繪制算法所無法處理的海量體數(shù)據(jù);同時處理傳遞函數(shù)并根據(jù)其對子數(shù)據(jù)塊進行分類,將處理結(jié)果傳給步驟S2;步驟S2:檢查是否更改原始傳遞函數(shù),如果是,則返回步驟Sl重新處理傳遞函數(shù)以及對子數(shù)據(jù)塊進行分類;如果否,則計算當(dāng)前視線方向,并根據(jù)視線方向確定子數(shù)據(jù)塊繪制順序,將按順序排列的待繪制子數(shù)據(jù)塊索引序列以及從步驟Sl得到的處理后的傳遞函數(shù)傳給步驟S3;步驟S3:遍歷步待繪制子數(shù)據(jù)塊索引序列,按索引從磁盤取得步驟Sl得到的子數(shù)據(jù)塊,并利用紋理圖形硬件加速每一子數(shù)據(jù)分塊的繪制,遍歷完成即代表一遍繪制結(jié)束,實現(xiàn)對海量數(shù)據(jù)的快速體繪制,如果需要重復(fù)繪制,程序不結(jié)束,則轉(zhuǎn)步驟S2檢査是否更改傳遞函數(shù)并繼續(xù)上面的流程,否則整個程序結(jié)束。優(yōu)選地,數(shù)據(jù)預(yù)處理步驟S1還包括步驟Sll:將存儲在磁盤上的原始體數(shù)據(jù)分割成大小相同的子數(shù)據(jù)塊,使得每塊數(shù)據(jù)能夠被完全載入內(nèi)存以及顯卡的顯存,并將每個子數(shù)據(jù)塊以獨立文件的形式存儲在磁盤上以備下面的步驟使用;步驟S12:處理體繪制傳遞函數(shù),將其轉(zhuǎn)換為快速查找表,以加速傳遞函數(shù)映射的過程;步驟S13:根據(jù)傳遞函數(shù)對所有子數(shù)據(jù)塊進行分類,剔除完全透明的塊,獲得需要繪制的獨立子數(shù)據(jù)塊集合,以索引的形式存放在內(nèi)存中。優(yōu)選地,分塊繪制步驟S3還包括步驟S31:按繪制順序依次從磁盤取得待繪制的子數(shù)據(jù)塊,對每個子數(shù)據(jù)塊應(yīng)用傳遞函數(shù),生成三維紋理塊加載到顯卡顯存;步驟S32:根據(jù)視線方向?qū)θS紋理塊進行切片,其中,通過建立一個快速查找表,給出紋理塊長方體八個頂點狀態(tài)和生成多邊形之間的映射關(guān)系,用查表的方法來加速生成紋理多邊形的過程;步驟S33:按視線方向從后向前繪制生成的紋理多邊形得到繪制結(jié)果。本發(fā)明有益效果是通過對海量原始數(shù)據(jù)進行合理分塊,使每個子數(shù)據(jù)塊能夠被裝入內(nèi)存單獨處理,從而能夠?qū)Τ鰞?nèi)存容量的海量數(shù)據(jù)進行體繪制。同時,通過使用三維紋理硬件等措施優(yōu)化分塊繪制流程,大大加速整個繪制過程,實現(xiàn)了海量數(shù)據(jù)的快速可視化,在大規(guī)模醫(yī)學(xué)影像數(shù)據(jù)處理及可視化領(lǐng)域有著重要的應(yīng)用價值。圖1是基于三維紋理硬件加速的海量數(shù)據(jù)體繪制方法的流程圖;圖2是體數(shù)據(jù)在模型空間分布示意圖;圖3是生成的紋理多邊形示意圖;圖4是一個紋理多邊形的例子;圖5是本發(fā)明應(yīng)用于醫(yī)學(xué)影像數(shù)據(jù)集的繪制結(jié)果。具體實施方式下面將結(jié)合附圖對本發(fā)明加以詳細(xì)說明,應(yīng)指出的是,所描述的實施例僅旨在便于對本發(fā)明的理解,而對其不起任何限定作用。本發(fā)明的基本思想是通過合理的分塊將無法為物理內(nèi)存所容納的海量體數(shù)據(jù)分解成可裝入內(nèi)存的獨立子數(shù)據(jù)塊,同時利用紋理圖形硬件加速每一子數(shù)據(jù)塊的繪制,從而實現(xiàn)對海量數(shù)據(jù)的快速體繪制,其中"海量數(shù)據(jù)"特指數(shù)據(jù)量超過計算機物理內(nèi)存所能容納的極限的數(shù)據(jù)集,無法在處理時完全轉(zhuǎn)載入物理內(nèi)存。下面結(jié)合附圖詳細(xì)描述本發(fā)明的方法。本發(fā)明的一種具體實現(xiàn)方案如圖1基于三維紋理硬件加速的海量數(shù)據(jù)體繪制方法的流程圖所示,其中,圓柱體表示外存儲器(一般為硬盤),實線箭頭表示算法流程,虛線箭頭表示數(shù)據(jù)流動的方向;主要包括三個步驟數(shù)據(jù)預(yù)處理、視線方向的計算和子數(shù)據(jù)塊繪制順序的確定、分塊繪制。下面逐一進行介紹。步驟l:數(shù)據(jù)預(yù)處理數(shù)據(jù)預(yù)處理包括三個主要部分。首先是對原始數(shù)據(jù)進行分塊。為便于后面的繪制,將所有子數(shù)據(jù)塊的大小選擇一致,但子數(shù)據(jù)塊尺寸作為算法的參數(shù)可以調(diào)節(jié)。每個子數(shù)據(jù)塊以單個文件的形式存放在磁盤上,文件名放入一個列表中,以便隨時取用。其次是對體繪制傳遞函數(shù)進行處理,生成快速查找表。由于后面繪制所用的紋理塊將數(shù)據(jù)類型統(tǒng)一成RGBAX8bit的格式,所以將傳遞函數(shù)的值域映射到RGBA,每個分量的值離散化為之內(nèi)的整數(shù),根據(jù)原始數(shù)據(jù)灰度范圍生成一個列表(通常為數(shù)組),將體素灰度值作為索引(數(shù)組下標(biāo))得到的列表元素值即為該體素經(jīng)過傳遞函數(shù)作用后的最終繪制所用顏色值。這樣,后面在繪制子數(shù)據(jù)塊時就能夠快速生成最終用于繪制的紋理塊。由于原始數(shù)據(jù)中有相當(dāng)大的一部分是背景,這部分?jǐn)?shù)據(jù)經(jīng)過體繪制傳遞函數(shù)的處理一般變?yōu)橥该?,不繪制的話也不會影響到最終結(jié)果。而分塊后將產(chǎn)生一些完全透明的子數(shù)據(jù)塊,這些子數(shù)據(jù)塊無需繪制,可以從待繪制的數(shù)據(jù)塊中剔除。因此,驟1的最后是根據(jù)傳遞函數(shù)對子數(shù)據(jù)塊進行分類,找出完全透明的子數(shù)據(jù)塊,從待繪制的子數(shù)據(jù)塊中剔除,在實際的實現(xiàn)中是打上空塊的標(biāo)記,以便在繪制時略過。在步驟1中,需要特別注意的是子數(shù)據(jù)塊尺寸的選擇,其上限是顯卡所能接受的最大三維紋理尺寸。如果尺寸選的過小,則會在磁盤上產(chǎn)生大量小文件,導(dǎo)致打開、關(guān)閉文件的次數(shù)過多而影響最終的繪制速度;如果尺寸選的過大,可以忽略的完全透明的子數(shù)據(jù)塊數(shù)目就會減少,最終也會影響繪制速度。因此,子數(shù)據(jù)塊的尺寸需謹(jǐn)慎選擇,一般容量在1GB以上的體數(shù)據(jù),子數(shù)據(jù)塊應(yīng)大于64體素X64體素X64體素,并以盡可能多的產(chǎn)生全透明子數(shù)據(jù)塊為宜。步驟2:視線方向的計算和子數(shù)據(jù)塊繪制順序的確定視線方向在屏幕空間始終是垂直于屏幕從外向內(nèi),即屏幕空間向量(0.0,0.0,1.0)。設(shè)模型變換矩陣為M,視圖變換矩陣為V,投影變換矩陣為P;在屏幕空間取起始點和終止點分別為(O.O,0.0,—1.0)和(0.0,0.0,1.0),設(shè)其在模型空間中對應(yīng)視線起始點為s,其坐標(biāo)計為(x,,為,^OT,終止點為e,其坐標(biāo)計為fe,乂,^We)T,這里均采用齊次坐標(biāo),貝U:(1)當(dāng)使用透視投影時,還需對視線起始點s和終止點e做進一步處理:、一0.0_、—0.0—凡0.0-l.Oc=凡=M—'V-'P一0.01.01.05一1.0s(2)(3)則最終視線方向為d=e-S。注意,在做進一步計算前先將d歸一化。如圖2體數(shù)據(jù)在模型空間分布示意圖所示,在模型空間中,其中頂點和邊的序號用于建立快速生成紋理多邊形所需的查找表;原始體數(shù)據(jù)按圖2所示分布一個大長方體中,則按其中⑥①②③④dXD⑦八個頂點在視線方向上哪個離視點最遠(yuǎn),共有八種不同的子數(shù)據(jù)塊繪制順序,即總是從離視點最遠(yuǎn)的頂點處的子數(shù)據(jù)塊開始,從后向前繪制。因此這里只要計算八個頂點在視線d上的投影,找出其中最大的即可確定繪制子數(shù)據(jù)塊的順序。步驟3:分塊繪制按步驟2所確定的子數(shù)據(jù)塊繪制順序遍歷所有子數(shù)據(jù)塊,對每個子數(shù)據(jù)塊首先應(yīng)用步驟1生成的傳遞函數(shù)查找表快速生成最終繪制所用的三維紋理塊,并將此三維紋理塊導(dǎo)入到顯卡的紋理緩存中。然后,用垂直于視線d的平面從后向前切割三維紋理塊長方體,生成紋理多邊形,如圖3生成的紋理多邊形示意圖所示。長方體邊與平面求交可得到多邊形頂點,為避免復(fù)雜的點集凸殼計算,我們用另一種方法來快速地生成這些多邊形。當(dāng)平面與長方體相交時,其八個頂點共有兩種狀態(tài)在平面正向空間內(nèi)及平面上(代入平面方程求得的值大于等于0)或者在平面負(fù)向空間內(nèi)(代入平面方程求得的值小于0)。所以平面與長方體相交最多有28=256種情況,實際上其中有一部分是不可能出現(xiàn)的,但是為了簡化查找表結(jié)構(gòu)以加快査找,所以仍采用256個元素的列表記錄這些情況,八個頂點的狀態(tài)碼排在一起恰好作為索引,而每個列表元素記錄長方體與平面相交的邊的序號如圖2中所示為0、1、2、3、4、5、6、7、8、9、10、11,邊序號順序就是生成多邊形的頂點順序。一個平面最多同時與長方體的6條邊相交,所以每個列表元素固定為7個元素的整數(shù)數(shù)組,其中第一個元素為多邊形頂點個數(shù),后面依次排列頂點所在長方形邊的序號。以圖4中一個紋理多邊形的例子所示,紋理多邊形切割平面的頂點依次相交于長方體邊l、邊9、邊8、邊3上,處于平面向外空間內(nèi)的頂點為⑥①,處于平面向內(nèi)空間內(nèi)的頂點為②③④⑤⑥⑦,在查找表中得索引值為3,即8位二進制數(shù)00000011,而該列表元素則為(4,1,9,8,3,-1,-1}。這樣,生成多邊形時,只需計算八個頂點的狀態(tài)碼、得到索引、查表得到多邊形頂點序列、依次計算各頂點坐標(biāo)即可,避免了先求頂點坐標(biāo)再生成多邊形所需的復(fù)雜運算,加快了繪制流程。最后,仍然按從后向前的順序繪制所有生成的紋理多邊形,得到子數(shù)據(jù)塊的繪制結(jié)果。混合(Blend)運算采用如下方式<formula>formulaseeoriginaldocumentpage10</formula>(4)其中,C^為當(dāng)前繪制顏色,C&為幀緩存中的顏色,c^為當(dāng)前繪制顏色的alpha分量(相當(dāng)于不透明度)。由于子數(shù)據(jù)塊的繪制也是按照從后往前的順序,所以當(dāng)所有子數(shù)據(jù)塊繪制完成后即得最終的繪制結(jié)果。運行結(jié)果我們在一臺計算機上,用0++編制程序?qū)崿F(xiàn)了上述算法,以驗證本發(fā)明所提算法的有效性和實用性。圖5是本發(fā)明的方法用于實際醫(yī)學(xué)影像的例子,該體數(shù)據(jù)大小為1040X1280X1125,總?cè)萘繛?.39GB,為更好地驗證算法的有效性,我們也實現(xiàn)了in-core和out-of-core的光線投射算法,并在同一組數(shù)據(jù)集上做了對比,結(jié)果如表格1所示。其中數(shù)據(jù)1、2、3的數(shù)據(jù)量分別為11.43MB、308MB和1.39GB,從結(jié)果可以看出在小數(shù)據(jù)量下本發(fā)明的算法甚至比in-core的算法還要快,同時數(shù)據(jù)所占用的內(nèi)存要小得多。而在大數(shù)據(jù)量的條件下,in-core算法已無能為力,而本發(fā)明的算法仍然比直接的out-of-core算法要快得多。所有測試的硬件和軟件環(huán)境為Pentium42.8GHz處理器,1GB物理內(nèi)存,GeForce6800顯卡,Windows2000操作系統(tǒng)。表格1算法運行結(jié)果的對比<table>tableseeoriginaldocumentpage11</column></row><table>以上所述,僅為本發(fā)明中的具體實施方式,但本發(fā)明的保護范圍并不局限于此,任何熟悉該技術(shù)的人在本發(fā)明所揭露的技術(shù)范圍內(nèi),可理解想到的變換或替換,都應(yīng)涵蓋在本發(fā)明的包含范圍之內(nèi),-因此,本發(fā)明的保護范圍應(yīng)該以權(quán)利要求書的保護范圍為準(zhǔn)。權(quán)利要求1.一種基于三維紋理硬件加速的海量數(shù)據(jù)體繪制方法,其特征在于步驟S1對原始體數(shù)據(jù)合理的分塊處理,將海量原始體數(shù)據(jù)分解成可裝入內(nèi)存及顯卡顯存的獨立子數(shù)據(jù)塊,并將獨立子數(shù)據(jù)塊存入磁盤備用,同時處理傳遞函數(shù)并根據(jù)其對子數(shù)據(jù)塊進行分類;步驟S2檢查是否更改原始傳遞函數(shù),如果是,則返回步驟S1重新處理傳遞函數(shù)以及對子數(shù)據(jù)塊進行分類;如果否,則計算當(dāng)前視線方向,并根據(jù)視線方向確定子數(shù)據(jù)塊繪制順序,將按順序排列的待繪制子數(shù)據(jù)塊索引序列以及從步驟S1得到的處理后的傳遞函數(shù)傳給步驟S3;步驟S3遍歷待繪制子數(shù)據(jù)塊索引序列,按索引從磁盤取得步驟S1得到的子數(shù)據(jù)塊,并利用紋理圖形硬件加速每一子數(shù)據(jù)分塊的繪制,遍歷完成即代表一遍繪制結(jié)束,實現(xiàn)對海量數(shù)據(jù)的快速體繪制,如果需要重復(fù)繪制,程序不結(jié)束,則轉(zhuǎn)步驟S2檢查是否更改傳遞函數(shù)并繼續(xù)上面的流程,否則整個程序結(jié)束。2.按照權(quán)利要求1所述的繪制方法,其特征在于數(shù)據(jù)預(yù)處理步驟Sl還包括步驟Sll:將存儲在磁盤上的原始體數(shù)據(jù)分割成大小相同的子數(shù)據(jù)塊,使得每塊數(shù)據(jù)能夠被完全載入內(nèi)存以及顯卡的顯存,并將每個子數(shù)據(jù)塊以獨立文件的形式存儲在磁盤上;步驟S12:處理體繪制傳遞函數(shù),將其轉(zhuǎn)換為快速查找表,以加速傳遞函數(shù)映射的過程;步驟S13:根據(jù)傳遞函數(shù)對所有子數(shù)據(jù)塊進行分類,剔除完全透明的塊,獲得需要繪制的獨立子數(shù)據(jù)塊集合,以索引的形式存放在內(nèi)存中。3.按照權(quán)利要求1所述的繪制方法,其特征在于分塊繪制步驟S3還包括步驟S3h按繪制順序依次從磁盤取得待繪制的子數(shù)據(jù)塊,對每個子數(shù)據(jù)塊應(yīng)用傳遞函數(shù),生成三維紋理塊加載到顯卡顯存;步驟S32:根據(jù)視線方向?qū)θS紋理塊進行切片,其中,通過建立一個快速查找表,給出紋理塊長方體八個頂點狀態(tài)和生成多邊形之間的映射關(guān)系,用查表的方法來加速生成紋理多邊形的過程;步驟S33:按視線方向從后向前繪制生成的紋理多邊形得到繪制結(jié)果。全文摘要公開一種基于三維紋理硬件加速的海量數(shù)據(jù)體繪制方法,其中海量數(shù)據(jù)是指數(shù)據(jù)量超過計算機物理內(nèi)存所能容納的極限,無法在處理時完全轉(zhuǎn)載入物理內(nèi)存。主要步驟包括數(shù)據(jù)預(yù)處理,傳遞函數(shù)處理和原始數(shù)據(jù)分塊;計算當(dāng)前視線方向并根據(jù)視線方向確定子數(shù)據(jù)塊繪制順序;用三維紋理的方法對每個子數(shù)據(jù)塊數(shù)據(jù)分別繪制。本發(fā)明通過對海量原始數(shù)據(jù)進行合理分塊,使每塊數(shù)據(jù)能夠被裝入內(nèi)存單獨處理,從而能夠?qū)Τ鰞?nèi)存容量的海量數(shù)據(jù)進行體繪制。同時,通過使用三維紋理硬件等措施優(yōu)化分塊繪制流程,大大加速整個繪制過程,實現(xiàn)了海量數(shù)據(jù)的快速可視化,在大規(guī)模醫(yī)學(xué)影像數(shù)據(jù)處理及可視化領(lǐng)域有著重要的應(yīng)用價值。文檔編號G06T15/00GK101286225SQ20071006533公開日2008年10月15日申請日期2007年4月11日優(yōu)先權(quán)日2007年4月11日發(fā)明者捷田,健薛申請人:中國科學(xué)院自動化研究所