在ParaView中增加实现MPR/MIP功能的filter

本文由Markdown编辑器编辑完成。

1. 前言:

已知在ParaView5.0的Filters列表中暂且还没有实现MPR/MIP功能的filter。为了扩展ParaView的filter,需要用户自己创建相应的Plugins,然后再通过Plugins的管理器将创建的reader,filter等不同类型的plugin增加到ParaView中来。

由于ParaView底层是基于VTK实现的,因此如果扩展ParaView的功能,实际上是将VTK的某些功能暴露给ParaView,以便ParaView能够调用VTK的底层类库进行相应的数据处理和三维呈现。

2. VTK中实现MPR/MIP的类简介

经过对VTK Examples的测试可以知道,VTK中MPR和MIP的功能是基于vtkImageSlabReslice这个类实现的。vtkImageSlabReslice继承于vtkImageReslice。

决定MPR/MIP最终效果的主要参数包括:
(1)BlendMode——光线投射模式,它有三个枚举值,分别为MIP, minIP, aveIP,表示最大密度投影,最小密度投影和平均密度投影;

(2)SlabThickness——slab的厚度,表示在这个厚度内进行体数据的投影。如果是MPR,则slabThickness=0;如果是MIP/minIP/aveIP,则slabThickness>0;

(3)ResliceAxes——切割体数据的平面和中心点构成的4x4矩阵,这个矩阵的前3列表示切割体数据的坐标系,第1和2列表示切割后平面的x和y轴的方向向量,第3列是由第1列和第2列叉乘后的向量,也即切割平面的法向量,第4列是切割平面经过的中心点坐标;

(4)ResliceAxesOrigin——表示切割体数据的坐标系的原点坐标。
除了以上提到的这四个参数,还存在一些参数,如切割后平面的Spacing,Origin,Extent,Slab的分辨率等。

由于这个类的继承关系为:
vtkImageAlgorithm—vtkThreadedImageAlgorithm—vtkImageReslice—vtkImageSlabReslice。
因此,vtkImageSlabReslice应该作为新创建的filter的基类。这里取新创建的filter名称为slabReslice。

了解了以上的基础知识后,以下是创建slabReslice的filter,并且将它添加到ParaView中实现MPR/MIP功能的基本步骤。

3.基本步骤:

3.1 编译ParaView5.0的源代码

通过阅读ParaView关于创建Plugin的官方文档可知,用户如果需要创建新的plugin时,首先需要编译ParaView的源代码。关于编译ParaView源代码的方法,在之前的文档《ParaView实现MIP的功能》中已经进行了详细说明,这里不再赘述。

3.2 增加创建filter需要的工程文件到ParaView5.0的源码中

为了不影响源码的结构,这里将新创建filter的文件存放在目录:ParaView-v5.0-source/Examples/Plugins下。在这个目录中创建一个文件夹SlabResliceFilter,文件夹内创建需要的文件:SlabResliceFilter.xml, vtkSlabResliceFilter.h, vtkSlabResliceFilter.cxx, CMakeLists.txt。

Xml文件主要定义filter与外部的接口,以及在ParaView的GUI中要呈现的可以设置的属性;C文件则是filter的实现文件,主要定义该filter所具有的功能;CMake文件定义工程的构建方式以及编译出的链接(Windows系统为dll文件, Linux系统为so文件)的名称和版本。

3.3 将创建的filter添加到ParaView GUI的filters列表中

当新创建的slabReslice的相关文件都编辑完毕后,则需要用CMake重新构建添加slabReslice工程后的ParaView的源代码。构建工程完毕后,将该工程文件导入Eclipse(已经添加CDT插件)中,进行编译。编译完成后,可以看到在ParaView-v5.0-build/lib文件夹内出现了新创建的filter的链接文件——libSMSlabReslice.so文件(Linux系统下)。

这时在ParaView-v5.0-build/bin文件夹下,打开paraview的可执行程序。在菜单栏选择Tools->Manage Plugins…,可以看到Plugin Manager的对话框。在右侧的Local Plugins页面中,点击下方的Load New …按钮,在ParaView-v5.0-build/lib找到编译出的libSMSlabReslice.so文件,点击OK,则完成了将新创建的filter类型的Plugin添加到ParaView的GUI中。此时,点击菜单栏的Filters选项,已经可以看到新添加的名称为slabReslice的filter了。(这个filter的名称是在SlabResliceFilter.xml文件中定义的,label=”SlabReslice”.)

图1. ParaView Plugin管理对话框
图1. ParaView Plugin管理对话框

3.4 应用filter处理体数据

将slabReslice的filter添加到ParaView中后,用户便可以根据自己选择或输入的参数,进行不同厚度和方向的MPR/MIP了。

下图是在GUI上可以进行修改的属性值的栏目。
图2. slabReslice的属性设置界面
图2. slabReslice的属性设置界面

在这个属性设置栏中,可以设置filter的BlendMode,SlabThickness, ResliceAxesOrigin, ReslicePlane的两个方向向量(法向量是由这两个向量归一化后的叉乘得到的)。
以下是针对测试的体数据,进行不同参数组合下的效果图:

图3. 测试数据的体绘制效果图
图3. 测试数据的体绘制效果图

3.4.1 默认设置:

BlendMode=MIP;
SlabThickness=10;
ResliceAxesOrigin=(107.5,79,107.5),体数据的中心位置;
ReslicePlane=(1,0,0,0,0,1),默认为切割出冠状位。

图4. 保持默认设置的效果图
图4. 保持默认设置的效果图

3.4.2. 修改BlendMode为minIP/aveIP,sliceThickness=100,其它值保持默认值。

图5. minIP效果图
图5. minIP效果图

图6. MIP效果图
图6. MIP效果图

图7. aveIP效果图
图7. aveIP效果图

3.4.3 修改SlabThickness为0,其它值保持默认值,此时为冠状位MPR图。

图8. slabThickness=0时的冠状位MPR效果图
图8. slabThickness=0时的冠状位MPR效果图

3.4.4. 修改ResliceAxesOrigin,其它值保持默认值。

ResliceAxesOrigin=(107.5,30,107.5),修改原点坐标在y轴的分量。
图9. 修改resliceAxes原点坐标的y分量后的MIP效果图
图9. 修改resliceAxes原点坐标的y分量后的冠状位MIP效果图

ResliceAxesOrigin=(107.5, 79, 160),轴状位,修改原点坐标在z轴的分量。
图10. 修改resliceAxes原点坐标的y分量后的轴状位MIP效果图
图10. 修改resliceAxes原点坐标的y分量后的轴状位MIP效果图

3.4.5. 修改ReslicePlane的值,其它值保持默认值。

ReslicePlane=(1,0,0,0,1,0), 轴状位的MIP效果图
图11. 修改reslicePlane,切出轴状位的MIP效果图
图11. 修改reslicePlane,切出轴状位的MIP效果图

ReslicePlane=(0,1,0,0,0,1), 矢状位的MIP效果图。
图12. 修改reslicePlane,切出矢状位的MIP效果图
图12. 修改reslicePlane,切出矢状位的MIP效果图

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

inter_peng

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值