【摘要】 VTK-Widgets是虚拟场景中响应用户事件的对象。介绍Widget的事件处理机制,并基于Widgets交互式得测量医学图像中感兴趣对象间的距离、对象的角度和面积,此交互测量方法成功应用于三维可视化系统中,有助于医生诊断疾病。

【关键词】 Visualization toolkit(VTK);Widget;测量;医学图像;函数;坐标

Research of Medical Image Interactive Measurement based on VTK-WidgetsDAI Zhenhui1, ZHANG Yu1, JIANG Guiping1,CHEN Guoyue2

  (1.Department of Biomedical Engineering, Southern Medical University, Guangzhou 510515, China;

  2.Faculty of Systems Science and Technology ,Akita Prefectural University,Japan,Akita)

  Abstract:VTK-Widgets are objects that respond to user events in a virtual scene. The mechanism of event processing is introduced, the distance between objects of interest, angle and area of objects interested in medical image are measured interactively based on Widgets. The method of interactive measure is applied to the 3D visualization system successfully and valuable for assisted diagnosis.

  Key words:Visualization toolkit(VTK) ; Widget; Measure; Medical image; Function; Coordinate

  1 引 言

  通过CT或者MRI获得的医学图像是临床诊断治疗的重要依据,为了从医学图像中获得更多有用的信息,需要对医学图像进行各种变换、测量和标注。 对医学图像施加变换的前后需要测量图像内组织的长度、角度和面积,同时对病灶中心等关键区域进行文字标注,以便辅助医生诊断疾病,于是测量工具便成为所有 医学图像处理软件中不可缺少的一部分。VTK是Kitware公司开发的集计算机图形、图像处理和可视化于一体的工具开发包,利用VTK可以进行各种测 量。

  2 Widget的事件处理机制

  Widget可以定义为几何学和控制显示对象信息行为的封装,它允许用户直接操作三维数据场中的数据。在VTK中的Widget是由2D的鼠标 按键和移动事件控制的,它接收交互器激活的VTK事件并产生相应的行为。Widgets的功能分两步实现,一部分继承于 vtkAbstractWidget类,用于事件处理,另一部分继承于vtkWidgetRepresentation类,用于几何特征的描述[1]。

  如图1所示,vtkWidgetRepresentation是vtkProp的子类,这说明它就像VTK中的Actor一样可以加到 vtkRenderer中,并在场景中显示出来,它与vtkAbstractWidget的某个合适的子类结合产生一个3D Widget。VTK的事件处理系统能够让观察者区分事件的优先顺序,通过他们优先权的设置来跟踪注册顺序,于是使用者可以同时操作多个 Widget[2]。本文中介绍的Widget均基于Kitware公司2009年6月发布的最新的5.4.2开发包。

  3 距离测量职称论文

  在VTK中具有距离测量功能的类有vtkLineWidget、vtkLineWidget2、vtkDistanceWidget,其中 vtkDistanceWidget类是Kitware公司在5.4开发包里新添加的专门进行距离测量的工具,使用它可以快速完成对组织的测量工作。

  3.1 二维切片的距离测量

