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