趙小敏,周波,劉春媛,陶金
(黑龍江科技學(xué)院,黑龍江哈爾濱 150027)
隨著計(jì)算機(jī)技術(shù),光學(xué)和光電子技術(shù)的迅速發(fā)展,物體三維面形測(cè)量[1]成為現(xiàn)代光學(xué)計(jì)量的一個(gè)重要分支,其以非接觸、高精度、易于測(cè)量[2]等優(yōu)勢(shì)得到廣泛應(yīng)用。在主動(dòng)三維面形測(cè)量技術(shù)中,傅里葉變換輪廓術(shù)(fourier transform profilometry)[3]只需要一幀變形條紋圖就能恢復(fù)出物體的三維面形,但當(dāng)圖像尺寸較大時(shí),其計(jì)算量較大,使用CPU或DSP串行處理圖像數(shù)據(jù)速度慢、效率低[4],難以實(shí)現(xiàn)對(duì)動(dòng)態(tài)物體的實(shí)時(shí)測(cè)量。值得慶幸的是,在利用傅里葉變換提取相位時(shí)其待處理的數(shù)據(jù)和已處理的數(shù)據(jù)是相對(duì)獨(dú)立的圖像像素,具有極高的計(jì)算密度,適于通過(guò)多線程運(yùn)行相同的程序計(jì)算,所以并行處理是提高其計(jì)算速度的最佳解決方案。
圖形處理器(GPU)[5]是一種高度并行化、多線程、多核的處理器,專為計(jì)算密集型和高度并行化的計(jì)算而設(shè)計(jì),具有相當(dāng)高的內(nèi)存帶寬和大量的執(zhí)行單元,為圖形處理以外的通用計(jì)算提供了良好的運(yùn)行平臺(tái)。統(tǒng)一計(jì)算設(shè)備架構(gòu)(CUDA)[6]是NVIDIA推出的GPU通用計(jì)算產(chǎn)品,能夠有效利用GPU強(qiáng)勁的處理能力和巨大的存儲(chǔ)器帶寬進(jìn)行圖形渲染以外的計(jì)算,完全扭轉(zhuǎn)了傳統(tǒng)GPU通用性差這一困難局面,使得GPU打破圖形語(yǔ)言的局限成為真正的并行數(shù)據(jù)處理器。本文基于CUDA平臺(tái)實(shí)現(xiàn)了傅里葉變換輪廓術(shù)的GPU加速,利用CUDA并發(fā)執(zhí)行的優(yōu)點(diǎn),將計(jì)算過(guò)程中計(jì)算密度較大且可以并行計(jì)算的工作在GPU上完成,實(shí)現(xiàn)了CPU與GPU的協(xié)同工作,因此,在保證圖像品質(zhì)的情況下,提高了傅里葉變換輪廓術(shù)的計(jì)算速度,為實(shí)現(xiàn)實(shí)時(shí)三維測(cè)量奠定了基礎(chǔ)。
傅里葉變換輪廓術(shù),是通過(guò)對(duì)獲取的光柵圖像進(jìn)行傅里葉變換、濾波和逆傅里葉變換提取出相位信息,由相位信息恢復(fù)出物體的三維面形高度分布[7]。
圖1所示是傅里葉變換輪廓術(shù)的系統(tǒng)光路結(jié)構(gòu)圖[8],Ep和Ec分別是投影系統(tǒng)和成像系統(tǒng)的光軸,兩光軸與參考平面xoy相交。l0是成像系統(tǒng)到參考平面的距離,d是成像系統(tǒng)與投影系統(tǒng)之間的距離。
按照?qǐng)D1中所示的坐標(biāo)系,將垂直于x軸的光柵投影到參考平面時(shí),CCD相機(jī)獲取的成像條紋記為:
圖1 傅里葉變換輪廓術(shù)的系統(tǒng)光路結(jié)構(gòu)圖
其中,An代表傅里葉級(jí)數(shù)的系數(shù);r0(x,y)是參考平面上的非均勻反射率分布函數(shù);f0為光柵像的空間頻率;φ0是參考平面上的相位分布。在結(jié)構(gòu)參數(shù)相同的條件下,將該光柵投影到待測(cè)物體表面上,CCD相機(jī)得到的變形條紋分布為:
r(x,y)是物體表面非均勻反射率分布函數(shù);φ(x,y)是由于物體表面高度變化而引起的相位調(diào)制。為了獲得由物體高度引起的相位變化Δφ(x,y),分別對(duì)式(1)和式(2)進(jìn)行傅里葉變換,經(jīng)過(guò)濾波獲取所需要的相位信息的基頻分量,再對(duì)基頻分量進(jìn)行逆傅里葉變換,得到的復(fù)分布表示為:
由物體高度分布引起的相位變化為:
由于物體的高度信息被編碼在相位φ(x,y)中,而Δφ(x,y)對(duì)應(yīng)待測(cè)物體的真實(shí)高度分布h(x,y),因此,只需要求出相位差Δφ(x,y)并將其恢復(fù)為連續(xù)相位,再利用相位與高度之間的映射關(guān)系,即可計(jì)算出物體的三維面形。
對(duì)濾波后的基頻分量進(jìn)行逆傅里葉變換以后,獲得條紋圖像的復(fù)分布式(3)和式(4),將式(3)和式(4)的共軛相乘,得:
其中,“* ”表示共軛,|A1|2,r(x,y),r0(x,y),Δφ(x,y)均為實(shí)函數(shù),則變形條紋相對(duì)于參考平面的相位差為:
系統(tǒng)光路結(jié)構(gòu)如圖1所示,投影在參考平面上的光柵條紋是等周期分布的,其頻率為f0,相位分布φ(x,y)是坐標(biāo) x的線性函數(shù)[9],記為:
以參考平面上O點(diǎn)為原點(diǎn),C點(diǎn)的相位為:
被測(cè)三維表面H點(diǎn)的相位對(duì)應(yīng)于參考平面上D點(diǎn)的相位,即:
因此,由物體高度引起的相位調(diào)制Δφ(x,y)為:
由△HCD與△HEpEc相似,可得:
由式(12)和式(13),得:
即可恢復(fù)出物體的三維面形高度分布。
CUDA是NVIDIA公司發(fā)布的用于GPU通用計(jì)算的開發(fā)環(huán)境和軟件體系[10],利用GPU強(qiáng)大的運(yùn)算能力,可實(shí)現(xiàn)并行處理。GPU的硬件架構(gòu)以NVIDIA Quadro FX 1700為例,如圖2所示,該GPU由16個(gè)SM(流多處理器)組成,每個(gè)SM包含8個(gè)SP(流處理器)、常量緩存和紋理緩存以及其他單元。在CUDA架構(gòu)下[11],GPU作為設(shè)備執(zhí)行高度線程化的并行處理任務(wù),運(yùn)行在GPU上的函數(shù)稱為 Kernel,其線程被組織成三層結(jié)構(gòu),即:線程網(wǎng)格(grid)、線程塊(block)和線程(thread)。CUDA的執(zhí)行模型如圖3所示[12],Thread以Block為單位分配到 SM,SM采用Warp管理線程的執(zhí)行,同一Block中連續(xù)的32個(gè)線程組成一個(gè)Warp。Thread在執(zhí)行時(shí)將會(huì)訪問(wèn)到處于多個(gè)不同存儲(chǔ)空間中的數(shù)據(jù)[13-15],如圖4所示,Grid中的所有線程可訪問(wèn)全局存儲(chǔ)器、常數(shù)存儲(chǔ)器、紋理存儲(chǔ)器,同一Block中的線程可訪問(wèn)同一共享內(nèi)存,每個(gè)Thread擁有私有的寄存器和局部存儲(chǔ)器。
傅里葉變換輪廓術(shù)由多個(gè)不同的處理步驟組成,應(yīng)考慮各部分的計(jì)算復(fù)雜度,分別采用合適的處理平臺(tái),使CPU與GPU協(xié)同工作,以達(dá)到最優(yōu)的處理速度。由于在相位展開時(shí)存在大量的分支語(yǔ)句,不適合GPU實(shí)現(xiàn),而在提取相位部分需處理全部的像素且計(jì)算規(guī)整,因此,本文的GPU加速主要針對(duì)提取相位部分。
采用Nvidia公司的Quadro FX 1700顯卡作為GPU硬件,它集成了128個(gè)流處理器,板載512 MB顯存;CPU為Intel Core-4 E5420@2.5 GHz;軟件開發(fā)工具為 Microsoft visual studio 2005。為驗(yàn)證本文提出算法的有效性,使用了多組大小不同的計(jì)算機(jī)模擬條紋圖進(jìn)行了驗(yàn)證,并與在CPU上使用fftw庫(kù)算法進(jìn)行了比較,表1是在CPU與GPU上處理時(shí)間的對(duì)比結(jié)果。
表1 GPU與CPU的處理效率對(duì)比
從表1可以看出,隨著圖像尺寸增大,GPU較CPU的相對(duì)運(yùn)行時(shí)間明顯偏少,并行計(jì)算優(yōu)勢(shì)顯現(xiàn)。影響GPU整體性能的原因有兩個(gè):1)對(duì)于小尺寸的圖像而言,其CPU計(jì)算循環(huán)次數(shù)較少而且CPU主頻高于GPU和單線程計(jì)算能力突出,制約了GPU加速性能;2)由于GPU的加速處理時(shí)間包括數(shù)據(jù)在CPU和GPU之間傳輸?shù)臅r(shí)間,當(dāng)圖像像素?cái)?shù)目增多時(shí),計(jì)算量隨之增大,計(jì)算時(shí)間占總處理時(shí)間的比例越大,因此,GPU強(qiáng)大的并行執(zhí)行能力明顯體現(xiàn)。為驗(yàn)證本算法的精度,選取256×256的模擬條紋圖如圖7(a)所示,分別在CPU與GPU上進(jìn)行處理,處理后的結(jié)果如圖7(b),(c)所示,可以看出GPU在提高計(jì)算速度的同時(shí)沒(méi)有產(chǎn)生額外的計(jì)算誤差。由此可見,GPU并行運(yùn)算在保證圖像處理效果和低成本的前提下,有著很高的并行效率。
針對(duì)在傅里葉變換輪廓術(shù)中相位計(jì)算耗時(shí)的問(wèn)題,本文將相位計(jì)算等需要大量計(jì)算并且可以并行計(jì)算的部分移植到GPU上進(jìn)行計(jì)算,利用GPU并發(fā)執(zhí)行的優(yōu)點(diǎn),在保證算法精度的同時(shí)提高了計(jì)算速度。從上述算法的實(shí)現(xiàn)可以看出,由于受數(shù)據(jù)相關(guān)性以及編程的復(fù)雜性的制約,其只能夠?qū)ρh(huán)結(jié)構(gòu)進(jìn)行并行化,對(duì)分支結(jié)構(gòu)執(zhí)行效率低下;其次,數(shù)據(jù)在主存和顯存之間的傳輸也是影響整體速度的主要因素。因此,應(yīng)在對(duì)分支結(jié)構(gòu)的執(zhí)行和數(shù)據(jù)的傳輸這兩方面進(jìn)一步優(yōu)化。
[1]Zhang Song.Recent Progresses on Real-time 3D Shape Measurement Using Digital Fringe Projection Techniques[J].Optics and Lasers in Engineering,2010,48(2):149-158.
[2]譚優(yōu).基于FTP的動(dòng)物體三維面形測(cè)量系統(tǒng)的研究[D].成都:西南交通大學(xué)光學(xué)工程,2007.
[3]毛先福,陳文靜,蘇顯渝,等.傅里葉變換輪廓術(shù)中新的相位及高度算法分析[J].光學(xué)學(xué)報(bào),2007,27(2):225-229.
[4]張彤,劉釗,歐陽(yáng)寧.基于GPU的圖像快速傅里葉變換研究[J].微計(jì)算機(jī)信息,2009,25(5):286-288.
[5]張舒,褚艷麗.GPU高性能運(yùn)算之CUDA[M].北京:中國(guó)水利水電出版社,2009.3-20.
[6]NVIDIA.CUDAProgrammingGuideVersion2.0[EB/OL].[2011-9-14].http://www.docin .com/p-34710013.html.
[7]張啟燦.基于傅里葉變換輪廓術(shù)的動(dòng)態(tài)物體三維面形測(cè)量的研究[D].成都:四川大學(xué)光學(xué),2001.
[8] Mitsuo Takeda,Hideki Ina* ,SeijiKobayashi.Fourier-transform method of fringe-pattern analysis for computer-based topography and interferometry[J].Opt.Soc.Am,1982,72(1):156-160.
[9]趙煥東.相位測(cè)量輪廓術(shù)的理論研究及應(yīng)用[D].杭州:浙江大學(xué)電子科學(xué)與技術(shù),2001.
[10]顏瑞.基于CUDA的立體匹配及去隔行算法[D].杭州:浙江大學(xué)信息與電子工程學(xué)系,2010.
[11]田力.CUDA在高性能計(jì)算中的應(yīng)用[D].杭州:浙江大學(xué)理學(xué)院,2008.
[12]杜歆,顏瑞.監(jiān)控?cái)z像機(jī)視頻去隔行和CUDA加速[J].傳感技術(shù)學(xué)報(bào),2010,23(3):393-398.
[13]覃方濤,方斌.CUDA并行技術(shù)與數(shù)字圖像幾何變換[J].計(jì)算機(jī)系統(tǒng)應(yīng)用,2009,19(10):169-172.
[14]SongZhang,Dale Royer,Shing_TungYan.GPU_assisted highresolution,real_time 3D Shape measurement[J].Optical Society of America,2006,14(20):9120-9129.
[15]Bi Wenyuan,Chen Zhiqiang.Real-Time Visualize the 3D Reconstruction Procedure Using CUDA[J].CT Theory and Applications,2010,19(2):1-8.