通过多平面显示工具可以从三维CT图像数据场中获取二维的组织切片,使用vtkLineWidget对二维切片中的组织进行距离测量,该类本身不具备测量功能,但我们可以借助其内部工具来完成测量。

  生 物 医 学 工 程 研 究 第29卷第1期 戴振晖,等:VTK -Widgets在医学图像交互测量中的研究   vtkLineWidget定义了一个交互放置在三维场景内的线段,当对二维切片进行距离测量时,把线段交互式的放置在需要测量的组织切片上,设线段 的两个端点分别为p1和p2,p1的坐标为(x1,y1,z1)p2的坐标为(x2,y2,z2),利用两点间的距离公式计算p1和p2之间的距离。

  通过vtkLineWidget得到两个端点坐标,利用距离公式求得距离值为length,最后通过vtkTextActor类将结果显示在屏幕上。如图2所示,使用此方法测量胸部切片内的气管直径为25.7152 mm。图2 气管直径测量结果

  Fig 2 Measurement result of tracheal diameter

  3.2 三维器官的距离测量

  当用户在计算机屏幕上用鼠标点击后,系统根据屏幕坐标点拾取到用户所需要的三维物体上的点,将其转化为世界坐标系下的坐标值,拾取两个特征点后,通过计算输出用户所需要的测量数据。本文使用vtkDistanceWidget类对重建后的三维器官进行长度测量。

  vtkDistanceWidget是vtkAbstractWidget的子类,用户可以独立的放置刻度尺的两个端点,当两个端点被释放时, 有一个专门的PlacePointEvent被激活以便有专门的操作来重置点的位置,要使用这个类需要确定一个vtkDistanceWidget实例和 一个Representation。它响应下列VTK事件:鼠标左键按下,鼠标拖动,鼠标左键释放,这些VTK事件通过 vtkWidgetEventTranslator类转换成vtkDistanceWidget的widget事件:增加点,移动,结束选择[3]。

  在VTK的三维场景中一般存在两种模型,一种是用于对三维物体操作的Widget 模型,另一种是在场景中显示的data模型。但本身处于三维场景中的widget 模型是无法自行触动消息响应函数对data 模型进行控制,要想达到此目的,需要在它和data 模型中间设置一个桥梁,该桥梁就是通过command模式实现的回调函数。同时在外部存在一个Observer 模块对data 模型进行观察,随时反映data 模型的状态[4]。

  交互代码:

  vtkDistanceRepresentation2D *Distance;

  double pos1[3], pos2[3];

  Distance->GetPoint1WorldPosition(pos1);

  Distance->GetPoint2WorldPosition(pos2);

  double dist=sqrt(vtkMath::Distance2BetweenPoints(pos1,pos2));

通过vtkDistanceRepresentation2D获得刻度尺两个端点在世界坐标系内的坐标,使用距离计算函数: sqrt(Distance2BetweenPoints())得到被测物体的长度值dist,最后通过 vtkDistanceRepresentation2D的SetTitle()函数将计算结果显示在屏幕上。如图3所示,使用传统的光线投射算法对头骨进行三维重建[5-6],测量的眼眶宽度为74.4 mm。

  4 角度测量

  4.1 二维切片的角度测量

  通过多平面显示工具可以从三维CT图像数据场中获取二维的组织切片,使用vtkAngleWidget对二维切片中的组织进行角度测量。

  vtkAngleWidget用来测量共端点的两条射线间的夹角,两条射线是由三个点(一个中心点,两个端点)确定的,三个点的位置可以独立的 设置,当其被释放时,有一个专门的PlacePointEvent被激活以便有专门的操作来重置点的位置,要使用这个类需要确定一个 vtkAngleWidget实例和一个Representation(vtk AngleRepresentation的一个子类)。

  交互代码:

  vtkAngleRepresentation2D *Rep;

  double point1[3], center[3],point2[3];

  Rep->GetPoint1WorldPosition(point1);

  Rep->GetCenterWorldPosition(center);

  Rep->GetPoint2WorldPosition(point2);

  通过vtkAngleRepresentation2D获得三个特征点在世界坐标系内的坐标并自动计算出两条射线的夹角。如图4所示,测量的椎骨切片的角度为88.3°。图4 椎骨角度测量结果

  Fig 4 Measurement result of vertebrae’s angle

  4.2 三维器官的角度测量

  在制作三维模型时,经常需要测量某个部位的角度,使用vtkAngleWidget可以对立体模型的角度进行测量。

  三维角度测量与二维角度测量的工作机制相同,唯一的不同在于:三维角度测量使用vtkAngleRepresentation3D作为vtkAngleWidget的Representation。通过 vtkAngleRepresentation3D获得三个特征点在世界坐标系内的坐标并计算出两条射线的夹角。如图5所示,测量牙齿模型中牙根的角度为 42.2°。

  图5 牙根角度测量结果

  Fig 5 Measurement result of fang’s angle

