好久没写关于VTK的博客了。最近一直在做这个任意切割体绘制的功能,类似3D slicer的剪刀功能。
开始搜集了一些关于此类问题的论文,例如
以及知乎上一篇关于vtk体绘制分割的动画讲解vtk体切割动画,这种方法很容易理解,我也实现了一下,可以实现功能,但是这种方法有个问题,对于像素来说,一个一个来比较的话,需要花费大量的时间,以512512512的图像来说,至少需要30S的时间,这对于实时性来说无疑是不满足要求的,为了解决这个问题,可以尝试用GPU并行计算来处理,每一个核心数来处理一张图片,但是对于我来说使用起来太麻烦。以前没有接触过。只能换思路了。
另一种方法是生成一个掩码图像,用掩码图像来覆盖原图像,从而使原图像感兴趣的区域变成0,这种方法,比上一种方法速度快,数据量越大,效果越明显。由于我是用c#来写的所以我写了个小程序来验证,下面是实验效果图。
采用vtkFixedPointVolumeRayCastMapper来进行体绘制,通过鼠标移动,在屏幕坐标系下记录鼠标的移动轨迹,从而可以显示出来。然后在这个轨迹下可以生成掩码图像来进行处理。
如果是使用GPU加速的话,理论上应该更快,现在之所以有个2秒左右的延迟是因为要重新渲染一下。
相关文章: