VTK虚拟切片提取

来源:互联网 发布:新网互联域名过户费用 编辑:程序博客网 时间:2024/05/17 01:34

    计算机系统:Win8.1( 64 bit )

    VTK版本:6.2.0

1 说明    

    关于三维数据的重切主要通过vtkImageReslice实现(实例:ImageSlicing),而更加方便的是通过vtkImagePlaneWidget类来实现( 实例:FourPaneViewer,或者TestImagePlaneWidget.py )。在例子ImageSlicing中,实现的是对体数数据整体切割,而在例FourPaneViewer中,可以实现对对体数据的局部切割。实例FourPaneViewer比较复杂,参考资料[5]中简单说明了vtkImagePlaneWidget的用法。在实际过程中,发现快捷键无效,根据参考资料[6]的说明可知,这是VTK本身的bug,因此为了避免使用快捷键,要自行设计button。

2 2D坐标-->3D坐标

    使用上述方法获得切片后,切片的坐标是2D的,如何将其转换为对应的3D坐标呢?这是一个问题。从2D坐标到3D坐标的转换,其实是从一个坐标系到另外一个坐标系的转换(《坐标系转换》)。

    vtkImagePlaneWidget函数GetResliceAxes()可以获得一个转换矩阵(vtkMatrix4x4),根据《坐标系转换》第3章的公式,将虚拟切片的2D坐标拓展到4D,其第3维和第4维分为别为0和1,然后使用转换矩阵乘以这拓展后的坐标,即可得到一个新的4D坐标(齐次坐标)。这个新的4D坐标的最前3维就是虚拟切片的2D坐标所对应的3D坐标。

    具体实现代码如下:

double in[4], *out;in[0] = 274;% 将2D坐标(274,363)拓展为(274,363,0,1)in[1] = 363;in[2] = 0;in[3] = 1;vtkMatrix4x4 *mat = imagePlaneWidget->GetReslice()->GetResliceAxes(); % 获取转换矩阵out = mat->MultiplyDoublePoint(in);% out中的前3个元素即是对应的3D坐标

参考资料

[1]VTK学习笔记-2-TIFF图像数据的重切片

[2]基于VTK的任意平面切割

[3]VTK复习笔记——切割(一)——切割模型

[4]VTK鼠标交互三例

[5] 胡战利. 基于VTK的医学图像三维重建及交互研究. 哈尔滨工业大学. 2008年1月

[6]KeyPressActivation for vtkImagePlaneWidget not working

[7]显示DICOM序列文件的实例

0 0
原创粉丝点击