胡修炎
(棗莊學(xué)院 數(shù)學(xué)與統(tǒng)計(jì)學(xué)院,山東 棗莊 277160)
由于CT理論中的平行束投影和錐束投影的概念分別與計(jì)算機(jī)圖形學(xué)中的正交投影和透視投影的概念一致.CT理論中的X光源和探測(cè)器分別對(duì)應(yīng)于計(jì)算機(jī)圖形學(xué)中的攝像機(jī)和渲染目標(biāo).由于GPU利用專用的紋理映射硬件計(jì)算紋理坐標(biāo)(投影地址),并能夠并行處理多個(gè)被投影的數(shù)據(jù),因此利用GPU可以將投影操作的速度提升一到兩個(gè)數(shù)量級(jí)(與用CPU執(zhí)行投影操作相比較).
三代扇束掃描模式下探測(cè)器為線探測(cè)器或弧形探測(cè)器,在掃描過(guò)程中射線源和探測(cè)器固定不動(dòng),轉(zhuǎn)臺(tái)旋轉(zhuǎn)一周(如圖1所示).
圖1 扇束CT掃描示意圖
GPU程序中的數(shù)據(jù)以紋理的格式存儲(chǔ),GPU下的紋理對(duì)應(yīng)CPU程序中的數(shù)組,二維紋理和三維紋理分別與二維數(shù)組和三維數(shù)組相對(duì)應(yīng).在GPU程序中,CT數(shù)據(jù)需要以類似于數(shù)組的紋理形式存儲(chǔ).紋理的紋素相應(yīng)于數(shù)組的元素.紋素的紋理坐標(biāo)相應(yīng)于數(shù)組元素的指標(biāo).與數(shù)組元素指標(biāo)有所不同,如圖2所示.
圖2 矩形紋理的紋理坐標(biāo)
GPU下的紋理數(shù)據(jù)格式比CPU下的數(shù)組數(shù)據(jù)格式更加靈活,它支持單通道、四通道等紋理格式.單通道紋理的紋素是標(biāo)量;四通道紋理的紋素是4維向量.GPU可以并行地執(zhí)行向量操作,利用這種并行性,我們可以實(shí)現(xiàn)并行地對(duì)四組數(shù)據(jù)進(jìn)行投影或反投影.
基于二維紋理的體渲染:體數(shù)據(jù)按其空間順序被存儲(chǔ)于一組二維紋理中.被重建的長(zhǎng)方體由一組等間隔的平行的長(zhǎng)方片代表,通過(guò)紋理映射將二維紋理貼到這些長(zhǎng)方片上,然后渲染這些長(zhǎng)方片,打開(kāi)alpha混合,最后將渲染結(jié)果累加即可得到三維體數(shù)據(jù)的投影.
這種方法的優(yōu)點(diǎn)是插值少,它只在每個(gè)二維紋理中做插值,而二維紋理之間沒(méi)有插值運(yùn)算,所以缺點(diǎn)是繪制效果差,尤其當(dāng)平行的長(zhǎng)方片與視點(diǎn)方向平行時(shí)無(wú)法應(yīng)用二維紋理.
仿真方法是基于二維紋理的仿真,與二維紋理的體繪制有所不同,體繪制的目的是將渲染的結(jié)果最終顯示在屏幕上,而我們是要得到仿真數(shù)據(jù),因此需要將渲染后的數(shù)據(jù)讀回內(nèi)存存成數(shù)據(jù)文件.并且體渲染的結(jié)果一般是8位的數(shù)據(jù),因?yàn)槿搜鄣姆直鏇](méi)有那么高,而仿真數(shù)據(jù)要求是32位的,最低也要16位的數(shù)據(jù),因此計(jì)算量要比體繪制大的多,需要用到浮點(diǎn)紋理.
圖3 仿真示意圖
如圖3所示模型是在定義在立方體內(nèi),用GPU通用計(jì)算方法實(shí)現(xiàn)數(shù)據(jù)的仿真(以下簡(jiǎn)稱GPU-CT),首先需要將數(shù)據(jù)用紋理來(lái)表示,如圖所示將立方體劃分為若干切片,每個(gè)切片綁定成不同的紋理.如圖3所示立方體中藍(lán)色和黃色切片分別與紋理texi,texj綁定;根據(jù)需要將立方體劃分為N個(gè)切片,并分別與紋理tex0,tex1……texN-1綁定,則立方體數(shù)據(jù)就可以由這N個(gè)有序紋理來(lái)表示.
圖3中的方格區(qū)域?yàn)槊嫣綔y(cè)器,也可以說(shuō)是投影目標(biāo)區(qū)我們記做texobj.在實(shí)現(xiàn)仿真的過(guò)程中紋理tex0,tex1……texN-1將依次渲染到texobj,所有紋理渲染結(jié)束后texobj中的數(shù)據(jù)就是模型在某一角度下的投影,模型旋轉(zhuǎn)換一個(gè)角度后,進(jìn)行同樣的過(guò)程就得到另一個(gè)角度的投影.
以上方式模型旋轉(zhuǎn)范圍在正負(fù)45度之間時(shí)得到的仿真數(shù)據(jù)是可以的,但當(dāng)模型旋轉(zhuǎn)的角度超出了正負(fù)45度范圍時(shí),texi與渲染目標(biāo)texobj所成角度比較大,如圖4所示texi與texobj成60度夾角時(shí),texi中的16個(gè)數(shù)據(jù)投影到texobj中8個(gè)探測(cè)器上,會(huì)造成較大的誤差.
圖4 texi與texobj夾角
為減小紋理texl與渲染目標(biāo)texobj夾角過(guò)大引起的誤差,應(yīng)始終控制夾角在正負(fù)45度之間.模型旋轉(zhuǎn)超過(guò)這個(gè)范圍時(shí),可以通過(guò)沿與原紋理垂直方向重新劃分切片的方法來(lái)避免角度過(guò)大引起的誤差.
以仿真256*256投影數(shù)據(jù)為例
步驟1:三維數(shù)據(jù)模型劃分,劃分為256片數(shù)據(jù)(可以根據(jù)具體的需要),這樣每一片數(shù)據(jù)大小為256*256
步驟2:每一片數(shù)據(jù)做成256*256大小的紋理,得到256片紋理,分別編號(hào)為tex0,tex1……tex255
步驟3:建立兩個(gè)32位floating-pointpbuffer作為紋理渲染目標(biāo)記作texobj其中texobj中初值為0.0
步驟4:將tex0渲染到目標(biāo)texobj做混合運(yùn)算texobj=texobj+texi;繼續(xù)將tex1渲染到目標(biāo)作混合運(yùn)算,如此循環(huán)進(jìn)行直到將tex255渲染到目標(biāo)texobj,此時(shí)目標(biāo)中的數(shù)據(jù)就是模型在這一角度下的平行投影數(shù)據(jù).
模型為一個(gè)大圓柱體,圓柱體內(nèi)部各個(gè)方向均勻8個(gè)小圓柱體,小圓柱體深淺高度不同,以下為利用GPU實(shí)現(xiàn)CT數(shù)據(jù)仿真的不同角度透視圖.
每片紋理大小為256*256,投影數(shù)據(jù)大小為256*256時(shí)CPU上仿真一個(gè)投影數(shù)據(jù)平均所用的時(shí)間為5.635s,GPU仿真一個(gè)投影數(shù)據(jù)平均所用的時(shí)間為0.508s,可以看出用GPU做CT數(shù)據(jù)仿真效率有了很大的提高.
圖5模型的正面透視圖圖6模型的側(cè)面透視圖
圖7模型旋轉(zhuǎn)30度透視圖圖8模型傾斜15度透視圖
本文利用GPU通用計(jì)算技術(shù)實(shí)現(xiàn)了三維CT數(shù)據(jù)仿真,與利用CPU三維CT數(shù)據(jù)仿真相比效率大大提升,仿真256*256大小的投影數(shù)據(jù),效率大約提高10倍.數(shù)據(jù)越復(fù)雜效率對(duì)比越明顯,在數(shù)據(jù)仿真方面有較高的應(yīng)用價(jià)值.
針對(duì)本文的研究?jī)?nèi)容及結(jié)果,我們發(fā)現(xiàn)還存在一些問(wèn)題有待進(jìn)一步研究.利用GPU實(shí)現(xiàn)三維數(shù)據(jù)仿真,其中存在數(shù)據(jù)精度的問(wèn)題.主要由兩方面引起一方面是由GPU自身的問(wèn)題引起的,另一方面對(duì)模型的分割不能劃分足夠細(xì),劃分的越細(xì)需要的紋理越多,而GPU的顯存大小是很有限的.下一步將對(duì)如何提高仿真精度進(jìn)行研究.
[1]Nathan A, Carr, Jesse D, Hall, John C Hart. The Ray Engine[A].In Proceedings of Graphics Hardware, Saarbrucken, 2002,37~46.
[2]Timothy J. Purcell, Ian Buck, William R. Mark, Pat Hanrahan. Ray Tracing on Programmable Graphics Hardware[J]. ACM Transactions on Graphics (Proceedings of SIGGRAPH), 2002,21(3):703-712.
[3]Naga Govindaraju, Stephane Redon, Ming C Lin, Dinesh Manocha. COLLIDE:Interactive Collision Detection Between Complex Models in Large Environments Using Graphics Hardware[A].In Proceedings Graphics Hardware, San Diego, 2003,25~32.
[4]Naga Govindaraju, Avneesh Sud, Sung-Eui Yoon, Dinesh Manocha. Parallel Occlusion Culling for Interactive Walkthroughs using Multiple GPUs[R]. The University of North Carolina at Chapel Hill, Carolina, UNC Computer Science Technical Report TR02-027,2002.
[5]Scott Larsen E, David McAllister. Fast Matrix Multiplies using Graphics Hardware[A].In Proceedings of Supercomputing, Denver, 2001, 55~60.
[6]Jesse D, Hall,Nathan A, Carr, John C Hart. Cache and Bandwidth Aware Matrix Multiplication on the GPU[R]. University of Illinois at Urbana-Champaign, Champaign, UIUCDCS-R-2003-2328, 2003,4.
[7]Chris J, Thompson, Sahngyun Hahn, Mark Oskin. Using Modern Graphics Architectures for In General-Purpose Computing: A Framework and Analysis[A]. In Proceedings of International Symposium on Microarchitecture, Istanbul, 2002,306~317.