基于四邊形的光照三維重建方法_第1頁
基于四邊形的光照三維重建方法_第2頁
基于四邊形的光照三維重建方法_第3頁
基于四邊形的光照三維重建方法_第4頁
基于四邊形的光照三維重建方法_第5頁
已閱讀5頁,還剩1頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

基于四邊形的光照三維重建方法

在醫(yī)學(xué)圖像、宇宙物理和工程科學(xué)等領(lǐng)域,需要直觀地顯示大量的個體數(shù)據(jù)集。因此,有必要能夠識別能夠識別科學(xué)數(shù)據(jù)的體積圖紙技術(shù)。體繪制技術(shù)分為間接體繪制技術(shù)和直接體繪制技術(shù).間接體繪制技術(shù)中最典型的就是MC(marchingcube)算法,該算法在體數(shù)據(jù)中先提取等值面構(gòu)成三角面片,再使用面繪制來進行體重建.直接體繪制技術(shù)主要是光線投射算法以及基于光線投射思想的一些算法,如二維紋理映射算法.直接體繪制算法不需要提取面,而是通過把單個體數(shù)據(jù)模擬成一個粒子,賦予其光的吸收和散射屬性,再通過計算光穿過整個體數(shù)據(jù)時輻射能量的積累值來進行繪制.這些傳統(tǒng)算法一般需要大量的計算,因此繪制速度較慢,難以滿足實時性的要求.近10年來,隨著圖形硬件的迅猛發(fā)展,直接體繪制技術(shù)有了長足的進步.首先圖形硬件支持了硬件加速的三維紋理,從而出現(xiàn)了三維紋理面片的體繪制技術(shù),已成為目前普遍使用的體繪制技術(shù).之后,圖形硬件加速了OpenGL的管線,為OpenGL提供了許多擴展功能,從而可以實現(xiàn)著色、光照等特殊效果,使直接體繪制技術(shù)具有可同面繪制相媲美的繪制效果.在最近幾年中,圖形處理器(graphicsprocessunit,GPU)編程成為了研究的熱點,具有可編程管線的GPU可最大程度、不受硬件限制地實現(xiàn)圖形算法.文獻實現(xiàn)了使用GPU編程的最大密度投射算法,該算法不是實際意義上的重建計算,而是將光線采樣點上的最大值作為顏色值來繪制,因此計算量較小,繪制速度較快,在醫(yī)學(xué)領(lǐng)域中使用廣泛.Krueger等提出了基于GPU的多過程光線投射算法,它基于Dirext3D的PixelShader2.0模型;Stegmaier等首先實現(xiàn)了GPU編程的單過程光線投射算法,但是其基本算法需要繪制6個代理面,并且使用了動態(tài)分支.本文算法只使用一個代理面,通過計算出光線的離開點來避免動態(tài)分支,從而提高了繪制性能;并借助于GPU靈活的可編程管線,實現(xiàn)了半透明等多種繪制效果.1基于紋理的體繪制算法1.1紋理膠片算法傳統(tǒng)紋理面片算法的主要思想就是光線投射算法,只是該算法一般使用正交投影,從視平面每個像素位置發(fā)出一條光線,把光線在三維體數(shù)據(jù)中遇到的體數(shù)據(jù)值映射成顏色,再使用從后往前方式的混合,從而實現(xiàn)三維重建.因此,也可把紋理面片算法視為光線投射算法的一種加速算法.實際算法實現(xiàn)過程如圖1所示,首先在三維體數(shù)據(jù)中取與視平面平行的一組紋理面片,再利用OpenGL的顏色混合函數(shù)同時計算出所有光線方向的顏色值,最后繪制圖像.因此被稱為紋理面片算法.三維紋理面片算法在OpenGL固定管線中實現(xiàn),當(dāng)只需要灰度圖像、不需要光照計算時,該算法充分地利用了圖形硬件的加速功能,因此繪制速度比較快.1.2基于gpu的紋理截面算法在三維紋理截面使用GPU編程的紋理面片算法主要用于增強傳統(tǒng)算法中光照計算效果較差的缺點.由于傳統(tǒng)算法中光照基于OpenGL固定管線,需要在定義紋理時執(zhí)行,因此對重建結(jié)果進行實時的交互操作時,要重新定義新的紋理,使得繪制速度大大降低.而且由于固定管線的編程能力較弱,無法實現(xiàn)指數(shù)計算,因此當(dāng)使用Phong光照模型時難以添加鏡面反射光分量.基于GPU的紋理面片算法使用基于OpenGL2.0的頂點程序和片段程序進行編程,能夠很輕易地實現(xiàn)具有指數(shù)運算的鏡面反射光分量,算法通過編寫頂點程序以及片段程序?qū)崿F(xiàn).頂點程序主要實現(xiàn)的功能是根據(jù)物體空間下的頂點坐標(biāo)計算出投影空間下的頂點坐標(biāo)和紋理坐標(biāo),并且把這3種坐標(biāo)都作為輸出量提供給后續(xù)的片段程序.片段程序是實現(xiàn)整個效果的核心.片段程序的輸入量為三維紋理體數(shù)據(jù)、經(jīng)過插值的片段紋理坐標(biāo)和該片段在物體空間下的坐標(biāo),之后根據(jù)Phong光照模型進行計算.2采用gpu加速算法實現(xiàn)三維重建在紋理面片算法中,由于紋理面片是一個平面,因此其對應(yīng)的每一條光線都是平行的,如圖2a所示,該算法只適用于正交投影.而光線投射算法從視點發(fā)出一組光線,并遍歷整個體數(shù)據(jù)集(如圖2b所示),對光線經(jīng)過的三維數(shù)據(jù)集上的數(shù)據(jù)可以間隔均勻地采樣,與人類真實視覺相似,適用于透視投影.光線投射算法如圖3所示,它從視點發(fā)出光線到視平面的每個像素,穿過視平面到達體數(shù)據(jù)集,對相交體數(shù)據(jù)進行采樣,并對采樣點顏色采用從前往后的方式混合,將混合后的顏色作為該像素的最終顏色值,從而實現(xiàn)三維重建.由于基于GPU的紋理面片算法僅將光照計算置于GPU中,依然依靠OpenGL固定管線進行顏色混合,因此難以實現(xiàn)多個等值面、半透明等混合效果,并且混合模式為從后往前,導(dǎo)致無法實現(xiàn)最前面混合效果.早期的光線投射算法沒有GPU的運算支持,運算速度較慢.為此,人們提出了多種優(yōu)化方法:文獻使用八叉樹編碼對數(shù)據(jù)結(jié)構(gòu)進行優(yōu)化,減少了數(shù)據(jù)的計算量;文獻介紹了多種體繪制的加速技術(shù).隨著GPU的出現(xiàn),人們提出了利用GPU加速光線投射的算法,但這些算法受制于當(dāng)時的硬件,無法一步繪制出結(jié)果,必須分成多個過程來獲取最終的三維重建結(jié)果,并且需要反復(fù)多次繪制四邊形.文獻將傳統(tǒng)光線投射算法中的進入點計算、光線步進和離開點計算分別在多個不同的四邊形上實現(xiàn),通過在同一位置多次繪制四邊形實現(xiàn)繪制效果.Nvidia的Geforce6600芯片的GPU提供了NVfragmentprogram2擴展,該擴展實現(xiàn)了動態(tài)循環(huán),并降低了相應(yīng)的GPU開銷;文獻算法基于該擴展,將光線投射算法的各部分計算都放在GPU中計算,獲得了實時光線投射的效果.但文獻算法使用匯編語言編程,并且需要繪制一個包圍盒,共6個面.本文使用高級著色語言Cg進行編程,僅繪制1個面,減少了數(shù)據(jù)傳輸耗費.本文算法還可根據(jù)當(dāng)前視點來自動計算紋理坐標(biāo),以支持對重建結(jié)果的交互操作.3基于黨內(nèi)信息的我國體字視頻監(jiān)控系統(tǒng)的算法描述光線投射算法在GPU上實現(xiàn)的關(guān)鍵是能夠利用GPU完成對體數(shù)據(jù)的遍歷、采樣和計算,并將得到的采樣值進行混合,以產(chǎn)生最終的重建結(jié)果.算法步驟如下:Step1.將體數(shù)據(jù)映射成可以被GPU讀入的三維紋理.在體數(shù)據(jù)到三維紋理的映射過程中,可實現(xiàn)多種傳遞函數(shù),進行灰度繪制時,直接使用體數(shù)據(jù)值作為三維紋理的灰度值;而進行光照繪制時,將每一個體數(shù)據(jù)點的梯度值作為三維紋理的RGB顏色值,使用中心差分公式計算梯度值,而將原始的體數(shù)據(jù)值作為透明度值.為了進行三維重建,將體數(shù)據(jù)視為放置在視空間中的一個立方體,記Boxmin={Xmin,Ymin,Zmin}為該立方體在視空間下所有頂點的X,Y,Z坐標(biāo)的最小值,Boxmax={Xmax,Ymax,Zmax}為最大值.把視點設(shè)為光線的起始點,在OpenGL中,視點固定在原點,因此在計算光線方向時,可以把光線在體數(shù)據(jù)立方體上的進入點坐標(biāo)值作為光線方向的值.Step2.編寫頂點程序.頂點程序在繪制代理面時首先被調(diào)用,主要為了計算投影坐標(biāo)和光線方向,即(Dray1)=ΜmvΡin(1)(Dray1)=MmvPin(1)其中,Dray是光線方向,Mmv是模型視點矩陣,Pin是代理面的頂點坐標(biāo).繪制的代理面與視點垂直,代理面的頂點通過頂點程序的處理后,再經(jīng)過光柵化后,得到的每一個片段即是光線在體數(shù)據(jù)上的進入點.Step3.編寫片段程序.片段程序是整個算法的核心程序,主要實現(xiàn)光線對體數(shù)據(jù)的遍歷、采樣和計算.首先計算出光線在體數(shù)據(jù)立方體上的離開點;并進行從進入點到離開點的光線步進遍歷循環(huán),計算每次步進后所在體數(shù)據(jù)點的顏色值;最后混合相同光線上所有采樣點的值作為該像素點的顏色值輸出.1u3000eqp算法描述使用文獻中提供的確定射線與盒體相交點算法來計算離開點,該算法可判斷一條射線與盒體是否相交,并給出相交點.設(shè)Tnear=-∞,Tfar=+∞,射線方向為(XdYdZd),射線出發(fā)點為(XoYoZo),射線方程為,盒體在空間中坐標(biāo)的最小值為Boxmin={Xmin,Ymin,Zmin},坐標(biāo)的最大值為Boxmax={Xmax,Ymax,Zmax};并設(shè)盒體的各面分別與各坐標(biāo)軸平行.算法的偽代碼如下:對于每對X,Y,Z坐標(biāo)最小?最大值,進行如下操作(以X平面為例):If(Xd==0){if(Xo<Xmin)or(Xo>Xmax)返回false,即該射線與盒體沒有交點}Elset1=(Xmin-Xo)Xd?t2=(Xmax-Xo)XdElset1=(Xmin?Xo)Xd?t2=(Xmax?Xo)Xd,并進行以下計算:If(t1>t2)swap(t1,t2),保證t1是與近平面的相交點,t2是與遠平面的相交點.If(t1>Tnear){Tnear=t1},保證Tnear是各對平面中最大的近平面相交點.If(t2<Tfar){Tfar=t2},保證Tfar是各對平面中最小的遠平面相交點.再進行下一對坐標(biāo)判斷.當(dāng)3對平面都計算完畢后,If(Tnear>Tfar)or(Tfar<0),則射線與盒體沒有相交點,返回false.Else返回true,即射線與盒體相交,且相交點位于Tnear和Tfar.在該算法的實際應(yīng)用中,由于之前的設(shè)置保證了每條光線都與數(shù)據(jù)立方體相交,因此不需要判斷光線是否與立方體相交,減少了動態(tài)分支的代碼,提高了程序的性能.將該算法用Cg語言重新編寫,以利用GPU的單指令多數(shù)據(jù)特性.離開點計算的Cg代碼片段如下:float3t1=(Bl-rayOrigin)rayDir;?計算進入點float3t2=(Bh-rayOrigin)rayDir;?計算離開點Tnear=min(t1.x,t2.x);?進入點x方向坐標(biāo)Tfar=max(t1.x,t2.x);?離開點x方向坐標(biāo)Tnear=max(min(t1.y,t2.y),Tnear);?獲得最大的TnearTnear=max(min(t1.z,t2.z),Tnear);Tfar=min(max(t1.y,t2.y),Tfar);?獲得最小的TfarTfar=min(max(t1.z,t2.z),Tfar);其中,rayOrigin是光線原點,rayDir是光線方向,設(shè)光線參數(shù)方程為P=rayOrigin+t×rayDir,則Tnear是進入點的t值,Tfar是離開點的t值.2基于ph東南角光照的特征選擇將相同光線上的采樣點的顏色進行混合,以獲取最終的顏色值.由于是在片段程序上進行混合,因此不但可實現(xiàn)從后往前,亦能實現(xiàn)從前往后的混合.為了實現(xiàn)最前面效果,本文使用從前往后的混合,其混合方程為(RdGdBdAd)=(RdGdBdAd)+(1-Ad)As(RsGsBs1)(2)其中,d代表目標(biāo)顏色,s代表源顏色.a.灰度效果.直接把體數(shù)據(jù)值作為灰度顏色和不透明度.可設(shè)定不同的閾值來獲得不同的重建圖像.實現(xiàn)灰度效果時,只需直接應(yīng)用式(2).b.光照效果.首先計算出梯度,并以此作為體數(shù)據(jù)的法向量,然后在片段程序中根據(jù)Phong光照模型Ι=Κa+ΚdΝ?L+Κs(Ν?Η)n(3)計算出光照后的顏色值.其中,L為入射光;N為數(shù)據(jù)點的法向量,即梯度;H為入射光與視法向的半角向量;Ka,Kd和Ks分別為環(huán)境光系數(shù)、漫反射光系數(shù)和鏡面反射光系數(shù).c.最大密度投射效果.將一條光線上的最終顏色值設(shè)定為光線上遇到的最大體數(shù)據(jù)值.d.最前面效果.將一條光線上第一次遇到的大于設(shè)定閾值的體數(shù)據(jù)值設(shè)定為最終顏色值.e.半透明效果.設(shè)定2個等值面,其中一個等值面上的數(shù)據(jù)賦予特別的顏色,另一個等值面則進行光照計算,再將2個等值面混合,得到最后的繪制效果.f.法向量顯示效果.把體數(shù)據(jù)的法向量作為體數(shù)據(jù)的顏色值進行繪制.g.基于最前面的半透明效果.也設(shè)定2個等值面,都進行光照計算,并設(shè)定當(dāng)遇到大于其中一個閾值的體數(shù)據(jù)時結(jié)束計算.4ddr2型、gpu、系統(tǒng)pc的設(shè)計本文實驗所用電腦配置如下:CPU為PⅣ2.66GHz,內(nèi)存為1.0GB的DDR2型,GPU為NVIDIAGeforce6600.編程環(huán)境為WindowsXP下的VisualStudioC++.NET2003.4.1基于gpu的mri責(zé)任法圖4所示分別為使用傳統(tǒng)三維紋理算法、基于GPU的三維紋理算法和基于GPU的光線投射算法進行光照著色后的引擎重建效果圖.引擎數(shù)據(jù)的尺寸為256×256×128.從圖4中可以看出,傳統(tǒng)三維紋理算法缺少鏡面反射分量,顯得比較蒼白,而基于GPU的算法則比較飽滿.圖5,6所示為使用基于GPU的光線投射算法對MRI人頭數(shù)據(jù)進行重建的效果圖,人頭數(shù)據(jù)的尺寸為256×256×224.從圖5,6可以看出,光線投射算法借助于GPU靈活的可編程管線,能實現(xiàn)多種不同的繪制效果,為數(shù)據(jù)可視化提供了強有力的工具.4.2雙線理片式的雙線網(wǎng)絡(luò)繪制技術(shù)對不同數(shù)據(jù)集使用具有不同繪制效果的光線投射算法,記錄重建一個體數(shù)據(jù)集所需要的時間,得到結(jié)果如表1所示,其中所有數(shù)據(jù)繪制的分辨率為256×256.

溫馨提示

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

評論

0/150

提交評論