1、VTK-Widgets 在医学图像交互测量中的研究作者:戴振晖 1,张煜 1,江贵平 1,陈国跃【摘要】 VTK-Widgets是虚拟场景中响应用户事件的对象。介绍Widget的事件处理机制,并基于 Widgets交互式得测量医学图像中感兴趣对象间的距离、对象的角度和面积,此交互测量方法成功应用于三维可视化系统中,有助于医生诊断疾病。 【关键词】 Visualization toolkit(VTK);Widget;测量;医学图像;函数;坐标1 引 言通过 CT或者 MRI获得的医学图像是临床诊断治疗的重要依据,为了从医学图像中获得更多有用的信息,需要对医学图像进行各种变换、测量和标注。对医学图
2、像施加变换的前后需要测量图像内组织的长度、角度和面积,同时对病灶中心等关键区域进行文字标注,以便辅助医生诊断疾病,于是测量工具便成为所有医学图像处理软件中不可缺少的一部分。VTK 是 Kitware公司开发的集计算机图形、图像处理和可视化于一体的工具开发包,利用 VTK可以进行各种测量。2 Widget 的事件处理机制Widget 可以定义为几何学和控制显示对象信息行为的封装,它允许用户直接操作三维数据场中的数据。在 VTK中的 Widget是由 2D的鼠标按键和移动事件控制的,它接收交互器激活的 VTK事件并产生相应的行为。Widgets 的功能分两步实现,一部分继承于 vtkAbstrac
3、tWidget类,用于事件处理,另一部分继承于 vtkWidgetRepresentation类,用于几何特征的描述1。如图 1所示,vtkWidgetRepresentation 是 vtkProp的子类,这说明它就像 VTK中的 Actor一样可以加到 vtkRenderer中,并在场景中显示出来,它与 vtkAbstractWidget的某个合适的子类结合产生一个 3D Widget。VTK 的事件处理系统能够让观察者区分事件的优先顺序,通过他们优先权的设置来跟踪注册顺序,于是使用者可以同时操作多个Widget2。本文中介绍的 Widget均基于 Kitware公司 2009年 6月发布
4、的最新的 5.4.2开发包。3 距离测量在 VTK中具有距离测量功能的类有vtkLineWidget、vtkLineWidget2、vtkDistanceWidget,其中vtkDistanceWidget类是 Kitware公司在 5.4开发包里新添加的专门进行距离测量的工具,使用它可以快速完成对组织的测量工作。3.1 二维切片的距离测量通过多平面显示工具可以从三维 CT图像数据场中获取二维的组织切片,使用 vtkLineWidget对二维切片中的组织进行距离测量,该类本身不具备测量功能,但我们可以借助其内部工具来完成测量。生 物 医 学 工 程 研 究 第 29卷第 1期 戴振晖,等:VT
5、K -Widgets在医学图像交互测量中的研究 vtkLineWidget 定义了一个交互放置在三维场景内的线段,当对二维切片进行距离测量时,把线段交互式的放置在需要测量的组织切片上,设线段的两个端点分别为 p1和p2,p1 的坐标为(x1,y1,z1)p2 的坐标为(x2,y2,z2),利用两点间的距离公式计算 p1和 p2之间的距离。通过 vtkLineWidget得到两个端点坐标,利用距离公式求得距离值为 length,最后通过 vtkTextActor类将结果显示在屏幕上。如图 2所示,使用此方法测量胸部切片内的气管直径为 25.7152 mm。图 2 气管直径测量结果Fig 2 Me
6、asurement result of tracheal diameter3.2 三维器官的距离测量当用户在计算机屏幕上用鼠标点击后,系统根据屏幕坐标点拾取到用户所需要的三维物体上的点,将其转化为世界坐标系下的坐标值,拾取两个特征点后,通过计算输出用户所需要的测量数据。本文使用vtkDistanceWidget类对重建后的三维器官进行长度测量。vtkDistanceWidget 是 vtkAbstractWidget的子类,用户可以独立的放置刻度尺的两个端点,当两个端点被释放时,有一个专门的PlacePointEvent被激活以便有专门的操作来重置点的位置,要使用这个类需要确定一个 vtkDi
7、stanceWidget实例和一个 Representation。它响应下列 VTK事件:鼠标左键按下,鼠标拖动,鼠标左键释放,这些 VTK事件通过 vtkWidgetEventTranslator 类转换成 vtkDistanceWidget的 widget事件:增加点,移动,结束选择3。在 VTK的三维场景中一般存在两种模型,一种是用于对三维物体操作的 Widget 模型,另一种是在场景中显示的 data模型。但本身处于三维场景中的 widget 模型是无法自行触动消息响应函数对 data 模型进行控制,要想达到此目的,需要在它和 data 模型中间设置一个桥梁,该桥梁就是通过 comma
8、nd模式实现的回调函数。同时在外部存在一个Observer 模块对 data 模型进行观察,随时反映 data 模型的状态4。交互代码:vtkDistanceRepresentation2D *Distance;double pos13, pos23;Distance-GetPoint1WorldPosition(pos1);Distance-GetPoint2WorldPosition(pos2);double dist=sqrt(vtkMath:Distance2BetweenPoints(pos1,pos2);通过 vtkDistanceRepresentation2D获得刻度尺两个端点
9、在世界坐标系内的坐标,使用距离计算函数: sqrt(Distance2BetweenPoints()得到被测物体的长度值 dist,最后通过 vtkDistanceRepresentation2D的SetTitle() 函数将计算结果显示在屏幕上。如图 3所示,使用传统的光线投射算法对头骨进行三维重建5-6,测量的眼眶宽度为 74.4 mm。4 角度测量4.1 二维切片的角度测量通过多平面显示工具可以从三维 CT图像数据场中获取二维的组织切片,使用 vtkAngleWidget对二维切片中的组织进行角度测量。vtkAngleWidget 用来测量共端点的两条射线间的夹角,两条射线是由三个点(一
10、个中心点,两个端点)确定的,三个点的位置可以独立的设置,当其被释放时,有一个专门的 PlacePointEvent被激活以便有专门的操作来重置点的位置,要使用这个类需要确定一个 vtkAngleWidget实例和一个 Representation(vtkAngleRepresentation 的一个子类)。交互代码:vtkAngleRepresentation2D *Rep;double point13, center3,point23;Rep-GetPoint1WorldPosition(point1);Rep-GetCenterWorldPosition(center);Rep-GetPo
11、int2WorldPosition(point2);通过 vtkAngleRepresentation2D获得三个特征点在世界坐标系内的坐标并自动计算出两条射线的夹角。如图 4所示,测量的椎骨切片的角度为 88.3。图 4 椎骨角度测量结果Fig 4 Measurement result of vertebraes angle4.2 三维器官的角度测量在制作三维模型时,经常需要测量某个部位的角度,使用vtkAngleWidget可以对立体模型的角度进行测量。三维角度测量与二维角度测量的工作机制相同,唯一的不同在于:三维角度测量使用 vtkAngleRepresentation3D 作为 vtk
12、AngleWidget的 Representation。通过 vtkAngleRepresentation3D获得三个特征点在世界坐标系内的坐标并计算出两条射线的夹角。如图 5所示,测量牙齿模型中牙根的角度为42.2。图 5 牙根角度测量结果Fig 5 Measurement result of fangs angle5 面积测量肿瘤体积的测量是临床诊断和放射治疗的重要指标,为了更加准确地评估治疗效果,对包含肿瘤的切片进行处理,计算从断层切片中分割出的肿瘤区域的面积,用此面积乘以扫描的层距以代表每一层的体积,通过累加得到肿瘤的体积7,所以,切片的面积测量对于体积的测量是有重要意义的。VTK 并
13、未提供专门测量面积的工具,我们可以用vtkContourWidget 分割出肿瘤区域,采用多边形近似法计算肿瘤切片的面积。本研究以气管的轴位切片为例计算面积,即切片位于 XOY平面上,见图 6,求 n边形面积,把 n边形的每条边的两个端点分别与坐标原点 O连接,构成 n个以 O为顶点的三角形8。设三维空间内一个三角形三个顶点的坐标分别为:A0(x0,y0,z0),Ai(xi,yi,z0),Ai+1(xi+1,yi+1,z0),z0表示三角形位于 z=z0平面上,利用三角形面积公式求每个三角形的面积。三角形面积公式:Si=(x0yi-x0yi+1-xiy0+xiyi+1+xi+1y0-xi+1y
14、i)*0.5(1)设多边形的顶点分别为 A1,A2.An 那么多边形的面积为:S=n-1i=1S(OAiAi+1)+S(OAnA1)(2)S(OAiAi+1)表示以 O为顶点的三角形面积,当三个顶点顺时针排列时面积值为负,逆时针排列时面积值为正,三角形面积值的正负分别表示此三角形使多边形面积增加还是减小。因为每个三角形都有一个顶点为坐标原点 O(0,0),那么三角形的面积为:S(OAiAi+1)=0.5(xiyi+1-xi+1yi)(3)多边形面积为:图 6 多边形划分为多个三角形的图解Fig 6 Schema of polygon divided into several triangle利
15、用 vtkContourWidget实现以上算法,vtkContourWidget 是 vtkAbstractWidget的子类,用来选择一系列点,并在这些点之间画线。利用 vtkContourWidget画轮廓线时,为了画出一个闭合的区域,取点原则是最后一个结点与第一个结点重合。 交互代码:vtkOrientedGlyphContourRepresentation*ContourRep;intn=ContourRep1 - GetNumberOfNodes();double pos03;double pos13;double pos23;ContourRep1-GetNthNodeWorld
16、Position(0,pos0);ContourRep1-GetNthNodeWorldPosition (i,pos1);n 为轮廓线上结点的个数,由于第一个结点和最后一个结点重合,所以,形成的多边形有 n-1个结点,可以划分成 n-1个三角形。通过函数 GetNthNodeWorldPosition(0,pos0)获得第一个结点的坐标pos0,pos1 为第 i+1个结点的坐标,如此可以获取多边形每一个顶点 的坐标。利用式(4)可以求得轮廓线内部区域的面积。如图 7所示,测量的是气管的轴位切片的面积为:520.8603 mm2。6 结论所有测量功能均依靠鼠标在图像上点击和拖动完成,对于测量
17、系统而言,精度是一个重要的参数,本文中的测量方法与两个因素密切相关,一是比例尺的确定,另一个就是测量步骤中标记线段的准确性。要提高整个系统的测量精度,可以通过提高图像的扫描分辨率,放大图像以及多次测量求平均值的方法来实现。【参考文献】1Schroeder W J,Andy Cedilnik. Kitwares software developers quarterlyM. New York: Kitware ,2007:3-4.2Arjan J. F. KokRobert van Liere.A multimodal virtual reality interfacefor 3D intera
18、ction with VTKJ.Knowledge and Information Systems,2007.201-212.3Schroeder W,Martin K,Lorensen B. The visualization toolKit an object-oriented approach to 3D graphics M.3th ed.New Jersey: Prentice- Hall,2002:241-243.4袁杲, 叶峰,杨玲,谢明元.基于 VTK 的医学图像交互式三维测量技术研究J.计算机工程与设计,2008,29(13).5Schroeder W J. The VTK
19、users guideUpdated for version 4.0 M. New York: Kitware, 2001:1920,48-52.6唐泽圣.三维数据场可视化M.北京:清华大学出版社,1999:15-78.7Mayr N A, Taoka T.Method and timing of tumor volume measurement for outcome prediction in cervical cancer using magnetic resonance imagingJ. Int J. Radiat. Oncol Biol Phys, 2002, 52(1):14-22.8数学手册编写组.数学手册M.北京:高等教育出版社,1979:331-332.