在python-vtk / three.js中聚合数据模型的轴/枢轴

时间:2016-02-25 06:26:50

标签: javascript python python-2.7 three.js vtk

我正在从一系列dicom图像中创建一个3D模型。我正在使用的工作流程如下:

  • 使用vtkDICOMImageReader阅读dicom系列。
  • 使用vtkImageThreshold从卷中获取阈值图像。
  • 使用离散行进立方体算法生成3D模型。
  • 使用vtkPLYWriter将输出写为PLY文件。

当我使用meshlab查看ply文件时,它看起来像this(来自后面)。

我面临的问题是,轴/枢轴不在模型的中心。那有没有办法解决这个问题?我知道我需要使用vtkTransformfilter来做它(我想,我可能错了),但我不知道怎么做。

我确实看过他们网站上给出的vtk示例,但它没有提供我想要的足够信息。我还搜索了SO中的其他问题,但大多数都使用了vtkActors和渲染器,并没有解决我的问题。

我使用的dicom集来自here

我还想知道是否可以在Three.js中执行此操作,例如加载模型然后居中它?

谢谢

2 个答案:

答案 0 :(得分:3)

如果可以移动模型,则可以定义模型的中心,并将其转换为全局原点,然后将转换后的模型保存为PLY文件。

首先,您要定义模型的中心。快速而肮脏的方式可能是获得质量中心:

centerFilter = vtk.vtkCenterOfMass()
centerFilter.SetInputData(polydata)
centerFilter.SetUseScalarsAsWeights(False)
centerFilter.Update()
center = centerFilter.GetCenter()

然后你想转换你的模型:

transform = vtk.vtkTransform()
transform.Translate(-center[0], -center[1], -center[2])
transformFilter = vtk.vtkTransformPolyDataFilter()
transformFilter.SetInputData(polydata)
transformFilter.SetTransform(transform)
transformFilter.Update()
centeredPolydata = transformFilter.GetOutput()

然后使用centeredPolydata写出输出PLY文件。

注意:这会使居中的模型与图像数据相关联变得更加困难。

答案 1 :(得分:-1)

我可以将vtkCenterOfMass与vtkImageReslice或vtkImageImport一起使用吗?