论文首页哲学论文经济论文法学论文教育论文文学论文历史论文理学论文工学论文医学论文管理论文艺术论文 |
通过多平面显示工具可以从三维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事件通过vtkWidgetEventTrans
瞝ator类转换成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::Distance2BetweenPoin
瞭s(pos1,pos2));