戴虹
(上海第二工業(yè)大學(xué)電子與電氣工程學(xué)院,上海201209)
基于VTK的足部骨骼三維可視化研究
戴虹
(上海第二工業(yè)大學(xué)電子與電氣工程學(xué)院,上海201209)
基于CT圖像序列利用VTK(Visualization Toolkit,可視化工具箱)實(shí)現(xiàn)了人體足部骨骼的三維表面重建。采用最大熵閾值算法進(jìn)行足部骨骼圖像分割,將該閾值作為骨骼等值面抽取值;在VC++中利用VTK編程實(shí)現(xiàn)了基于移動(dòng)立方體法的足部骨骼表面重建,并對所得三維表面進(jìn)行了優(yōu)化;將所得結(jié)果存為三維模型常用的STL文件格式。實(shí)驗(yàn)結(jié)果表明,此方法獲得了理想的可視化效果,可在足部疾病診斷和治療、手術(shù)仿真等方面發(fā)揮重要作用。
VTK;足部骨骼;三維可視化;面繪制;最大熵閾值算法
圖像的三維可視化技術(shù)是指利用圖像的二維投影恢復(fù)物體的三維信息,目前廣泛應(yīng)用于醫(yī)學(xué)和工程領(lǐng)域。在臨床醫(yī)學(xué)上利用可視化技術(shù),將一系列二維斷層圖像,如CT與MRI(磁共振)圖像序列重建成三維模型,醫(yī)生根據(jù)模型準(zhǔn)確地獲得病變組織的位置、大小和體積等信息,并進(jìn)行手術(shù)仿真,可提高手術(shù)的成功率[1]。目前常用VC++軟件進(jìn)行醫(yī)學(xué)圖像編程工作,但其復(fù)雜度較高,開發(fā)周期長且三維顯示速度較慢。在使用通用三維圖形接口OpenGL (Open Graphics Library,開放的圖形接口)后,三維繪制的速度和質(zhì)量有了較大提高,但編程困難問題并沒有根本解決。美國Kitware公司于1998年推出的VTK(Visualization Toolkit,可視化工具箱),是一種基于OpenGL的用于三維圖形學(xué)、圖像處理及三維可視化的開發(fā)包[2],可用簡單代碼實(shí)現(xiàn)圖像的三維重建。
本文首先基于最大熵閾值法求得足部CT圖像中骨骼的分割閾值,將其作為等值面抽取值,再利用VTK編程實(shí)現(xiàn)足部骨骼的三維表面重建。實(shí)驗(yàn)結(jié)果表明,本文提出的方法獲得了較為理想的重建結(jié)果。
在對足部骨骼進(jìn)行三維表面繪制之前須求得骨骼等值面抽取值,也就是足部骨骼圖像的分割閾值,大于該閾值的圖像像素被認(rèn)定為骨骼。由于憑經(jīng)驗(yàn)手動(dòng)設(shè)置閾值準(zhǔn)確率不高且效率低下,所以采用一種自動(dòng)的最大熵閾值分割算法:由信息論的定義,熵是平均信息量的表征,根據(jù)最大熵原則,用灰度的一維熵求取閾值即選取一個(gè)閾值T,把圖像分成背景和目標(biāo)兩類區(qū)域,使圖像用這個(gè)閾值分割出的兩部分的一維熵最大,可實(shí)現(xiàn)背景和目標(biāo)的最佳分類[3]。
該算法的步驟如下:設(shè)一幅足部圖像f的灰度級為0~255,灰度級為i的像素個(gè)數(shù)為ni,總像素個(gè)數(shù)為N,則各灰度級出現(xiàn)的概率(即歸一化直方圖)為設(shè)分割骨骼與其他組織的閾值為T,則獲得目標(biāo)A和背景B兩類,它們的概率分布分別為則A和 B的熵分別為:
令總的信息熵為:S(T)=SA+SB,則最佳閾值Tk是使S(T)為最大值時(shí)的閾值T,即:
2.1 基于移動(dòng)立方體法的足部骨骼三維表面重建
表面重建也稱為“面繪制”,其基本思想是:確定物體表面在每個(gè)體素內(nèi)的小面片,然后將這些面片(通常為三角片)連接起來構(gòu)成物體表面。移動(dòng)立方體(Marching Cubes)法是經(jīng)典的表面重建方法之一,它根據(jù)物體表面特征信息抽取每個(gè)體素的等值面,從而構(gòu)成物體的三維表面[4]。與直接由三維數(shù)據(jù)場產(chǎn)生屏幕上二維圖像“體繪制”方法相比,移動(dòng)立方體面繪制法的優(yōu)點(diǎn)是:①繪制時(shí)可以用硬件加速;②占有內(nèi)存少;③改變視角,光線等只需要重新繪制即可,不需要再次重建;④可以壓縮存儲和傳輸;⑤以圖元對象順序繪制,看不到的就不用繪制;⑥空間位置明確,繪制效率高。等值面抽取步驟如下:
(1)數(shù)據(jù)處理順序。將足部CT圖像序列(共145幅)按順序疊加成一個(gè)三維體數(shù)據(jù)集,每次讀出2張切片圖像,形成一層,則共144層。2張切片上下相對應(yīng)的4個(gè)點(diǎn)構(gòu)成一個(gè)立方體,根據(jù)從左至右,從前到后的順序處理讀取并處理第1層中的立方體(即抽取每個(gè)立方體中的等值面),然后從上到下處理其余的143層?!暗戎得妗睂?shí)際上是指空間中的一張曲面f(x,y,z),在該曲面上f等于某一給定值。即
式中,Tk為等值面抽取值,即分割骨骼時(shí)的閾值。
(2)每個(gè)立方體的等值面抽取。每個(gè)立方體8個(gè)頂點(diǎn)的灰度值可直接從輸入數(shù)據(jù)中得到。如果一個(gè)頂點(diǎn)的灰度值大于域值,則將它標(biāo)記為黑色,小于域值的頂點(diǎn)不標(biāo)記。顯然,在標(biāo)記的頂點(diǎn)和不標(biāo)記的頂點(diǎn)之間必然存在等于域值的點(diǎn),即等值點(diǎn)。取這兩個(gè)頂點(diǎn)的中點(diǎn)為等值點(diǎn),即
式中:Q為等值點(diǎn)坐標(biāo);Q1和Q2分別為標(biāo)記的頂點(diǎn)和不標(biāo)記的頂點(diǎn)的坐標(biāo)。再將這些等值點(diǎn)連接起來即構(gòu)成等值面,形狀是三角片。
2.2 VTK足部骨骼繪制過程與程序代碼
VTK采用的是管道模型(Pipeline)機(jī)制,根據(jù)圖像數(shù)據(jù)類型及所要得到的顯示結(jié)果選擇算法并構(gòu)建可視化流程,在醫(yī)學(xué)圖像與三維重建方面正發(fā)揮著重要的作用[5]。本文基于Marching Cubes面繪制算法,在VC++6.0環(huán)境下采用VTK類庫實(shí)現(xiàn)足部骨骼的三維重建。其管道模型如圖1所示。
圖1 基于Marching Cube算法的足部骨骼面繪制管道模型Fig.1 The surface rendering pipeline model of the foot bones based on Marching Cube Algorithm
根據(jù)上述管道模型,基于VTK編程實(shí)現(xiàn)足部骨骼的三維可視化。步驟與程序代碼(省略了應(yīng)包含的頭文件)如下:
(1)建立一個(gè)vtkDICOMImageReader[6]對象,讀取存儲在D盤“zubu”目錄下的dicom格式(一種通用的醫(yī)學(xué)圖像文件格式)足部CT序列圖像,共145幅。
void main()
{vtkDICOMImageReader*v16=
vtkDICOMImageReader::New();
v16->SetDataByteOrderToLittleEndian();//設(shè)置為小端字節(jié)序
v16->SetDirectoryName(“D://zubu”);//設(shè)置圖像目錄
v16->SetDataSpacing(1,1,1);//設(shè)置圖像間隔
(2)采用vtkImageShrink3D對圖像數(shù)據(jù)按比例削減,以減少數(shù)據(jù)量,提高繪制速度。
vtkImageShrink3D*v17=vtkImageShrink3D:: New();
v17->SetInput((vtkDataObject*)v16->GetOutput());
v17->SetShrinkFactors(2,2,1);//對圖像數(shù)據(jù)按2:2:1比例削減
(3)建立一個(gè)MarchingCubes對象,并設(shè)定足部骨骼等值面抽取值。
vtkMarchingCubes*skinExtractor=
vtkMarchingCubes::New();
skinExtractor->SetInputConnection(v17->
GetOutputPort());
skinExtractor->SetValue(0,123.5);//等值面抽取值Tk=123.5
(4)利用vtkPolyDataNormals產(chǎn)生等值面上的法線,以使繪制過程中的表面光滑著色。
vtkPolyDataNormals*skinNormals=
vtkPolyDataNormals::New();
skinNormals->SetInputConnection(skinExtractor ->GetOutputPort());
skinNormals->SetFeatureAngle(60.0);
(5)利用vtkSmoothPolyDataFilter實(shí)現(xiàn)重建數(shù)據(jù)的平滑處理[7];利用vtkSTLWriter將骨骼表面模型存為STL格式文件。
vtkSmoothPolyDataFilter*smoother=
vtkSmoothPolyDataFilter::New();
smoother->SetInputConnection(skinExtractor->GetOutputPort());
smoother->SetNumberOfIterations(50);
vtkSTLWriter*writer=vtkSTLWriter::New(); writer->SetInputConnection(smoother->
GetOutputPort());
writer->SetFileName(“zubu.stl”);
writer->W(wǎng)rite();//設(shè)STL文件名稱為“zubu.stl”
(6)由vtkPolyDataMapper類將圖像數(shù)據(jù)映射為可被計(jì)算機(jī)繪制的圖元;由vtkActor類創(chuàng)建一個(gè)代表足部骨骼的“角色”,設(shè)置其顏色,并與一個(gè)映射器關(guān)聯(lián)。
vtkPolyDataMapper*skinMapper=
vtkPolyDataMapper::New();
skinMapper->SetInputConnection(smoother->GetOutputPort());
skinMapper->ScalarVisibilityOff();
vtkActor*skin=vtkActor::New();
skin->SetMapper(skinMapper);skin->
GetProperty()->SetColor(0,1,0);
(7)利用vtkRenderer創(chuàng)建一個(gè)繪制器,添加被繪制的“角色”,并用vtkRenderWindow在繪制窗口中顯示,最后通過vtkRenderWindowInteractor實(shí)現(xiàn)繪制結(jié)果與用戶的交互。
vtkRenderer*aRenderer=vtkRenderer::New();
aRenderer->AddActor(skin);
aRenderer->SetBackground(1,1,1);//設(shè)置背景顏色為白色
vtkRenderWindow*renWin=vtkRenderWindow:: New();
renWin->AddRenderer(aRenderer);
renWin->SetSize(640,480);//設(shè)置繪制窗口大小為640*480
vtkRenderWindowInteractor*iren=
vtkRenderWindowInteractor::New();
iren->SetRenderWindow(renWin);}
實(shí)驗(yàn)數(shù)據(jù)是一位女性右足的CT序列圖像,圖像尺寸為512像素×512像素,共145幅,為dicom格式。首先利用Matlab軟件編程,實(shí)現(xiàn)最大熵閾值法足部骨骼分割,以第43幅圖像為例(圖2(a)),分割步驟:①計(jì)算總熵S(T);②令T=1,2,···,255,每次循環(huán)算出此時(shí)的S(T),找出使S(T)最大時(shí)的Tk值。本例Tk=123.5,分割結(jié)果如圖2(b)所示,可見該算法正確地提取了足部骨骼。
圖2 基于最大熵閾值法的足部骨骼分割圖像Fig.2 The segmented image of foot bones based on Maximum Entropy Threshold Algorithm
將Tk=123.5作為足部骨骼等值面抽取值,在VC++中利用VTK進(jìn)行足部骨骼表面重建,結(jié)果如圖3所示??梢娀贛arching Cubes的面繪制算法具有較好的重建效果;拖動(dòng)鼠標(biāo)左鍵還可將該三維模型進(jìn)行旋轉(zhuǎn),實(shí)現(xiàn)了用戶交互。在編程過程中包含了以下優(yōu)化:①對原始圖像數(shù)據(jù)按比例削減,使足部骨骼表面的三角片個(gè)數(shù)從868 230片降為313 140片,繪制時(shí)間從25.80 s降低至4.84 s,提高了程序運(yùn)行速度;②對重建表面進(jìn)行了平滑處理,從而使結(jié)果更為逼真。此外,將結(jié)果存為可被SolidWorks、UG等常用三維建模軟件讀取的STL文件,實(shí)現(xiàn)了繪制結(jié)果的跨平臺使用。
圖3 基于VTK的足部骨骼三維可視化結(jié)果Fig.3 Three dimensional visualization of foot bones base on VTK
提出一種基于VTK的足部骨骼三維可視化方法:①采用最大熵閾值法獲得足部骨骼等值面抽取值;②采用移動(dòng)立方體法,基于VTK編程實(shí)現(xiàn)足部骨骼的三維表面重建。實(shí)驗(yàn)結(jié)果表明,該方法取得了較為理想的重建結(jié)果,編程簡單且運(yùn)行速度很快,適用于任何醫(yī)學(xué)CT圖像序列的三維重建,普遍性較強(qiáng)。該算法可用于足部疾病診斷和治療以及手術(shù)仿真,也可推廣至對人體所有器官組織進(jìn)行的三維可視化工作。
[1]戴虹,楊云峰.基于Matlab距骨快速圖像分割與動(dòng)畫生成的算法[J].中國組織工程研究與臨床康復(fù).2010, 26(4):4764-4769.
[2]周振環(huán),伍云智,趙明.醫(yī)學(xué)圖像編程技術(shù)[M].北京:電子工業(yè)出版社,2010.
[3]姜興乾,李星野,賈淑華.基于最大熵與小波變換的圖像邊緣檢測算法[J].微電子學(xué)與計(jì)算機(jī),2009,26(3): 189-191.
[4]田捷,包尚聯(lián),周明全.醫(yī)學(xué)影像處理與分析[M].北京:電子工業(yè)出版社,2003.
[5]顧耀林,袁江琛.空間相關(guān)MC算法的VTK實(shí)現(xiàn)[J].計(jì)算機(jī)工程與設(shè)計(jì).2007,28(13):3160-3162.
[6]VITAMIN.用vtkDicomReader讀取圖像序列[EB/OL].(2011-03-04)[2014-02-15].http://swyxgc.blog. 163.com/blog/static/4567575320112442644904/.
[7]劉志遠(yuǎn),鄭永果.基于VTK的醫(yī)學(xué)圖像三維重建[J].信息技術(shù)與信息化,2009(1):59-61.
Three Dimensional Visualization of Foot Bones Based on Visualization Toolkit
DAI Hong
(School of Electronic and Electric Engineering,Shanghai Second Polytechnic University, Shanghai 201209,P.R.China)
The three dimensional reconstruction of foot bones based on CT image sequences using VTK(Visualization Toolkit)is proposed.(1)ThefootbonesimagesaresegmentedbyMaximumEntropyThresholdAlgorithmandthethresholdisusedasanisosurface extraction value of bones.(2)The surface rendering of foot bones based on Marching Cubes Algorithm is realized by VTK programmed with VC++,and the three dimensional surfaces of bones are optimized and stored in STL,and a general 3D model fle format.The result of experiment shows that this method obtained desired effect of visualization,and it can play an important role in the diagnosis and treatment for foot diseases and the operation simulation of foot.
VTK;foot bones;three dimensional visualization;surface rendering;Maximum Entropy Threshold Algorithm
TP391.4
A
1001-4543(2014)03-0211-04
2014-03-02
戴虹(1977–),女,上海人,副教授,博士,主要研究方向?yàn)樾盘柵c信息處理、醫(yī)學(xué)圖像處理。電子郵箱daihong@sspu.edu.cn。
上海第二工業(yè)大學(xué)校級重點(diǎn)學(xué)科(通信與信息系統(tǒng))第四期建設(shè)項(xiàng)目(No.XXKZD1302)資助
上海第二工業(yè)大學(xué)學(xué)報(bào)2014年3期