李 朋,盧洪義,王 鑫,伍 鵬
(海軍航空大學(xué),山東煙臺(tái) 264001)
虛擬內(nèi)窺鏡技術(shù)是隨著圖像處理技術(shù)發(fā)展而出現(xiàn)的新技術(shù),對于固體火箭發(fā)動(dòng)機(jī)而言,通過對裝藥星孔表面進(jìn)行虛擬內(nèi)窺鏡觀測不僅可以對缺陷的位置、狀態(tài)進(jìn)行近一步的了解,而且可以對工業(yè)內(nèi)窺鏡較難進(jìn)入的部位進(jìn)行檢測,對于工業(yè)內(nèi)窺鏡的檢測也可以起到引導(dǎo)作用。
目前基于人體CT數(shù)據(jù)的虛擬內(nèi)窺鏡技術(shù)的研究內(nèi)容較多[1-6],但是由于固體火箭發(fā)動(dòng)機(jī)CT掃描數(shù)據(jù)的數(shù)據(jù)量較大,為滿足虛擬內(nèi)窺鏡的實(shí)時(shí)成像要求,需要對其成像過程進(jìn)行加速方法的研究。光線投影體繪制算法是固體火箭發(fā)動(dòng)機(jī)三維成像時(shí)最常用的繪制方法[7-11]。隨著計(jì)算機(jī)技術(shù)的發(fā)展,硬件加速光線投影體繪的過程成為可能[12-14],為此引入CUDA(compute unified device architecture,統(tǒng)一計(jì)算設(shè)備架構(gòu))加速研究。文中首先結(jié)合固體火箭發(fā)動(dòng)機(jī)CT掃描體數(shù)據(jù),針對其光線投影體繪制過程進(jìn)行了加速方法的研究;其次通過距離變換提取發(fā)動(dòng)機(jī)星孔的中心路徑,實(shí)現(xiàn)了自動(dòng)漫游和引導(dǎo)手動(dòng)漫游的虛擬內(nèi)窺鏡實(shí)時(shí)成像。
光線投影法是固體火箭發(fā)動(dòng)機(jī)體繪制中最常采用的繪制算法,具有繪制效果好,易編程并行計(jì)算的優(yōu)點(diǎn)。其原理如圖1所示,從視點(diǎn)到投影平面的每一個(gè)像素點(diǎn)發(fā)射一條光線,穿過三維體數(shù)據(jù)場,并按照從前到后的順序進(jìn)行采樣點(diǎn)光屬性的混合疊加,最后的和值為該像素點(diǎn)的灰度值,最終得到完整的二維投影圖像。每一個(gè)采樣點(diǎn)的光屬性值有透明值和光強(qiáng)度值。CT掃描體數(shù)據(jù)中每點(diǎn)的光屬性值通過傳遞函數(shù)來進(jìn)行確定和調(diào)節(jié)。一般采用的是基于灰度的傳遞函數(shù),根據(jù)灰度值范圍,將體空間中的點(diǎn)分類,并賦予相應(yīng)的數(shù)值。采樣點(diǎn)處的光強(qiáng)度和不透明度由插值算法得出,最常用的插值算法為三線性插值[1]。如圖2所示,對任一采樣點(diǎn)其三次插值如式(1)所示。
Vp=V0(1-x)(1-y)(1-z)+V1(1-x)y(1-z)+
V2(1-x)(1-y)z+V3(1-x)yz+V4x(1-y)(1-
z)+V5xy(1-z)+V6x(1-y)z+V7xyz
(1)
圖2 三線性插值
由光線投影體繪制算法的原理可以看出:
1)算法的大部分時(shí)間花在采樣點(diǎn)插值和累加過程中。如果選擇1024×1024的分辨率進(jìn)行繪制,則每計(jì)算一次三維效果需要計(jì)算106條由視點(diǎn)發(fā)出的光線。每條光線在體數(shù)據(jù)場中等距取值,若固體火箭發(fā)動(dòng)機(jī)間隔5 mm掃描一次,則對于長度1 200 mm的固體火箭發(fā)動(dòng)機(jī)CT掃描數(shù)據(jù),至少需采樣240次,即每次需要插值240次來獲取采樣點(diǎn),那么僅插值次數(shù)的數(shù)量級將到108,若要提高成像質(zhì)量則需要插值次數(shù)更多,可以看出整個(gè)體繪制過程的計(jì)算量非常龐大,而對于虛擬內(nèi)窺鏡技術(shù)每次移動(dòng)視點(diǎn)都需要對整個(gè)數(shù)據(jù)場進(jìn)行重新繪制,對實(shí)時(shí)性要求較高。
2)從視點(diǎn)發(fā)出的光線總數(shù)為圖像的像素點(diǎn)總數(shù)之和,每條光線的計(jì)算只與該條光線穿過的體數(shù)據(jù)場點(diǎn)的光屬性值有關(guān),光線之間沒有關(guān)聯(lián)。通過并行運(yùn)算可以提高算法的繪制速度。
在對固體火箭發(fā)動(dòng)機(jī)進(jìn)行虛擬內(nèi)窺的過程中需要從每一個(gè)內(nèi)窺鏡視點(diǎn)對發(fā)動(dòng)機(jī)進(jìn)行實(shí)時(shí)繪制,每次移動(dòng)視點(diǎn)或是轉(zhuǎn)動(dòng)視角都需要對變化的體數(shù)據(jù)場進(jìn)行重新繪制,其計(jì)算數(shù)量遠(yuǎn)高于只用于三維觀察的單次繪制,對實(shí)時(shí)性要求較高。因此選擇基于硬件加速對體繪制過程進(jìn)行加速。
CUDA是英偉達(dá)公司于2007年針對GPU(graphic processing unit,圖形處理器)通用計(jì)算而設(shè)計(jì)的C語言風(fēng)格的編程接口,其目的是將CPU和GPU并用,充分利用二者的優(yōu)點(diǎn)。通過CUDA,能夠方便的針對英偉達(dá)系列的顯卡GPU進(jìn)行并行運(yùn)算的程序設(shè)計(jì),這給固體火箭發(fā)動(dòng)機(jī)CT掃描體數(shù)據(jù)的光線投影體繪制算法的并行計(jì)算提供了條件。
基于CUDA的光線投影體繪制流程圖如圖3所示,步驟如下:
1)在CPU端讀入固體火箭發(fā)動(dòng)機(jī)CT探傷系列圖像。經(jīng)過預(yù)處理后,將內(nèi)存中的體數(shù)據(jù)加載到GPU的全局存儲(chǔ)器中,并與三維紋理綁定。
2)確定傳遞函數(shù),將旋轉(zhuǎn)矩陣和視點(diǎn)位置存儲(chǔ)到GPU常數(shù)存儲(chǔ)器中。
3)進(jìn)入當(dāng)前視點(diǎn)條件下的內(nèi)核函數(shù)中,確定線程塊與線程對應(yīng)的光線,對每條光線按相同流程進(jìn)行計(jì)算。
4)將每條光線的計(jì)算結(jié)果返回CPU端進(jìn)行成像顯示。
圖3 基于CUDA的光線投影體繪制流程圖
固體火箭發(fā)動(dòng)機(jī)虛擬內(nèi)窺鏡觀測原理如圖4所示,與三維直接成像觀測所采用的成像算法都是光線投影體繪制,不同的地方在于,內(nèi)窺鏡的視點(diǎn)位于三維體數(shù)據(jù)場的內(nèi)部。一般虛擬內(nèi)窺鏡的視點(diǎn)的移動(dòng)方案有三種:基于設(shè)定路徑移動(dòng)的自動(dòng)漫游,手動(dòng)移動(dòng)視點(diǎn)的手動(dòng)漫游及沿設(shè)定路徑手動(dòng)步進(jìn)的引導(dǎo)漫游。由于固體火箭發(fā)動(dòng)機(jī)數(shù)據(jù)較大,純手動(dòng)漫游,視點(diǎn)容易陷入體數(shù)據(jù)的內(nèi)部起不到在星孔內(nèi)觀察內(nèi)表面的觀測效果,因此文中選擇基于設(shè)定路徑的自動(dòng)漫游和引導(dǎo)漫游方法。
圖4 虛擬內(nèi)窺鏡原理示意圖
基于路徑的視點(diǎn)漫游方法首先需要對漫游的路徑進(jìn)行提取,對于固體火箭發(fā)動(dòng)機(jī)而言,需要提取星孔的中心路徑,選擇距離變換作為中心路徑提取方法,步驟如下:
1)圖像二值化
根據(jù)裝藥與星孔在CT掃描圖像上的不同灰度值,將星孔提取,并二值化,設(shè)定星孔部分灰度值為1,其余部分為0,即將星孔選為目標(biāo)區(qū)域。
2)用八鄰域跟蹤的方法跟蹤出內(nèi)窺鏡檢測管道的邊界輪廓
逐行掃描整幅圖像。若搜索到的是管道內(nèi)的點(diǎn),則分別檢測包圍該點(diǎn)的8個(gè)鄰近點(diǎn),若鄰近點(diǎn)有像素值為0的點(diǎn),則記錄該點(diǎn)為邊緣點(diǎn),進(jìn)一步檢查該點(diǎn)的8個(gè)鄰點(diǎn),把滿足相應(yīng)準(zhǔn)則的鄰點(diǎn)并入邊緣點(diǎn)集合,不斷重復(fù)該操作,直到?jīng)]有鄰點(diǎn)滿足跟蹤準(zhǔn)則為止。然后用檢測準(zhǔn)則繼續(xù)尋找,當(dāng)找到滿足檢測準(zhǔn)則且不屬于任何已生成邊緣的像素點(diǎn)后,開始下個(gè)邊緣的生長,直到?jīng)]有滿足檢測標(biāo)準(zhǔn)的像素點(diǎn)為止。這樣就得到CT圖像上需檢測管道的邊緣圖。
3)對邊緣圖進(jìn)行距離變換
對于圖像上的任意一點(diǎn)pk,則該點(diǎn)到邊界的距離的正負(fù)定義如式(2)所示:
(2)
即如果點(diǎn)pk位于目標(biāo)區(qū)域,則其距離值大于0;如果點(diǎn)pk位于目標(biāo)區(qū)域外,則其距離值小于0;如果點(diǎn)pk位于邊界上,則其距離值等于0。
4)選取中心點(diǎn)
每幅CT圖像按以上步驟處理,選取距離最大值處為該幅圖像中心點(diǎn),若距離數(shù)值相同則取第一點(diǎn)為中心點(diǎn),圖像像素點(diǎn)處理順序?yàn)閺淖笾劣?由上至下。得到中心點(diǎn)在三維數(shù)據(jù)場中的三維坐標(biāo),其中x、y方向坐標(biāo)由該幅圖像的像素點(diǎn)位置決定,z方向坐標(biāo)由該幅圖片在系列圖片中的順序及CT每次的掃描距離決定。
5)中心路徑三次樣條插值擬合
由于CT掃描時(shí)掃描間距的數(shù)值相對于CT圖像的分辨率相差較大,直接采用每幅圖像的中心點(diǎn)連接成的路徑不夠平滑,在某些位置會(huì)出現(xiàn)視點(diǎn)的跳躍,因此利用樣條函數(shù)進(jìn)行三次插值擬合,擬合出的路徑即為視點(diǎn)的移動(dòng)路徑。
在[a,b]中取(n+1)個(gè)插值點(diǎn):a=x0 ①S(xk)=yk(k=0,1,…,n); ②在每個(gè)小區(qū)間[xk,xk+1](k=0,1,…,n-1)上S(x)是三次多項(xiàng)式,記為Sk(x); ③S(x)在[a,b]上二階連續(xù)可微。 則由條件②得: S(x)={Sk(x),x∈[xk,xk+1],k=0,1,…,n-1} Sk(x)=akx3+bkx2+ckx+dk 其中:ak,bk,ck,dk為待定系數(shù),共4n個(gè)。由條件③得: 容易看出共含有(4n-2)個(gè)方程,為確定S(x)的4n個(gè)待定參數(shù),尚需再給兩個(gè)條件。 在提取路徑后,視點(diǎn)便可以沿星孔中心路徑移動(dòng),通過第二節(jié)的加速體繪制,可以實(shí)現(xiàn)實(shí)時(shí)成像。進(jìn)一步通過實(shí)驗(yàn)驗(yàn)證以上算法。 對240張像素大小為597×960的星孔型固體火箭發(fā)動(dòng)機(jī)系列CT圖像進(jìn)行虛擬內(nèi)窺鏡觀測。使用的計(jì)算機(jī)主頻為2.9 GHz。內(nèi)存為2 G,顯卡為英偉達(dá)GeForce 605,具有48個(gè)流處理器,1 G顯存。編程語言為C++,編譯平臺(tái)為VS2010,系統(tǒng)為Microsoft Windows 7旗艦版。 發(fā)動(dòng)機(jī)中間段圖像基本一致,序列圖像部分如圖5所示。其中距探測頭部距離為300 mm處有一寬5 mm、深60 mm的裂紋,三維成像后通過虛擬內(nèi)窺鏡沿星孔中心路徑對發(fā)動(dòng)機(jī)進(jìn)行虛擬內(nèi)窺鏡檢測。 圖5 固體火箭發(fā)動(dòng)機(jī)系列CT圖像 1)圖像分割并計(jì)算距離圖 對分割后的星孔二值圖像進(jìn)行距離變換,得到如圖6所示的CT圖像星孔邊緣距離圖。由距離圖可以看出,星孔部分越靠近中心亮度越高,驗(yàn)證了距離變換提取星孔中心的可行性。 圖6 固體火箭發(fā)動(dòng)機(jī)系列CT圖像星孔邊緣距離圖 2)中心路徑提取、平滑 選擇每幅CT星孔邊緣距離圖中灰度值最大的一個(gè)點(diǎn)作為中心點(diǎn),經(jīng)過三次樣條插值后其效果如圖7所示,為具體表現(xiàn)中心路徑相對于固體火箭發(fā)動(dòng)機(jī)星孔的位置,將星孔進(jìn)行三維體繪制,并將其光屬性值調(diào)整為半透明。由圖7可以看出,提取的中心路徑是一條平滑的曲線。中心路徑基本與星孔的實(shí)際中心線重合。由距離變換提取固體火箭發(fā)動(dòng)機(jī)星孔中心路徑是可行的。 圖7 中心路徑三維空間顯示 3)自動(dòng)漫游 設(shè)置視點(diǎn)沿中心路徑自動(dòng)前進(jìn),視角固定正對前方,得到系列內(nèi)窺鏡圖像如圖8所示。 圖8 自動(dòng)漫游下內(nèi)窺鏡圖像 4)引導(dǎo)手動(dòng)漫游 設(shè)置視點(diǎn)前進(jìn)方向?yàn)槊看窝刂行穆窂讲竭M(jìn),視角由鼠標(biāo)控制轉(zhuǎn)動(dòng),得到系列內(nèi)窺鏡圖像如圖9所示。通過手動(dòng)漫游可以對距探測起始處300 mm位置上的裂紋進(jìn)行觀察。 圖9 手動(dòng)漫游下內(nèi)窺鏡圖像 文中針對固體火箭發(fā)動(dòng)機(jī)CT掃描體數(shù)據(jù)進(jìn)行了虛擬內(nèi)窺鏡觀測技術(shù)研究。得到主要結(jié)論如下: 1)固體火箭發(fā)動(dòng)機(jī)CT圖像三維體繪制采用的光線投影算法,滿足并行計(jì)算特點(diǎn),通過基于CUDA的編程接口,實(shí)現(xiàn)了固體火箭發(fā)動(dòng)機(jī)三維圖像的硬件加速繪制。但是由于是基于硬件加速,會(huì)受到硬件性能的影響,其影響主要體現(xiàn)在:一是由于顯卡不同,可并行處理的線程數(shù),加速效果有差異;二是GPU處理數(shù)據(jù)時(shí)需將所有數(shù)據(jù)讀入顯卡內(nèi)存,目前,固體火箭發(fā)動(dòng)機(jī)CT掃描數(shù)據(jù)量基本在600 MB到1 GB大小,因此顯卡內(nèi)存的大小至少為1 GB。 2)基于距離變換能夠提取出固體火箭發(fā)動(dòng)機(jī)體數(shù)據(jù)的中心路徑,基于文中實(shí)驗(yàn)可以看出提取的中心路徑基本位于星孔的中心處。與理論中心的偏差主要是由在圖像分割和邊緣檢測的過程中所產(chǎn)生的誤差造成。 3)基于中心路徑的漫游能夠?qū)⒁朁c(diǎn)固定在星孔中心處,有利于對裝藥表面進(jìn)行觀測。若不限定在中心處,手動(dòng)操作可能將視點(diǎn)移動(dòng)到裝藥內(nèi)部,沒有方向,無法將視點(diǎn)移動(dòng)到觀察的部位。 4)對固體火箭發(fā)動(dòng)機(jī)星孔外的其它位置進(jìn)行虛擬內(nèi)窺鏡觀測,都可以按照文中的方法進(jìn)行處理。相比于傳統(tǒng)內(nèi)窺鏡,虛擬內(nèi)窺鏡不受實(shí)際尺寸的影響,能夠?qū)?xì)小空隙的內(nèi)部進(jìn)行觀測。3 實(shí)驗(yàn)及結(jié)果
4 結(jié)論