5 面积测量

  肿瘤体积的测量是临床诊断和放射治疗的重要指标,为了更加准确地评估治疗效果,对包含肿瘤的切片进行处理,计算从断层切片中分割出的肿瘤区域的 面积,用此面积乘以扫描的层距以代表每一层的体积,通过累加得到肿瘤的体积[7],所以,切片的面积测量对于体积的测量是有重要意义的。VTK并未提供专 门测量面积的工具,我们可以用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+1yi)*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

  利用vtkContourWidget实现以上算法,vtkContourWidget是vtkAbstractWidget的子类,用来选择一系列点,并在这些点之间画线。利用vtkContourWidget画轮廓线时,为了画出一个闭合的区域,取点原则是最后一个结点与第一个结点重合。   交互代码:

  vtkOrientedGlyphContourRepresentation*ContourRep;

  intn=

  ContourRep1 -> GetNumberOfNodes();

  double pos0[3];

  double pos1[3];

  double pos2[3];

  ContourRep1->

  GetNthNodeWorldPosition(0,pos0);

  ContourRep1->

  GetNthNodeWorldPosition (i,pos1);

  n为轮廓线上结点的个数,由于第一个结点和最后一个结点重合,所以,形成的多边形有n-1个结点,可以划分成n-1个三角形。通过函数 GetNthNodeWorldPosition(0,pos0)获得第一个结点的坐标pos0,pos1为第i+1个结点的坐标,如此可以获取多边形每 一个顶点 的坐标。利用式(4)可以求得轮廓线内部区域的面积。如图7所示,测量的是气管的轴位切片的面积为:520.8603 mm2。

  6 结论

  所有测量功能均依靠鼠标在图像上点击和拖动完成,对于测量系统而言,精度是一个重要的参数,本文中的测量方法与两个因素密切相关,一是比例尺的 确定,另一个就是测量步骤中标记线段的准确性。要提高整个系统的测量精度,可以通过提高图像的扫描分辨率,放大图像以及多次测量求平均值的方法来实现。

【参考文献】
 [1]Schroeder W J,Andy Cedilnik. Kitware’s software developer’s quarterly[M]. New York: Kitware ,2007:3-4.

  [2]Arjan J. F. Kok·Robert van Liere.A multimodal virtual reality interfacefor 3D interaction with VTK[J].Knowledge and Information Systems,2007.201-212.

  [3]Schroeder 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).

  [5]Schroeder W J. The VTK user's guideUpdated for version 4.0 [M]. New York: Kitware, 2001:19~20,48-52.

  [6]唐泽圣.三维数据场可视化[M].北京:清华大学出版社,1999:15-78.

  [7]Mayr N A, Taoka T.Method and timing of tumor volume measurement for outcome prediction in cervical cancer using magnetic resonance imaging[J]. Int J. Radiat. Oncol Biol Phys, 2002, 52(1):14-22.

  [8]数学手册编写组.数学手册[M].北京:高等教育出版社,1979:331-332.

