楊 云, 岳 柱
(陜西科技大學(xué) 電氣與信息工程學(xué)院, 陜西 西安 710021)
在材料科學(xué)工程領(lǐng)域,材料的行為和性能不僅依賴于化學(xué)成分,而且還受到其微觀結(jié)構(gòu)的影響.大部分工程材料都是由許多不同形狀和尺寸的單胞、組織、顆粒和氣孔組成,通過各種不同類型的界面共同連接在一個連續(xù)的三維實體上.由于大部分材料是不透明的,因此這些材料的幾何特征通常不能直接從塊體樣品中獲得,傳統(tǒng)的方法通過在顯微鏡下獲取樣品的二維截面圖像來對材料的微觀結(jié)構(gòu)進行研究[1,2],但是實際中所有試樣幾乎都是三維結(jié)構(gòu),平面圖形通常不能充分地顯示其復(fù)雜的三維細節(jié),難以直觀、準確地反映真實的顯微結(jié)構(gòu).因此,對材料的顯微結(jié)構(gòu)進行三維可視化有著實際的需求和意義[3,4].
本文提出了一種基于三維可視化工具VTK(Visualization Toolkit)的對于陶瓷材料顯微結(jié)構(gòu)進行三維可視化的方法.應(yīng)用VTK進行了顯微結(jié)構(gòu)的三維重建,通過簡單的鼠標(biāo)操作,可以對重建后的三維物體進行平移、旋轉(zhuǎn)和縮放等實時交互操作,并對三維空間任意組織的長度進行測量.
陶瓷材料顯微結(jié)構(gòu)三維可視化研究的技術(shù)流程如圖1所示,流程圖中的關(guān)鍵步驟說明如下:
將原始的二維切片數(shù)據(jù)從存儲設(shè)備中讀入內(nèi)存,并生成三維體數(shù)據(jù),不同格式的數(shù)據(jù)集需要采用不同的讀取方法.
用戶根據(jù)需要選擇對原始數(shù)據(jù)集進行的預(yù)處理操作主要包括數(shù)字濾波等操作.
通過傳遞函數(shù),對體數(shù)據(jù)進行分類,將三維數(shù)據(jù)場的數(shù)據(jù)信息映射成為繪制時的光學(xué)屬性,包括對不同的組成物質(zhì)賦予不同的顏色值和不透明度值.
沿著視線方向由圖像平面的每個像素點發(fā)出一條射線穿過三維數(shù)據(jù)場,沿著該射線選擇等距采樣點,然后將射線上的所有采樣點的顏色值及不透明度值加以合成,從而得到屏幕像素點的光學(xué)屬性值.基于體繪制技術(shù)的光線投射算法進行顯微結(jié)構(gòu)的三維體重建.
根據(jù)由光照模型計算的參數(shù)值,以及顏色值和不透明度值等光學(xué)屬性,在繪制結(jié)果視圖區(qū)域顯示出重建后的繪制結(jié)果.
對于重建后顯示于視圖區(qū)域的繪制結(jié)果,通過旋轉(zhuǎn)、平移和放縮等實時的交互式操作,進行多視角和從整體到局部的詳細定性查看.通過三維空間的長度測量,進行定量分析操作.
圖1 陶瓷材料顯微結(jié)構(gòu)三維可視化技術(shù)流程圖
VTK(Visualization Toolkit)由Kitware公司發(fā)布,是一款用于二次開發(fā)的可視化工具包,基本上可以作為可視化領(lǐng)域的規(guī)范[5,6].VTK是一套開源的可視化類庫,該類庫構(gòu)造在C++語言之上,融合了三維計算機圖形學(xué)、圖像處理和可視化3大技術(shù),在科學(xué)研究和工程領(lǐng)域得到了廣泛的應(yīng)用,用于可視化應(yīng)用程序構(gòu)造與運行的支撐環(huán)境,已成為一種流行的可視化應(yīng)用程序開發(fā)平臺.VTK具有自身鮮明的特點,例如:封裝了目前許多優(yōu)秀的三維數(shù)據(jù)場可視化算法,可方便地對數(shù)據(jù)集進行各種變換和操作、模塊化設(shè)計等.
圖像來源為顯微鏡下拍攝的陶瓷材料顯微結(jié)構(gòu)圖像,如圖2所示.根據(jù)輸入圖像數(shù)據(jù)類型的不同,如bmp、jpg、tiff格式,在VTK中應(yīng)用不同的vtk-ImageReader類來進行讀取.本文采用類vtkBMPReader讀取顯微圖像序列.在讀入數(shù)據(jù)之后,接下來進行的是數(shù)據(jù)轉(zhuǎn)換,包括對輸入圖像進行平移和縮放,轉(zhuǎn)換輸入數(shù)據(jù)類型以及匹配輸出數(shù)據(jù)類型.在VTK中通過類vtkImageShiftScale和類vtkImageCast完成這個功能.方法SetShift()進行圖像的平移,SetOutputScalarTypeTo()轉(zhuǎn)換輸出數(shù)據(jù)的類型.
圖2 顯微結(jié)構(gòu)圖像
盡管拍攝方法的精度在不斷提高,但是斷層圖像在拍攝過程中不可避免的要收到各種因素的影響,進而引入噪聲造成圖像質(zhì)量的退化.為了去除噪聲的干擾,就要對圖像進行平滑處理,消除各種噪聲.為了抑制噪聲,通常需要選用低通濾波,但邊緣輪廓含有高頻信息,消除噪聲的同時,會使邊界變得模糊.而為了提高輪廓清晰度,需要用高通濾波,但噪聲也被加強了.而中值濾波在過濾噪聲的同時,很好地保護了邊緣輪廓信息.在VTK中通過類vtkImageMedian3D實現(xiàn)中值濾波功能,并由方法SetKernelSize()設(shè)置濾波窗口的大小.
三維數(shù)據(jù)場可視化的成像方法主要有面繪制和體繪制兩種方法.面繪制法由三維數(shù)據(jù)場構(gòu)造出中間幾何圖元,以等值面的方式對物體表面進行擬合而忽略物體的內(nèi)部信息,繪制速度較快.但是這種方法構(gòu)造出的可視化圖形不能反映整個原始數(shù)據(jù)場的全貌和數(shù)據(jù)場中各種因素的相互關(guān)系,使研究人員難以把握數(shù)據(jù)場的全局狀況.而體繪制法盡可能準確地反映整個原始數(shù)據(jù)場的全部細節(jié),圖像質(zhì)量較高,可以將數(shù)據(jù)場中的各種分類物質(zhì)在一張可視圖中顯示,揭示它們的相互關(guān)系.體繪制法的對象不再是點、線、面等傳統(tǒng)圖形學(xué)元素表示形體的方法所組成的三維實體,而是由體素作為基本單元,數(shù)據(jù)場是由大量的體素組成.由于放棄了等值面等幾何表示方法,因此,體繪制常被稱為直接體繪制.
體繪制的思想是模擬光線穿越半透明物質(zhì),給數(shù)據(jù)場中的體素賦予一定的顏色和不透明度,根據(jù)光線穿越半透明物質(zhì)時的光學(xué)原理,一些光線被吸收,而另一些光線則通過,直接從三維數(shù)據(jù)場中繪制出各類物質(zhì)的分布情況.根據(jù)材料的屬性,在這是的情況下就是每一個三維位置的體素的密度值,一些體素比其它體素能夠允許更多的光線通過.下面式(1)的體繪制方程沿著光線上的每一個點進行積分[7]:
(1)
其中,x(λ)表示沿著光線距離觀察點為λ的點,s(x)為密度函數(shù),c(s)是顏色映射所賦予的顏色值.τ(s)是體數(shù)據(jù)場中各類物質(zhì)的光吸收系數(shù).D是光線離開體數(shù)據(jù)場時所走過的最大距離.
對于每條光線,都要計算(或近似地)體繪制積分來得到不透明度值和顏色值.為了做到這一點,每條光線以長度d=D/n被分為n等份.分段的透明度值ai和顏色值ci可由式(2)、(3)表示[8,9]:
ai≈1-exp(-τ(s(x(id)))d)
(2)
Ci≈c(s(x(id)))d
(3)
光線積分可用式(4)近似表示,用來計算每一個像素點的光強度:
(4)
在體繪制中傳遞函數(shù)的作用是將體數(shù)據(jù)映射為不透明度和顏色值等光學(xué)屬性,最終將這些屬性合成到屏幕像素點中.不透明度傳遞函數(shù)根據(jù)體素的分類對每一類體素賦予不同的不透明度值.三維數(shù)據(jù)場中體素最終的可見程度取決于傳遞函數(shù)分配的不透明度值.為了突出數(shù)據(jù)場中重要的組織,傳遞函數(shù)給它們分配較高的不透明度值,而對其它區(qū)域分配較低的不透明度值.對于顏色映射,由于體素的顏色值是人為賦予的,因而最終的三維圖像呈現(xiàn)出的顏色是偽彩色.
在VTK中通過類vtkPieceWiseFunction定義分段線性映射函數(shù),由方法AddPoint()和AddSegment()添加數(shù)值點,實現(xiàn)不透明度傳遞函數(shù)的設(shè)置,利用分段線性差值進行曲線逼近來實現(xiàn)復(fù)雜傳遞函數(shù)的設(shè)計.圖3所示為采用分段線性插值的不透明度傳遞函數(shù).
圖3 不透明度傳遞函數(shù)
顏色傳遞函數(shù)主要是確定各種體素的顏色值,在VTK中通過類vtkColorTransferFunction來完成這個功能,由方法AddRGBPoint()實現(xiàn)顏色點的添加.
在確定了傳遞函數(shù)之后,接下來要將其載入到體屬性中,并設(shè)置光照模型的參數(shù).在VTK中通過類vtkVolumeProperty實現(xiàn)這個功能.方法SetColor()和SetScalarOpacity()分別載入前面設(shè)置的顏色和不透明度屬性,SetInterpolationTypeToLinear()設(shè)置差值方式為線性差值,SetShade()應(yīng)用或取消光照模型,SetAmbient()設(shè)置環(huán)境光參數(shù),SetDiffuse()設(shè)置漫反射參數(shù),SetSpecular()設(shè)置鏡面反射參數(shù),SetSpecularPower()設(shè)置鏡面反射指數(shù).
體繪制算法包括有光線投射法、足跡法、錯切-變形法等[10,11].本文采用較為常用的光線投射法.光線投射算法根據(jù)視覺成像原理,從屏幕上的每一像素點出發(fā),根據(jù)設(shè)定的視點方向,發(fā)出一條射線,這條射線穿過三維數(shù)據(jù)場的體素矩陣,沿這條射線選擇k個等距采樣點,由距離某一采樣點最近的8個體素的顏色值及不透明度值做三次線性插值,求出采樣點的顏色值及不透明度值.在求出該條射線上所有采樣點的顏色值及不透明度值以后,可以采用由后到前或由前到后的兩種不同的方法將每一采樣點的顏色及不透明度進行組合,從而計算出屏幕上該像素點處的顏色值.
在VTK中通過類vtkVolumeRayCastFunction定義光線投射函數(shù).類vtkVolumeRayCastMapper的方法SetVolumeRayCastFunction()載入體繪制光線投射函數(shù),SetGradientEstimator()進行梯度估算.類vtkVolume的方法SetMapper()設(shè)置光線投射映射對象,SetProperty()設(shè)置體屬性對象.
在配置為Celeron2.0Ghz CPU,1.0G內(nèi)存的微機上,VC++6.0開發(fā)平臺下,用VTK5.2視線里基于體繪制光線投射法的三維可視化,結(jié)果如圖4所示.
圖4 基于光線投射法三維可視化結(jié)果
在VTK中創(chuàng)建一個繪制對象后,由類vtkRenderWindow的方法AddRenderer()將繪制對象加入繪制窗口,然后通過類vtkRenderWindow()將窗口對象加入交互器,SetDesiredUpdateRate()設(shè)置動態(tài)更新速率,Initialize()進行交互初始化,Start()使得交互開始.
圖5 三維空間長度測量
首先建立三維空間坐標(biāo)系.在VTK中應(yīng)用類vtkCubeAxesActor2D實現(xiàn)坐標(biāo)系的添加,由方法SetBounds()設(shè)置坐標(biāo)系的邊界,SetCamera()設(shè)置相機鏡頭,GetProperty()→SetColor()設(shè)置坐標(biāo)值顏色,SetNumberOfLabels()設(shè)置坐標(biāo)軸上的標(biāo)注個數(shù).在此基礎(chǔ)上,還可以為坐標(biāo)空間添加網(wǎng)絡(luò),以增強顯示效果.
完成三維空間坐標(biāo)系的建立之后,接下來就是進行三維空間長度的測量.設(shè)三維空間點p1的坐標(biāo)為(x1,y1,z1),點p2的坐標(biāo)為(x2,y2,z2),則應(yīng)用式(5)計算出所要測量的顯微組織長度.
程序運行結(jié)果如圖5所示,在空間中選取兩點p1和p2,并顯示計算所得兩點距離l.
通過提供三維結(jié)構(gòu)直觀的圖形信息,有助于發(fā)現(xiàn)陶瓷材料性能和其顯微結(jié)構(gòu)之間的關(guān)系,彌補了傳統(tǒng)方法通過二維截面圖像來研究顯微結(jié)構(gòu)的不足.下一步工作的重點是在三維空間長度測量的基礎(chǔ)上,選取適當(dāng)?shù)哪P凸浪泔@微組織的體積,進而計算出單位體積內(nèi)的顆粒體積分數(shù)等重要參數(shù).
[1] A.Tewari,A.M.Gokhale.Application of three-dimensional digital image processing for reconstruction of microstructural volume from serial sections[J].Materials Characterization,2000,44(5):259-269.
[2] A.Tewari,A.M.Gokhale.Estimation of three-dimensional grain size distribution from microstructural serial sections[J].Mater Charact,2001,46(12):329-335.
[3] K.Thompson,K.Willson,W.L.Zhang.Quantitative computer reconstruction of particulate materials from microtomography images[J].Powder Technology,2006,163(2):169-182.
[4] S.Ghosh,Y.Bhandari,M.Groeber.CAD-based reconstruction of 3D polycrystalline alloy microstructures from FIB generated serial sections[J].Computer-Aider Design,2008,40(7):293-310.
[5] J.F.Lu,Z.G.Pan,H.Lin.Birtual learning environment for medical education based on VRML and VTK[J].Computers & Graphics,2005,29(7):283-288.
[6] P.Dias,J.Madera,B.santos.Teaching 3D modeling and visualization using VTK[J].Computers & Graphics,2008,32(11):363-370.
[7] J.Kajiya,B.Herzen.Ray tracing volume densities[A].in Proc.of SIGGRAPH,ACM Press,1984:165-174.
[8] N.Max.Optical models for direct volume rendering[J].IEEE Transactions on Visualization and Computer Graphics,1995,9(3):99-108.
[9] H.Kye,B.S.Shin,Y.G.Shin.Interactive classification for pri-integrated volume rendering of high-precision volume data[J].Graphical Models,2008,70(1):125-132.
[10] P.Sabella.A rendering algorithm for visualizing 3D scalar fields[J].Computer Graphics,1988,22(4):51-58.
[11] X.Mao.Splatting of non-rectilinear volumes through stochastic resampling[J].IEEE Transactions on Visualization and Computer Graphics,1996,2(2):156-170.