專利名稱:一種實(shí)現(xiàn)迭代重構(gòu)圖像的方法及系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
本專利涉及圖形圖像處理技術(shù),尤其涉及采用迭代法實(shí)現(xiàn)圖像重構(gòu)的方法及系統(tǒng)。
背景技術(shù):
圖像重構(gòu)無論是在醫(yī)學(xué)診斷,還是在生物樣品的成像,以及在地表層析成像等諸多領(lǐng)域中都有著廣泛的應(yīng)用。迭代重構(gòu)圖像方法是20世紀(jì)70年代初發(fā)表的一種圖像重構(gòu)方法,它可以重構(gòu)出較清晰的圖像,并且其應(yīng)用正在逐步擴(kuò)展。迭代法可以表述成Ax = p, 其中A為非奇異矩陣,χ為未知數(shù)向量,ρ為已知向量,迭代法求解目標(biāo)在于確定χ的數(shù)值。 在迭代重構(gòu)圖像方法中,A為加權(quán)因子,ρ為投影得到的圖像像素值,χ則為需要重構(gòu)的圖像的像素值。圖1說明了采用迭代重構(gòu)圖像方法實(shí)現(xiàn)圖像重構(gòu)的過程。該方法通過賦0值或隨機(jī)值或背投影方法獲取用于迭代過程中的初值χ(°),然后經(jīng)過多次的重投影和背投影的迭代過程,來求得最后滿足精度要求的重構(gòu)圖像的像素值。自從2006年英偉達(dá)(NVIDIA)公司推出圖形處理器G80 (包含了 1 個(gè)流式多處理器,最新的G200包含了 240個(gè)多處理器)以來,圖形處理器(GPU,Graphic Processing Unit)在某些大規(guī)模并行計(jì)算的應(yīng)用上,相對(duì)于CPU來說性能提高可達(dá)100倍以上。尤其從2008年5月,NVIDIA公司推出用于GPU的開發(fā)平臺(tái)統(tǒng)一計(jì)算設(shè)備架構(gòu)(CUDA,Compute Unified DeviceArchitecture)軟件開發(fā)工具包(SDK,Software Development Kit) 1. 1 以來,基于GPU平臺(tái)的并行計(jì)算便得到了大規(guī)模的推廣。CUDA為GPU計(jì)算提供了統(tǒng)一計(jì)算設(shè)備架構(gòu),使用戶很容易地將GPU編程融于傳統(tǒng)的編程工具(例如Visual Studio、Gcc等) 和語言(例如C、C++及FORTRAN等)中。在短短的一年以來,CUDA被應(yīng)用于加速大規(guī)模并行計(jì)算領(lǐng)域的許多方面,如在圖像處理,物理模型模擬(如計(jì)算流體力學(xué)),工程和金融模擬與分析,生物醫(yī)藥工程,數(shù)據(jù)庫及數(shù)據(jù)挖掘,搜索,排序等諸多方面都有很好的應(yīng)用,在很多應(yīng)用中取得了 1至2個(gè)幾何數(shù)量級(jí)的加速。GPU擁有更多的晶體管,用于數(shù)據(jù)處理而不是像CPU那樣去處理數(shù)據(jù)cache和指令控制,這意味著GPU具有巨大的并行計(jì)算能力。在GPU中,單一的數(shù)據(jù)處理單元為流處理器 (SP),8個(gè)SP組成一個(gè)流處理器組(SM),一個(gè)GPU具有多個(gè)SM,每個(gè)SM除了有8個(gè)SP,還有一些高速緩存器(caches,包括紋理存儲(chǔ)器、常量存儲(chǔ)器及共享存儲(chǔ)器)和兩個(gè)特殊功能單元(SFU)。片外全局存儲(chǔ)器(即顯卡上的顯存)用來存儲(chǔ)數(shù)據(jù)并實(shí)現(xiàn)CPU和GPU之間的數(shù)據(jù)傳遞。CUDA C作為GPU的并行編程語言。CUDA C編程將CPU稱之為主機(jī),將GPU作為一個(gè)協(xié)處理器稱為設(shè)備。在CUDA編程中,多個(gè)線程同時(shí)執(zhí)行在一個(gè)GPU上,并由多個(gè)線程組成一個(gè)線程塊(Block),多個(gè)線程塊又組織成網(wǎng)格(Grid);另外,每32個(gè)線程組成一個(gè)束 (warp)。CUDA編程中常用到的優(yōu)化技術(shù)有合理的網(wǎng)格配置,每個(gè)SM上有足夠多的warp可隱藏訪問延遲,并進(jìn)行全局存儲(chǔ)器的合并訪問,共享存儲(chǔ)器的使用,紋理存儲(chǔ)器和常量存儲(chǔ)器的使用,寄存器的合理使用等等。迭代重構(gòu)算法在所有圖像重構(gòu)算法中重構(gòu)效果較好,但其運(yùn)算量巨大,因此需要提高運(yùn)算效率,來滿足快速圖像重構(gòu)的需求。可見,目前需要針對(duì)基于GPU平臺(tái)設(shè)計(jì)一種迭代重構(gòu)圖像的方法,通過GPU高效快速的計(jì)算特性,能夠極大地加速迭代重構(gòu)方法的執(zhí)行, 從而快速地完成圖像重構(gòu)任務(wù)。
發(fā)明內(nèi)容
本發(fā)明所要解決的技術(shù)問題是提供一種實(shí)現(xiàn)迭代重構(gòu)圖像的系統(tǒng)及方法,能夠基于GPU平臺(tái)實(shí)現(xiàn)快速迭代重構(gòu)圖像。為了解決上述技術(shù)問題,本發(fā)明提供了一種實(shí)現(xiàn)迭代重構(gòu)圖像的方法,涉及CPU 的主機(jī)端,其特征在于,還涉及圖像處理器GPU的設(shè)備端,該方法包括主機(jī)端將要進(jìn)行迭代重構(gòu)圖像中的物體分成切片,根據(jù)切片上的元素?cái)?shù)設(shè)置并行執(zhí)行迭代重構(gòu)圖像的線程數(shù);設(shè)備端根據(jù)線程數(shù)使用相應(yīng)的多線程并行地根據(jù)切片的重構(gòu)圖像值和測(cè)量獲取的該切片投影圖像值,依次通過重投影算法和背投影算法計(jì)算獲取切片的重構(gòu)圖像值。進(jìn)一步地,主機(jī)端將要進(jìn)行迭代重構(gòu)圖像中的物體分成切片,根據(jù)切片上的元素?cái)?shù)設(shè)置并行執(zhí)行迭代重構(gòu)圖像的線程數(shù),具體包括根據(jù)物體的大小將該物體分成切片,切片的數(shù)目為該物體寬度的像素值SY,切片在投影圖像上的元素?cái)?shù)為N = SX*ANG_NUM,SX為該物體長度的像素值,ANG_NUM為該物體旋轉(zhuǎn)角度的總數(shù);切片在重構(gòu)圖像上的元素?cái)?shù)為M = SX*SZ,SZ為該物體高度的像素值;將切片在投影圖像上的元素?cái)?shù)N設(shè)置為并行執(zhí)行重投影算法的線程數(shù);將切片在重構(gòu)圖像上的元素?cái)?shù)M設(shè)置為并行執(zhí)行背投影算法的線程數(shù)。進(jìn)一步地,在設(shè)備端通過重投影算法和背投影算法計(jì)算獲取切片的重構(gòu)圖像值之前,還包括主機(jī)端通過賦0值或隨機(jī)值或背投影方法獲取切片的初始的重構(gòu)圖像值X(°),并傳遞到設(shè)備端的顯存中。進(jìn)一步地,設(shè)備端根據(jù)線程數(shù)使用相應(yīng)的多線程并行地根據(jù)切片的重構(gòu)圖像值和測(cè)量獲取的該切片投影圖像值,依次通過重投影算法和背投影算法計(jì)算獲取切片的重構(gòu)圖像值,具體包括設(shè)備端使用N個(gè)線程并行地對(duì)切片的投影圖像中N個(gè)元素根據(jù)初始的重構(gòu)圖像值 X 或計(jì)算獲取的重構(gòu)圖像值x(k)執(zhí)行重投影算法,計(jì)算獲取切片的投影圖像值pi+ ;使用M 個(gè)線程并行對(duì)切片的Pi+和測(cè)量獲取的該切片的投影圖像值P3l^l行背投影算法,計(jì)算獲取切片的重構(gòu)圖像值X(k),k為等于1或大于1的整數(shù)。進(jìn)一步地,主機(jī)端在將N設(shè)置為并行執(zhí)行重投影算法的線程數(shù)以及將M設(shè)置為并行執(zhí)行背投影算法的線程數(shù)的同時(shí),還包括根據(jù)GPU線程塊中的線程數(shù)BL0CKDIM,設(shè)置并行執(zhí)行所述重投影算法的第一 GPU 線程塊的塊數(shù)為(SX*ANG_NUM+BL0CKDIM-1) /BLOCKDIM,該第一 GPU線程塊中每一線程用于計(jì)算獲取投影圖像值Pi+的一個(gè)元素;設(shè)置并行執(zhí)行背投影算法的第二 GPU線程塊的塊數(shù)為 (SX*SZ+BL0CKDIM-1)/BLOCKDIM,該第二 GPU線程塊中每一線程用于計(jì)算獲取重構(gòu)圖像值x(k)的一個(gè)元素。進(jìn)一步地,該方法還包括主機(jī)端檢驗(yàn)切片的重構(gòu)圖像值X(k)是否滿足迭代精度;若檢驗(yàn)結(jié)果為不滿足迭代精度,則命令設(shè)備端針對(duì)該切片依次通過重投影算法和背投影算法重新計(jì)算獲取該切片的重構(gòu)圖像值,直至滿足迭代精度;若檢驗(yàn)結(jié)果為滿足迭代精度,將從內(nèi)存讀取的下一切片初始的重構(gòu)圖像值χ(°)傳遞到顯存中,待設(shè)備端依次通過重投影算法和背投影算法計(jì)算獲取切片的重構(gòu)圖像值。進(jìn)一步地,該方法還包括主機(jī)端在判斷設(shè)備端完成對(duì)物體的所有切片的迭代重構(gòu)圖像處理后,從顯存中讀取所有切片的迭代重構(gòu)圖像值,并作為物體的重構(gòu)圖像值寫回內(nèi)存。為了解決上述技術(shù)問題,本發(fā)明提供了一種實(shí)現(xiàn)迭代重構(gòu)圖像的系統(tǒng),包括依次連接的內(nèi)存模塊、重構(gòu)圖像讀取模塊、重構(gòu)圖像迭代模塊以及顯存模塊,其中重構(gòu)圖像讀取模塊,用于將要進(jìn)行迭代重構(gòu)圖像中的物體分成切片,根據(jù)切片上的元素?cái)?shù)設(shè)置并行執(zhí)行迭代重構(gòu)圖像的線程數(shù),并傳遞給重構(gòu)圖像迭代模塊;將存儲(chǔ)模塊中的切片的重構(gòu)圖像值傳遞到顯存模塊后,向重構(gòu)圖像迭代模塊發(fā)出迭代指令;重構(gòu)圖像迭代模塊,用于根據(jù)該迭代命令和線程數(shù)使用相應(yīng)的多線程并行地根據(jù)切片的重構(gòu)圖像值和測(cè)量獲取的該切片投影圖像值,依次通過重投影算法和背投影算法計(jì)算獲取切片的重構(gòu)圖像值。進(jìn)一步地,重構(gòu)圖像讀取模塊將該物體分成數(shù)目為該物體寬度像素值SY的切片,每一切片在投影圖像上的元素?cái)?shù)為N = SX*ANG_NUM,該SX為該物體長度的像素值,該ANG_NUM為該物體旋轉(zhuǎn)角度的總數(shù);切片在重構(gòu)圖像上的元素?cái)?shù)為M = SX*SZ,該SZ為該物體高度的像素值;將切片在投影圖像上的元素?cái)?shù)N設(shè)置為并行執(zhí)行重投影算法的線程數(shù),將切片在重構(gòu)圖像上的元素?cái)?shù)M設(shè)置為并行執(zhí)行背投影算法的線程數(shù);將設(shè)置的線程數(shù)N和線程數(shù)M 傳遞給重構(gòu)圖像迭代模塊。進(jìn)一步地,重構(gòu)圖像讀取模塊獲取切片的初始的重構(gòu)圖像值X(°),并在傳遞到顯存模塊后發(fā)出迭代指令;重構(gòu)圖像迭代模塊根據(jù)該迭代命令使用N個(gè)線程并行地對(duì)切片的投影圖像中N個(gè)元素根據(jù)初始的重構(gòu)圖像值χ(°)或從顯存模塊讀取的重構(gòu)圖像值χω執(zhí)行重投影算法,計(jì)算獲取切片的投影圖像值Pi+;使用M個(gè)線程并行地對(duì)切片的Pit和測(cè)量獲取的該切片的投影圖像值P 執(zhí)行背投影算法,計(jì)算獲取切片的重構(gòu)圖像值X(k),k為等于1或大于1的整數(shù)。進(jìn)一步地,該系統(tǒng)還包括分別連接重構(gòu)圖像迭代模塊、顯存模塊以及重構(gòu)圖像讀取模塊的重構(gòu)重構(gòu)圖像檢驗(yàn)?zāi)K,其中重構(gòu)圖像迭代模塊將并行獲取的切片上各元素的重構(gòu)圖像值X(k)存儲(chǔ)在顯存模塊中,并向重構(gòu)圖像檢驗(yàn)?zāi)K發(fā)出檢驗(yàn)指令;重構(gòu)圖像檢驗(yàn)?zāi)K,用于根據(jù)該檢驗(yàn)指令對(duì)顯存模塊中相應(yīng)切片上各元素的重構(gòu)圖像值x(k)進(jìn)行迭代精度的檢驗(yàn),并將檢驗(yàn)結(jié)果傳遞給重構(gòu)圖像讀取模塊;重構(gòu)圖像讀取模塊根據(jù)該檢驗(yàn)結(jié)果向重構(gòu)圖像迭代模塊發(fā)出針對(duì)當(dāng)前切片的迭代指令或針對(duì)下一切片的迭代指令。進(jìn)一步地,重構(gòu)圖像讀取模塊若判斷該檢驗(yàn)結(jié)果為不滿足迭代精度,則向重構(gòu)圖像迭代模塊發(fā)出針對(duì)當(dāng)前切片的第一迭代指令;若判斷該檢驗(yàn)結(jié)果為滿足迭代精度,則將從內(nèi)存模塊讀取的下一切片初始的重構(gòu)圖像值χ(°)傳遞到顯存模塊中,并向重構(gòu)圖像迭代模塊發(fā)出針對(duì)下一切片的第二迭代指令;重構(gòu)圖像迭代模塊根據(jù)第一迭代指令依次通過重投影算法和背投影算法重新計(jì)算獲取當(dāng)前切片的重構(gòu)圖像值,直至滿足迭代精度;或者,根據(jù)第二迭代指令依次通過重投影算法和背投影算法計(jì)算獲取下一切片的重構(gòu)圖像值。進(jìn)一步地,重構(gòu)圖像讀取模塊在判斷重構(gòu)圖像迭代模塊完成對(duì)物體的所有切片的迭代重構(gòu)圖像處理后,從顯存模塊中讀取所有切片的迭代重構(gòu)圖像值,并作為物體的重構(gòu)圖像值寫回內(nèi)存模塊。在本發(fā)明部署的方法中,CPU主機(jī)端只負(fù)責(zé)一些數(shù)組的分配和初始化,而利用GPU 設(shè)備端快速計(jì)算的特點(diǎn)參與對(duì)迭代重構(gòu)圖像中的重投影和背投影進(jìn)行計(jì)算,通過CPU主機(jī)端和GPU設(shè)備端的協(xié)調(diào)運(yùn)作來加速圖像的迭代重構(gòu)。
圖1為現(xiàn)有的迭代重構(gòu)圖像方法的流程示意圖;圖2為對(duì)物體進(jìn)行投影過程的示意圖;圖3為本發(fā)明的實(shí)現(xiàn)迭代重構(gòu)圖像的方法實(shí)施例的流程圖;圖4為本發(fā)明的實(shí)現(xiàn)迭代重構(gòu)圖像的系統(tǒng)實(shí)施例的結(jié)構(gòu)框圖。
具體實(shí)施例方式以下結(jié)合附圖和優(yōu)選實(shí)施例對(duì)本發(fā)明的技術(shù)方案進(jìn)行詳細(xì)地闡述。以下例舉的實(shí)施例僅用于說明和解釋本發(fā)明,而不構(gòu)成對(duì)本發(fā)明技術(shù)方案的限制。本發(fā)明首先分析用串行迭代法進(jìn)行圖像重構(gòu)中的性能瓶頸,找到耗時(shí)的過程的代碼,測(cè)試其在整個(gè)圖像重構(gòu)過程中所占的時(shí)間比例。測(cè)試結(jié)果表明在采用迭代法進(jìn)行圖像重構(gòu)時(shí),大部分的時(shí)間均消耗在重投影和背投影兩步驟中,這兩個(gè)步驟不僅執(zhí)行次數(shù)多,而且要計(jì)算的數(shù)據(jù)量大,同時(shí),數(shù)據(jù)的計(jì)算要滿足單指令多數(shù)據(jù)(SIMD,Single Instruction Multiple Data)的特點(diǎn)。因此,本發(fā)明將這兩步驟作為加入GPU進(jìn)行并行改進(jìn)的重點(diǎn)。在圖像重構(gòu)中,測(cè)量獲取物體的投影圖像像素值?_的過程如圖2所示,記物體的長為SX像素,寬為SY像素,高為SZ像素,旋轉(zhuǎn)角度的總數(shù)(即旋轉(zhuǎn)次數(shù))為ANG_NUM,垂直于Y方向的每一個(gè)面為切片,共有SY個(gè)切片。圖像重構(gòu)的過程是以切片為單位進(jìn)行的,其過程如圖1所示,即對(duì)每一切片通過迭代多次計(jì)算和測(cè)量獲取切片的投影圖像像素值來重構(gòu);重構(gòu)了 SY個(gè)切片便重構(gòu)出該物體模型。本發(fā)明針對(duì)上述分析,提供了一種實(shí)現(xiàn)迭代重構(gòu)圖像的方法實(shí)施例,其流程如圖3 所示,包括如下步驟300:將要迭代重構(gòu)圖像中的物體分成切片,根據(jù)切片上元素?cái)?shù)設(shè)置并行執(zhí)行迭代重構(gòu)圖像的線程數(shù);在投影圖像值Pit中共有N= SX*ANG_NUM個(gè)元素,由于在對(duì)這N個(gè)元素的求解中沒有任何數(shù)據(jù)的依賴性,即對(duì)各個(gè)元素的求解無需按順序進(jìn)行,因此本發(fā)明以并行度為N(= SX*ANG_NUM)來并行地針對(duì)每一元素分別進(jìn)行重投影算法的操作。如果設(shè)計(jì)GPU每個(gè)線程塊中的線程數(shù)為BL0CKDIM,那么共需要(SX*ANG_NUM+BL0CKDIM-1) /BLOCKDIM個(gè)線程塊進(jìn)行重投影計(jì)算,在GPU內(nèi)核中,線程塊中的每個(gè)線程負(fù)責(zé)計(jì)算獲取Pit中的一個(gè)元素。對(duì)于重構(gòu)圖像值X(k)中共有M = SX*SZ個(gè)元素,由于在對(duì)這M個(gè)元素的求解中沒有任何的數(shù)據(jù)依賴性,因此本發(fā)明以并行度為M( = SX*SZ)并行地對(duì)每一元素進(jìn)行背投影算法的操作。如果設(shè)計(jì)GPU每個(gè)線程塊中的線程數(shù)為BL0CKDIM,則共需要 (SX*SZ+BL0CKDIM-1) /BLOCKDIM個(gè)線程塊進(jìn)行背投影計(jì)算,在GPU內(nèi)核中,線程塊中的每個(gè)線程負(fù)責(zé)計(jì)算獲取X(k)中的一個(gè)元素。310 獲取切片初始的重構(gòu)圖像值X ;由主機(jī)端(CPU)根據(jù)物體的大小、旋轉(zhuǎn)角度的總數(shù)確定重構(gòu)過程的切片數(shù)和每一切片上的元素?cái)?shù),并進(jìn)行相應(yīng)數(shù)組的分配和初始化。假設(shè)物體大小,SX = 2048,SY = 2048, SZ = 400,旋轉(zhuǎn)角度的總數(shù)ANG_NUM = 114 ;重構(gòu)過程共需重構(gòu)2048 (SY)個(gè)切片,每個(gè)切片的元素?cái)?shù) N = 2048*400 (即 SX*SZ)。主機(jī)端通過賦0值或隨機(jī)值或背投影方法獲取用于迭代過程中的初始的重構(gòu)圖
像像素值X 。320 :GPU通過多個(gè)線程并行地對(duì)每一切片上的投影圖像上的N個(gè)元素執(zhí)行重投影計(jì)算,獲取該切片的投影圖像值Pi+ ;在對(duì)每個(gè)切片進(jìn)行重構(gòu)的過程中,根據(jù)切片初始的或重構(gòu)的圖像值通過重投影算法計(jì)算得到的投影圖像像素值Pi+。330 =GPU通過多個(gè)線程并行地對(duì)每一切片重構(gòu)圖像上M個(gè)元素執(zhí)行背投影計(jì)算, 根據(jù)Pi+和測(cè)量獲取的投影圖像值P3m獲取該切片的重構(gòu)圖像值X(k);在每個(gè)切片的重構(gòu)過程中,根據(jù)Pit和P3m經(jīng)背投影算法求取重構(gòu)圖像像素值X(k)。在通過上述步驟320、330進(jìn)行Ax = ρ的迭代過程中,對(duì)于矩陣A (加權(quán)因子)的計(jì)算,可根據(jù)投影圖像的中心點(diǎn)、偏移角度以及旋轉(zhuǎn)角度等參數(shù)來確定;對(duì)于通過GPU的多個(gè)線程執(zhí)行的并行程序部分,在主機(jī)端(CPU)進(jìn)行數(shù)組的分配和初始化,在設(shè)備端(GPU)假設(shè)采用迭代法中的聯(lián)合迭代重建算法(SIRT,Simultaneous Iterative Reconstruction Technique)進(jìn)行圖像重構(gòu);在設(shè)計(jì)GPU的線程塊時(shí),通過線程號(hào)和數(shù)組下標(biāo)的對(duì)應(yīng)關(guān)系來滿足合并訪問,通過將存放角度的數(shù)組分配到常量存儲(chǔ)器中來減少對(duì)全局存儲(chǔ)器的訪問。 另外,根據(jù)具體的投影示例來采用共享存儲(chǔ)器和紋理存儲(chǔ)器來更進(jìn)一步地提高性能。在GPU內(nèi)核進(jìn)行背投影計(jì)算前,由CPU將投影得到的投影像素值P3m從內(nèi)存?zhèn)鬟f到顯存中;在之后的迭代的過程中,所有的數(shù)據(jù)都是在顯存中處理,待最后一次迭代操作完成后,再由CPU將GPU計(jì)算得到的重構(gòu)圖像像素值從顯存回傳到內(nèi)存,然后寫到mrc或st文件中供觀看。340 判斷是否滿足重構(gòu)精度,是則執(zhí)行步驟360,否則執(zhí)行步驟350 ;350 讀取切片的重構(gòu)圖像值,返回步驟320執(zhí)行;360 輸出切片重構(gòu)的圖像像素值X(k);
370 判斷是否完成所有切片的圖像重構(gòu),是則執(zhí)行步驟380,否則返回步驟310執(zhí)行;380 輸出物體的重構(gòu)圖像,結(jié)束流程。通過圖3可以看出,本發(fā)明著重于對(duì)重投影和背投影這兩個(gè)原本耗時(shí)的過程進(jìn)行改進(jìn),利用GPU的成本低、速度快以及計(jì)算能力強(qiáng)的特點(diǎn),采用CPU與GPU協(xié)調(diào)運(yùn)算的方式, 開發(fā)出基于GPU的迭代重構(gòu)圖像的并行算法,由主機(jī)端(CPU)分配和初始化數(shù)組以及一些讀寫操作,由設(shè)備端(GPU)并行進(jìn)行迭代中要運(yùn)算處理的數(shù)據(jù),由此實(shí)現(xiàn)圖像重構(gòu)的加速。例如,對(duì)于重投影過程,GPU并行處理切片重投影的并行度N = 2048*114 = 233472,即使用233472個(gè)線程,若每個(gè)線程塊有256個(gè)線程,則共需 (2048*114+255)/256 ^ 912 個(gè)線程塊。GPU內(nèi)核執(zhí)行的重投影偽代碼如下_global_static void reproject_cu(PM, Χ)l)begin2) index = (blockldx. x*blockDim. x)+threadldx. χ -J/ 確定要計(jì)算的 P測(cè)中的下標(biāo)3)根據(jù)旋轉(zhuǎn)角度、平移角度和一些其它參數(shù)以及X計(jì)算P· [index]4) end對(duì)于背投影過程,GPU并行處理切片背投影的并行度M = 2048*400 = 819200,即采用819200個(gè)線程,若每個(gè)線程塊有256個(gè)線程,則共需2048*400+255/256 ^ 3200個(gè)線程塊。GPU內(nèi)核執(zhí)行的背投影偽代碼如下_global_static void backproject_cu(P計(jì),Ps, Χ)l)begin2) index = (blockldx. χ氺blockDim. χ) +threadldx. χ ;H確定要計(jì)算的X中的下標(biāo)3)根據(jù)角度和一些其它參數(shù)以及P計(jì)、ΡΜ計(jì)算X[indeX]4)end本發(fā)明針對(duì)上述方法實(shí)施例,相應(yīng)地還提供了實(shí)現(xiàn)迭代重構(gòu)圖像的系統(tǒng)實(shí)施例, 其結(jié)構(gòu)如圖4所示,包括依次連接的內(nèi)存模塊400、重構(gòu)圖像讀取模塊410、重構(gòu)圖像迭代模塊420以及顯存模塊430,其中內(nèi)存模塊400,至少存儲(chǔ)切片的重構(gòu)圖像值X ;重構(gòu)圖像讀取模塊410,用于將要進(jìn)行迭代重構(gòu)圖像中的物體分成切片,根據(jù)切片上的元素?cái)?shù)設(shè)置并行執(zhí)行迭代重構(gòu)圖像的線程數(shù),并傳遞給重構(gòu)圖像迭代模塊420;將存儲(chǔ)模塊400中的切片的重構(gòu)圖像值傳遞到顯存模塊430后,向重構(gòu)圖像迭代模塊420發(fā)出迭代指令;重構(gòu)圖像迭代模塊420,用于根據(jù)該迭代命令和線程數(shù)使用相應(yīng)的多線程并行地根據(jù)切片的重構(gòu)圖像值和測(cè)量獲取的該切片投影圖像值,依次通過重投影算法和背投影算法計(jì)算獲取切片的重構(gòu)圖像值,并存儲(chǔ)在顯存模塊430中。顯存模塊430,用于存儲(chǔ)重構(gòu)圖像迭代模塊420獲取的切片的重構(gòu)圖像值X(k)。
重構(gòu)圖像讀取模塊410將該物體分成數(shù)目為該物體寬度像素值SY的切片,切片在投影圖像上的元素?cái)?shù)為N = SX*ANG_NUM,SX為該物體長度的像素值,ANG_NUM為該物體旋轉(zhuǎn)角度的總數(shù);切片在重構(gòu)圖像上的元素?cái)?shù)為M = SX*SZ,SZ為該物體高度的像素值;將切片在投影圖像上的元素?cái)?shù)N設(shè)置為并行執(zhí)行重投影算法的線程數(shù),將切片在重構(gòu)圖像上的元素?cái)?shù)M設(shè)置為并行執(zhí)行背投影算法的線程數(shù);將設(shè)置的線程數(shù)N和線程數(shù)M傳遞給重構(gòu)圖像迭代模塊。上述系統(tǒng)實(shí)施例還包括分別連接重構(gòu)圖像迭代模塊420、顯存模塊430以及重構(gòu)圖像讀取模塊410的重構(gòu)重構(gòu)圖像檢驗(yàn)?zāi)K440,其中重構(gòu)圖像讀取模塊410根據(jù)物體的大小、旋轉(zhuǎn)角度的總數(shù)確定投影圖像值Pit的切片數(shù)、每一切片上的元素?cái)?shù),分別設(shè)置重投影并行操作和背投影并行操作相應(yīng)的線程數(shù)及線程塊,并傳遞給重構(gòu)圖像迭代模塊420 ;在內(nèi)存模塊400中以切片為單位進(jìn)行相應(yīng)數(shù)組的分配重構(gòu)圖像數(shù)據(jù)的初始化;重構(gòu)圖像迭代模塊420根據(jù)重投影的線程數(shù)及線程塊將并行獲取的投影圖像值P i+存儲(chǔ)顯存模塊430中,根據(jù)背投影的線程數(shù)及線程塊將并行獲取的切片上各元素的重構(gòu)圖像值X(k)存儲(chǔ)在顯存模塊430中,向重構(gòu)圖像檢驗(yàn)?zāi)K440發(fā)出檢驗(yàn)指令;重構(gòu)圖像檢驗(yàn)?zāi)K440,用于根據(jù)該檢驗(yàn)指令對(duì)顯存模塊430中相應(yīng)切片上各元素的重構(gòu)圖像值X(k)進(jìn)行精度檢驗(yàn),并將檢驗(yàn)結(jié)果傳遞給重構(gòu)圖像讀取模塊410 ;重構(gòu)圖像讀取模塊410根據(jù)該檢驗(yàn)結(jié)果向重構(gòu)圖像迭代模塊420發(fā)出針對(duì)當(dāng)前切片的迭代指令或針對(duì)下一切片的迭代指令。重構(gòu)圖像讀取模塊410若判斷檢驗(yàn)結(jié)果為未滿足要求,則向重構(gòu)圖像迭代模塊 420發(fā)出針對(duì)當(dāng)前切片的迭代指令;若判斷檢驗(yàn)結(jié)果為滿足要求,且判斷未完成所有切片的圖像重構(gòu)操作,則在將內(nèi)存模塊400中下一切片初始的重構(gòu)圖像值X(°)和投影圖像值P3m 傳遞到顯存模塊430后,向重構(gòu)圖像迭代模塊420發(fā)出針對(duì)下一切片的迭代指令。重構(gòu)圖像讀取模塊410在判斷已完成所有切片的圖像重構(gòu)操作后,從顯存模塊 430中讀取所有切片上各元素的重構(gòu)圖像值X(k),并作為物體的重構(gòu)圖像值存儲(chǔ)到內(nèi)存模塊中。重構(gòu)圖像讀取模塊410獲取切片的初始的重構(gòu)圖像值X(°),并在傳遞到顯存模塊 430后發(fā)出迭代指令;重構(gòu)圖像迭代模塊420根據(jù)該迭代命令,使用N個(gè)線程并行地對(duì)切片的投影圖像中N個(gè)元素根據(jù)初始的重構(gòu)圖像值X(°)或從顯存模塊430讀取的重構(gòu)圖像值X(k)執(zhí)行重投影算法,計(jì)算獲取切片的投影圖像值Pi+ ;使用M個(gè)線程并行地對(duì)切片的Pit和測(cè)量獲取的該切片的投影圖像值?《執(zhí)行背投影算法,計(jì)算獲取切片的重構(gòu)圖像值X(k),k為等于1或大于 1的整數(shù)。上述系統(tǒng)實(shí)施例還包括分別連接重構(gòu)圖像迭代模塊420、顯存模塊430以及重構(gòu)圖像讀取模塊410的重構(gòu)重構(gòu)圖像檢驗(yàn)?zāi)K440,其中重構(gòu)圖像迭代模塊420將并行獲取的切片上各元素的重構(gòu)圖像值X(k)存儲(chǔ)在顯存模塊430中,并向重構(gòu)圖像檢驗(yàn)?zāi)K440發(fā)出檢驗(yàn)指令;重構(gòu)圖像檢驗(yàn)?zāi)K,用于根據(jù)該檢驗(yàn)指令對(duì)顯存模塊430中相應(yīng)切片上各元素的重構(gòu)圖像值x(k)進(jìn)行精度檢驗(yàn),并將檢驗(yàn)結(jié)果傳遞給重構(gòu)圖像讀取模塊410 ;
重構(gòu)圖像讀取模塊410根據(jù)該檢驗(yàn)結(jié)果向重構(gòu)圖像迭代模塊420發(fā)出針對(duì)當(dāng)前切片的迭代指令或針對(duì)下一切片的迭代指令。重構(gòu)圖像讀取模塊410若判斷檢驗(yàn)結(jié)果為不滿足迭代精度,則向重構(gòu)圖像迭代模塊420發(fā)出針對(duì)當(dāng)前切片的第一迭代指令;若判斷該檢驗(yàn)結(jié)果為滿足迭代精度,則將從內(nèi)存模塊400讀取的下一切片初始的重構(gòu)圖像值X 傳遞到顯存模塊430中,并向重構(gòu)圖像迭代模塊420發(fā)出針對(duì)下一切片的第二迭代指令;重構(gòu)圖像迭代模塊420根據(jù)第一迭代指令依次通過重投影算法和背投影算法重新計(jì)算獲取當(dāng)前切片的重構(gòu)圖像值,直至滿足迭代精度;或者,根據(jù)第二迭代指令依次通過重投影算法和背投影算法計(jì)算獲取下一切片的重構(gòu)圖像值。重構(gòu)圖像讀取模塊410在判斷重構(gòu)圖像迭代模塊420完成對(duì)物體的所有切片的迭代重構(gòu)圖像處理后,從顯存模塊430中讀取所有切片的迭代重構(gòu)圖像值,并作為物體的重構(gòu)圖像值寫回內(nèi)存模塊400 ;內(nèi)存模塊400還存儲(chǔ)物體的重構(gòu)圖像值。本發(fā)明在提供了上述方法實(shí)施例和系統(tǒng)實(shí)施例后,根據(jù)重構(gòu)的數(shù)據(jù)規(guī)模,選取合適的CPU和GPU分別進(jìn)行迭代重構(gòu)圖像的運(yùn)算測(cè)試,其中CPU采用了 htel公司的i7920, GPU采用Tesla公司的C1060,其詳細(xì)參數(shù)見表1。表1測(cè)試環(huán)境
權(quán)利要求
1.一種實(shí)現(xiàn)迭代重構(gòu)圖像的方法,涉及CPU的主機(jī)端,其特征在于,還涉及圖像處理器 GPU的設(shè)備端,該方法包括所述主機(jī)端將要進(jìn)行迭代重構(gòu)圖像中的物體分成切片,根據(jù)所述切片上的元素?cái)?shù)設(shè)置并行執(zhí)行所述迭代重構(gòu)圖像的線程數(shù);所述設(shè)備端根據(jù)所述線程數(shù)使用相應(yīng)的多線程并行地根據(jù)所述切片的重構(gòu)圖像值和測(cè)量獲取的該切片投影圖像值,依次通過重投影算法和背投影算法計(jì)算獲取所述切片的重構(gòu)圖像值。
2.按照權(quán)利要求1所述的方法,其特征在于,所述主機(jī)端將要進(jìn)行迭代重構(gòu)圖像中的物體分成切片,根據(jù)所述切片上的元素?cái)?shù)設(shè)置并行執(zhí)行所述迭代重構(gòu)圖像的線程數(shù),具體包括根據(jù)所述物體的大小將該物體分成切片,所述切片的數(shù)目為該物體寬度的像素值SY, 所述切片在投影圖像上的元素?cái)?shù)為N = SX*ANG_NUM,所述SX為該物體長度的像素值,所述 ANG.NUM為該物體旋轉(zhuǎn)角度的總數(shù);所述切片在重構(gòu)圖像上的元素?cái)?shù)為M = SX*SZ,所述SZ 為該物體高度的像素值;將所述切片在所述投影圖像上的元素?cái)?shù)N設(shè)置為并行執(zhí)行所述重投影算法的線程數(shù); 將所述切片在所述重構(gòu)圖像上的元素?cái)?shù)M設(shè)置為并行執(zhí)行所述背投影算法的線程數(shù)。
3.按照權(quán)利要求2所述的方法,其特征在于,在所述設(shè)備端通過重投影算法和背投影算法計(jì)算獲取所述切片的重構(gòu)圖像值之前,還包括所述主機(jī)端通過賦0值或隨機(jī)值或背投影方法獲取所述切片的初始的重構(gòu)圖像值 X ,并傳遞到所述設(shè)備端的顯存中。
4.按照權(quán)利要求3所述的方法,其特征在于,所述設(shè)備端根據(jù)所述線程數(shù)使用相應(yīng)的多線程并行地根據(jù)所述切片的重構(gòu)圖像值和測(cè)量獲取的該切片投影圖像值,依次通過重投影算法和背投影算法計(jì)算獲取所述切片的重構(gòu)圖像值,具體包括所述設(shè)備端使用N個(gè)線程并行地對(duì)所述切片的投影圖像中N個(gè)元素根據(jù)初始的重構(gòu)圖像值X(°)或計(jì)算獲取的重構(gòu)圖像值X(k)執(zhí)行所述重投影算法,計(jì)算獲取所述切片的投影圖像值Pi+;使用M個(gè)線程并行對(duì)所述切片的Pit和測(cè)量獲取的該切片的投影圖像值?_執(zhí)行背投影算法,計(jì)算獲取所述切片的重構(gòu)圖像值Χω,所述k為等于1或大于1的整數(shù)。
5.按照權(quán)利要求4所述的方法,其特征在于,所述主機(jī)端在將所述N設(shè)置為并行執(zhí)行所述重投影算法的線程數(shù)以及將所述M設(shè)置為并行執(zhí)行所述背投影算法的線程數(shù)的同時(shí),還包括根據(jù)GPU線程塊中的線程數(shù)BL0CKDIM,設(shè)置并行執(zhí)行所述重投影算法的第一 GPU線程塊的塊數(shù)為(SX*ANG_NUM+BL0CKDIM-1) /BLOCKDIM,該第一 GPU線程塊中每一線程用于計(jì)算獲取所述投影圖像值Pi+的一個(gè)元素;設(shè)置并行執(zhí)行所述背投影算法的第二 GPU線程塊的塊數(shù)為(SX*SZ+BL0CKDIM-1)/BL0CKDIM,該第二 GPU線程塊中每一線程用于計(jì)算獲取所述重構(gòu)圖像值X(k)的一個(gè)元素。
6.按照權(quán)利要求4或5所述的方法,其特征在于,還包括所述主機(jī)端檢驗(yàn)所述切片的重構(gòu)圖像值X(k)是否滿足迭代精度;若檢驗(yàn)結(jié)果為不滿足所述迭代精度,則命令所述設(shè)備端針對(duì)該切片依次通過所述重投影算法和所述背投影算法重新計(jì)算獲取所述切片的重構(gòu)圖像值,直至滿足所述迭代精度;若檢驗(yàn)結(jié)果為滿足所述迭代精度,將從所述內(nèi)存讀取的下一切片初始的重構(gòu)圖像值X 傳遞到所述顯存中,待所述設(shè)備端依次通過所述重投影算法和所述背投影算法計(jì)算獲取所述切片的重構(gòu)圖像值。
7.按照權(quán)利要求6所述的方法,其特征在于,還包括所述主機(jī)端在判斷所述設(shè)備端完成對(duì)所述物體的所有切片的迭代重構(gòu)圖像處理后, 從所述顯存中讀取所有切片的迭代重構(gòu)圖像值,并作為所述物體的重構(gòu)圖像值寫回所述內(nèi)存。
8.一種實(shí)現(xiàn)迭代重構(gòu)圖像的系統(tǒng),其特征在于,包括依次連接的內(nèi)存模塊、重構(gòu)圖像讀取模塊、重構(gòu)圖像迭代模塊以及顯存模塊,其中重構(gòu)圖像讀取模塊,用于將要進(jìn)行迭代重構(gòu)圖像中的物體分成切片,根據(jù)所述切片上的元素?cái)?shù)設(shè)置并行執(zhí)行所述迭代重構(gòu)圖像的線程數(shù),并傳遞給重構(gòu)圖像迭代模塊;將存儲(chǔ)模塊中的所述切片的重構(gòu)圖像值傳遞到顯存模塊后,向重構(gòu)圖像迭代模塊發(fā)出迭代指令;重構(gòu)圖像迭代模塊,用于根據(jù)所述迭代命令和所述線程數(shù)使用相應(yīng)的多線程并行地根據(jù)所述切片的重構(gòu)圖像值和測(cè)量獲取的該切片投影圖像值,依次通過重投影算法和背投影算法計(jì)算獲取所述切片的重構(gòu)圖像值。
9.按照權(quán)利要求8所述的系統(tǒng),其特征在于,所述重構(gòu)圖像讀取模塊將該物體分成數(shù)目為該物體寬度像素值SY的切片,所述切片在投影圖像上的元素?cái)?shù)為N = SX*ANG_NUM,所述SX為該物體長度的像素值,所述ANG_NUM 為該物體旋轉(zhuǎn)角度的總數(shù);所述切片在重構(gòu)圖像上的元素?cái)?shù)為M = SX*SZ,所述SZ為該物體高度的像素值;將所述切片在所述投影圖像上的元素?cái)?shù)N設(shè)置為并行執(zhí)行所述重投影算法的線程數(shù),將所述切片在所述重構(gòu)圖像上的元素?cái)?shù)M設(shè)置為并行執(zhí)行所述背投影算法的線程數(shù);將設(shè)置的線程數(shù)N和線程數(shù)M傳遞給所述重構(gòu)圖像迭代模塊。
10.按照權(quán)利要求9所述的系統(tǒng),其特征在于,所述重構(gòu)圖像讀取模塊獲取所述切片的初始的重構(gòu)圖像值X(°),并在傳遞到所述顯存模塊后發(fā)出所述迭代指令;所述重構(gòu)圖像迭代模塊根據(jù)該迭代命令使用N個(gè)線程并行地對(duì)所述切片的投影圖像中N個(gè)元素根據(jù)初始的重構(gòu)圖像值X(°)或從所述顯存模塊讀取的重構(gòu)圖像值X(k)執(zhí)行所述重投影算法,計(jì)算獲取所述切片的投影圖像值Pi+;使用M個(gè)線程并行對(duì)所述切片的Pit和測(cè)量獲取的該切片的投影圖像值P3m執(zhí)行背投影算法,計(jì)算獲取所述切片的重構(gòu)圖像值X(k), 所述k為等于1或大于1的整數(shù)。
11.按照權(quán)利要求10所述的系統(tǒng),其特征在于,還包括分別連接重構(gòu)圖像迭代模塊、所述顯存模塊以及所述重構(gòu)圖像讀取模塊的重構(gòu)重構(gòu)圖像檢驗(yàn)?zāi)K,其中所述重構(gòu)圖像迭代模塊將并行獲取的切片上各元素的重構(gòu)圖像值Χω存儲(chǔ)在顯存模塊中,并向重構(gòu)圖像檢驗(yàn)?zāi)K發(fā)出檢驗(yàn)指令;重構(gòu)圖像檢驗(yàn)?zāi)K,用于根據(jù)該檢驗(yàn)指令對(duì)所述顯存模塊中相應(yīng)切片上各元素的重構(gòu)圖像值X(k)進(jìn)行迭代精度的檢驗(yàn),并將檢驗(yàn)結(jié)果傳遞給所述重構(gòu)圖像讀取模塊;所述重構(gòu)圖像讀取模塊根據(jù)該檢驗(yàn)結(jié)果向所述重構(gòu)圖像迭代模塊發(fā)出針對(duì)當(dāng)前切片的迭代指令或針對(duì)下一切片的迭代指令。
12.按照權(quán)利要求11所述的系統(tǒng),其特征在于,所述重構(gòu)圖像讀取模塊若判斷該檢驗(yàn)結(jié)果為不滿足所述迭代精度,則向所述重構(gòu)圖像迭代模塊發(fā)出針對(duì)當(dāng)前切片的第一迭代指令;若判斷該檢驗(yàn)結(jié)果為滿足所述迭代精度,則將從所述內(nèi)存模塊讀取的下一切片初始的重構(gòu)圖像值X(C°傳遞到所述顯存模塊中,并向所述重構(gòu)圖像迭代模塊發(fā)出針對(duì)下一切片的第二迭代指令;所述重構(gòu)圖像迭代模塊根據(jù)第一迭代指令依次通過所述重投影算法和所述背投影算法重新計(jì)算獲取所述當(dāng)前切片的重構(gòu)圖像值,直至滿足所述迭代精度;或者,根據(jù)第二迭代指令依次通過所述重投影算法和所述背投影算法計(jì)算獲取所述下一切片的重構(gòu)圖像值。
13.按照權(quán)利要求12所述的系統(tǒng),其特征在于,所述重構(gòu)圖像讀取模塊在判斷所述重構(gòu)圖像迭代模塊完成對(duì)所述物體的所有切片的迭代重構(gòu)圖像處理后,從所述顯存模塊中讀取所有切片的迭代重構(gòu)圖像值,并作為所述物體的重構(gòu)圖像值寫回所述內(nèi)存模塊。
全文摘要
本發(fā)明披露了一種實(shí)現(xiàn)迭代重構(gòu)圖像的方法及系統(tǒng),涉及CPU的主機(jī)端和GPU的設(shè)備端,該方法包括主機(jī)端將要進(jìn)行迭代重構(gòu)圖像中的物體分成切片,根據(jù)切片上的元素?cái)?shù)設(shè)置并行執(zhí)行迭代重構(gòu)圖像的線程數(shù);設(shè)備端根據(jù)線程數(shù)使用相應(yīng)的多線程并行地根據(jù)切片的重構(gòu)圖像值和測(cè)量獲取的該切片投影圖像值,依次通過重投影算法和背投影算法計(jì)算獲取切片的重構(gòu)圖像值。本發(fā)明利用GPU設(shè)備端快速計(jì)算的特點(diǎn)參與對(duì)迭代重構(gòu)圖像中的重投影和背投影進(jìn)行計(jì)算,通過CPU主機(jī)端和GPU設(shè)備端的協(xié)調(diào)運(yùn)作加速圖像的迭代重構(gòu)。
文檔編號(hào)G06T5/50GK102163319SQ201110050568
公開日2011年8月24日 申請(qǐng)日期2011年3月2日 優(yōu)先權(quán)日2011年3月2日
發(fā)明者盧曉偉, 張廣勇, 沈鉑, 謝海波, 趙開勇 申請(qǐng)人:浪潮(北京)電子信息產(chǎn)業(yè)有限公司