VTK-Widgets在医学图像交互测量中的研究相关推荐

  1. eps倾斜摄影矢量化采集毕业设计_倾斜摄影在农房一体不动产测量中的技术流程(Smart3D+EPS)...

    摘要:低空摄影测量技术随着小型无人机技术和计算机影像识别技术的日趋成熟,在外业测绘工作中正被广泛应用.特别是在农房一体不动产权籍测量中,传统测量方法由于作业效率低.成本高,测量实施困难,已难以满足社会 ...

  2. 移动应用交互设计中合理使用动态

    一个优秀的交互师可以轻松地解释每一个动作逻辑背后的设计概念,包括信息框架,页面内容的继承,每一个点击动作对于页面跳转的影响等. 不久的将来,动效将被广泛的引入到原型的概念设计当中,然而随之带来的是交互 ...

  3. 交互搜索中的自然语言理解技术

    交互搜索 交互搜索是一种新的产品形态,可以和用户对话,记住用户的购物需求和偏好,提供购物知识和建议.在搜索页面下拉就可以进入了,类似于微信的小程序的进入方式. 自然语言理解 对话和搜索的最大区别就是对 ...

  4. 交互式电子杂志_交互环境中电子杂志的生存发展探析

    [摘要]自1995年3月我国第一份电子杂志--<电子信息与通讯网络杂志>在上海面世以来,我国的电子杂志已经发展了15年.在此期间,电子杂志经历了三代形态变化,即邮件列表形态.传统杂志数字化 ...

  5. 论文浅尝 - WWW2020 | 通过对抗学习从用户—项目交互数据中挖掘隐含的实体偏好来用于知识图谱补全任务...

    笔记整理 | 陈湘楠,浙江大学在读硕士. 现有的知识图谱补全方法都在试图设计全新的学习算法,来使用已知的事实信息去推理知识图谱中的潜在语义.但随着知识图谱的广泛使用,知识图谱中的许多实体对应着应用程序 ...

  6. axure 图片切换图片的交互_AxureRP8中实现伸缩式的图片展示交互效果

    上午的时候,在一个群里看到这样的实现需求. 伸伸缩缩,感觉很爽的样子. 那么,这样的一个交互效果如何实现呢? 详细的教程我就不写了,直接上交互截图和源文件就好了. 好多操作步骤是吧? 实际上,只需要在 ...

  7. 测绘计算机编程在在道路中的应用,CASIO系列编程计算器在公路测量中的应用.doc...

    CASIO系列编程计算器在公路测量中的应用 关于CASIO系列可编程计算器在公路施工测量中的应用 2008-03-04 17:54 分类:测绘 字号: 大大? 中中? 小小 ???????? 前言:传 ...

  8. 摄影测量中的什么是光流场_摄影中的“停止”是什么?

    摄影测量中的什么是光流场 "Stop" is a photography term that gets thrown around a lot. Someone will desc ...

  9. 《3D ISP核心技术算法》系列(1)——ToF测量中的多径现象与消除方法

    <3D ISP核心技术算法>系列文章是上海数迹智能科技有限公司结合自身多年来在3D ISP技术方向上的积累,推出的系列型科普文章.系列文章将对影响3D成像质量的主要问题逐一进行讲解,深入浅 ...

最新文章

  1. 案例分析 陆金所_平安陆金所介绍-关于陆金所-平安陆金所
  2. SpringtMVC中配置 mvc:annotation-driven/ 与 mvc:default-servlet-handler/ 的作用
  3. 使用mint-ui开发项目的一些所得
  4. ubuntu 12.04下apache 配置家目录地址
  5. iOS 远程通知(Remote Notification)和本地通知(Local Notification)
  6. android jni 结构体_Android——- jni返回结构体-Fun言
  7. The Last Non-zero Digit POJ - 1150(n!mod p)
  8. mysql数据库(9):常用查询的例子
  9. OCR文本检测-RRPN
  10. activity销毁时执行执行方法是_[Android开发 VIII ]销毁一个activity
  11. 玩奇迹私服老是服务器维护,为什么奇迹私服进不去啊
  12. 44. 将样式表放在顶部(5)
  13. SpringBoot项目实战,附源码
  14. redis实现队列的几种方式(LPUSH/BRPOP,发布/订阅模式,stream)
  15. flutter shared_preferences 异步变同步
  16. html控制台 打印 consol,浏览器console.log()打印输出台不显示输出内容……
  17. pandas中merge函数的用法
  18. 140种Python标准库、第三方库和外部工具
  19. 万有引力品牌战略全新升级,正式更名库奈光年
  20. 飞控简析-从入门到跑路 第二章PX4的位置控制(1)

热门文章

  1. 提升C++程序运行速度的一些方法
  2. 新概念 Lesson 5 How are you today
  3. 面试官:你期望薪资是多少?能多让你拿几千工资的回答你一定要看
  4. 音频处理库—librosa的安装与使用
  5. win10 体验 日志
  6. 小米/红米手机安装charles证书
  7. 南大通用GBase8s 常用SQL语句(124)
  8. Card Trick
  9. 读 Thinking in Java 笔记(1)
  10. c++ 11 thead