信息技术与信息化 图像处理
2008年第 5期 115
利用 VTK实现 D ICOM医学图像三维重建
3D Reconstruction of D ICOM M edical Images Based on VTK
王树秀 3 雷 声 3 3 常发亮 3
WANG Shu - x iu L EI Sheng CHANG Fa - liang
摘 要 利用医学可视化技术可以将二维断层序列图像重建为三维虚拟实体 ,基于这个模型可以精确地获取病
变区的大小、位置和形状 ,极大地提高了诊断的直观性与交互性。VTK是目前国际上通用的科学计算可
视化工具包 , D ICOM文件为医学图像的专用传输和存储格式。在 V isual C + + 6. 0平台下 ,本文借助
VTK类库 ,采用体绘制方法实现了 D ICOM医学序列图像的三维重建 ,并给出了程序运行结果。
关键词 三维重建 D ICOM VTK 体绘制
3 山东大学控制科学与工程学院 济南 2500623 3 浙江大学 生物医学工程与仪器科学学院 杭州 310027
基金项目 :国家自然科学基金 ( No. 60775023 ) ;山东省自然科学
基金 (No. Z2005G03 )。
D ICOM ( digital image and communication on medicine)文件格
式为目前国际通用的医学影像专用的传输和存储格式 ,在 PACS
系统中得到了广泛的应用。D ICOM 图像三维重建是指将二维
D ICOM序列医学图像通过特定的重建算法重建为三维虚拟实体 ,
可以较为准确的获得病变区的大小、位置、形状等三维信息 ,为进
一步的病情诊断、虚拟手术等提供了更为丰富直观的信息和交互
手段 ,极大地方便了医生的诊断治疗。
医学图像三维重建方法可以分为面绘制 ( Surface Rendering
)和体绘制 ( Volume Rendering )两大类。面绘制算法中具有代表
性的是 MC (Marching Cubes)算法 ,它通过对一系列的二维图像进
行边界识别等分割原理 ,将感兴趣的部分以等值面的方式抽取出
来 ,从而为用户提供较具真实感的三维图像。这种方法的优点是
重建速度较快 ,内存资源需求较小 ,缺点是易丢失纹理细节。体
绘制算法主要包括光线投影算法 ( Ray Casting) , 脚印法 ( Sp lat2
ting ) ,剪切变形法 ( Shear - - W arp ) ,其中 Ray Casting算法是体
绘制中的经典算法 ,它是从投影平面的每一个像素点发射出一条
光线 ,穿过三维体数据场 ,并计算光的传输方程 ,得到最后的图
像 [ 1 ]。这种方法的缺点是内存需求大 ,绘制速度较慢 ,但是它保
存了整体细节 ,绘制效果较好 ,可以很方便地实现一些插值算法。
本文采用 Ray Casting算法作为三维重建方法 ,同时由于传递
函数的设置对体绘制结果有很大影响 ,详细介绍了传递函数的设
置 ,并给出了关键代码。
1 基于 VTK的 D ICOM图像三维重建
1. 1 VTK简介
VTK( The V isualization Toolkit)是美国 Kitware公司推出的一
个开放源码的自由软件系统 ,可以应用于图像处理、计算机图形
学和科学计算可视化 ,最新版本为 5. 0. 4。VTK完全采用面向对
象的设计思想来设计与开发 ,支持 W indows, Unix与 L inux等多种
平台 ,支持 C, C + + , Java, Tcl/Tk以及 Python等编程语言 [ 4 ]。
VTK将众多常用的图形操作、图像处理算法封装成不同的类 ,非
常易于理解和调用。与此同时 VTK具有很好的流 ( stream ing)和
高速缓存 ( catching)能力 ,这些都使得 VTK成为医学图像可视化
开发的一个较好的选择。
1. 2 VTK读取 D ICOM医学图像
现有的 VTK封装了可以直接读取 D ICOM 图像的 C + +类
vtkD ICOM ImageReader,极大地简化了使用 VTK工具包读取 D I2
COM医学图像的过程。以下为读取 D ICOM序列图像的代码 :
vtkD ICOM ImageReader 3 reader = vtkD ICOM ImageReader: :
New ( ) ;
reader - > SetDataByteO rderToL ittleEndian ( ) ;
reader - > SetD irectoryName ( filedirectory) ; / / filedirectory为存
放图像的路径
reader - >Update ( ) ;
1. 3 三维重建的实现
本文采用光线跟踪算法 (Ray Casting)作为体绘制的基本算
法。基于 VTK类库的体绘制管道模型如图 1所示。
vtk ImageShiftScale和 vtk ImageCast主要用于数据类型的转换。
在图像处理管道中 , vtk ImageCast主要是转换输入数据类型以匹
配输出数据类型 ,由函数 SetOutputScalarType来实现。在 vtk Im2
ageShiftScale,输入图像被移动和缩放 ,主要由以下两个函数实现 :
virtual void SetShift ( double) 和 virtual void SetScale ( double) ,转换
后的像素值 = (原像素值 +平移值 ) ×伸缩值。与此同时 ,这个类
也可以通过函数 SetOutputScalarType转换数据类型。本文采用
vtk ImageShiftScale进行数据转换。
在体绘制中传递函数将体数据转换为光学参数 ,因此体绘制
的效果直接由传递函数决定。传递函数主要有三类 :不透明度传
递函数、颜色传递函数和梯度传递函数。不透明度传递函数主要
是确定各体素的不透明度 ,由 vtkPieceW iseFunction来设置 , vtk2
PieceW iseFunction定义了分段函数映射 ,由 AddPoint( )和 AddSeg2
ment( )实现数值点的添加。关于这两个函数的具体参数如下 :
© 1994-2010 China Academic Journal Electronic Publishing House. All rights reserved. http://www.cnki.net
图像处理 信息技术与信息化
116 2008年第 5期
图 1 体绘制管道模型
int AddPoint( double x, double y)
x代表体素的灰度值 , y代表该体素点的透明度 ,其范围为
[ 0, 1 ] , 0代表完全透明 , 1代表完全不透明。
void AddSegment( double x1, double y1, double x2, double y2)
这个函数的功能是添加一条直线段 ,起点坐标 ( x1, y1) ,终点
坐标 ( x2, y2) ,其含义与上述 ( x, y)类似。
针对本文所使用的 D ICOM医学图像 ,不透明度传递函数设
置如下 :
vtkPiecewiseFunction 3 opacityTransferFunction = vtkPiece2
wiseFunction: : New ( ) ;
opacityTransferFunction - >AddPoint(70. 0, 0. 0) ;
opacityTransferFunction - >AddPoint(599. 0, 0) ;
opacityTransferFunction - >AddPoint(600. 0, 0) ;
opacityTransferFunction - >AddPoint(1195. 0, 0) ;
opacityTransferFunction - >AddPoint(1200, . 2) ;
opacityTransferFunction - >AddPoint(1300, . 3) ;
opacityTransferFunction - >AddPoint(2000, . 3) ;
opacityTransferFunction - >AddPoint(4095. 0, 1. 0) ;
颜色传递函数主要是确定体素的颜色值或灰度值 ,由类 vtk2
ColorTransferFunction实现。根据 AddRGBPoint( )设置数值点的颜
色值。函数具体参数如下 :
int AddRGBPoint( double x, double r, double g, double b)
x代表体素点的灰度值 ,含义与上述相同 , r代表红色分量 , g
代表绿色分量 , b代表蓝色分量 ,他们的范围均为 (0, 1)。
本文颜色传递函数设置如下 :
vtkColorTransferFunction 3 colorTransferFunction = vtkColor2
TransferFunction: : New ( ) ;
colorTransferFunction - >AddRGBPoint(0. 0, 0. 5, 0. 0, 0. 0) ;
colorTransferFunction - >AddRGBPoint(600. 0, 1. 0, 0. 5, 0. 5) ;
colorTransferFunction - >AddRGBPoint(1280. 0, 0. 5, 0. 5, 0. 3) ;
colorTransferFunction - >AddRGBPoint(1960. 0, 0. 5, 0. 77, 0. 6) ;
colorTransferFunction - >AddRGBPoint(4095. 0, 0. 5, 0. 9, 0. 9) ;
最后 ,利用 vtkVolumeProperty类设置体属性 ,同时利用 vt2
kVolumeRayCastMapper类建立光线投射映射对象。用 vtkVolume
类建立体对象 ,利用其函数 SetMapper( )设置光线投射映射对象 ,
利用函数 SetProperty ( )设置体的属性。最后通过与 W indows窗
口的绑定 ,完成绘制。
2 重建结果显示
依据上述体绘制模型 ,结合 V isual C + + 6. 0,利用 VTK库进
行了编程试验 ,试验数据为基于 D ICOM
标准
excel标准偏差excel标准偏差函数exl标准差函数国标检验抽样标准表免费下载红头文件格式标准下载
的人体 CT图像。其
中头部图像数据为 512 ×512 ×234,足部图像数据为 512 ×512 ×
350,重建结果如下图所示。
由图 2,图 3可以看出 ,本文采用 Ray Casting方法可以较为精
确的实现医学图像的三维重建 ,并可进行旋转、缩放、移动等交互
操作 ,为进一步观察提供了保证。
3 结束语
VTK是国际上主流的三维可视化工具包。本文在 V isual C +
+ 6. 0环境下 ,借助 VTK类库采用 Ray Casting方法对 D ICOM医
学图像进行了体绘制 ,重建结果较好 ,真实地再现了物体的三维
面貌 ,同时可以交互的进行旋转、平移等操作 ,具有较强的实用
性。但是由于体绘制数据量很大 ,绘制速度较慢 ,如何提高重建
速度是下一步研究的重点。
参考文献 :
[ 1 ] 田捷 ,赵明昌 , 何晖光. 集成化医学影像算法平台理论与实践
[M ]. 第一版 , 北京 : 清华大学出版社 , 2004: 111 - 113.
[ 2 ] http: / /www. vtk. org.
[ 3 ] W illiam J. Schroeder. The VTK U ser’s Guide. New York,
USA: Kitware, Inc. 2001: 1 - 377.
[ 4 ] 郭圣文. 利用 VTK与 ITK的集成实现医学图像可视化
[ J ] , 计算机工程与应用 , 2006, 30: 183 - 184.
[ 5 ] 周芳芳 ,樊晓平 ,叶榛. 基于多尺度等值面设计传递函数
[ J ] , 小型微型计算机系统 , 2007, 28 (1) : 144 - 147.
[作者简介 ] 王树秀 ( 1984~) ,女 ,硕士 ,主研方向 :医学图
像三维重建、医学图像处理 ;雷声 ( 1984~) ,男 ,博士 ,主研方向 :
医学图像处理、生物医学传感器 ;常发亮 ( 1965~ ) ,男 ,教授 ,主
研方向 : 机器视觉与智能控制、医学图像处理。
(收稿日期 : 2008 - 04 - 30)
© 1994-2010 China Academic Journal Electronic Publishing House. All rights reserved. http://www.cnki.net