我正在根据一系列 dicom 图像创建 3D 模型。我使用的工作流程如下:
- 使用
vtkDICOMImageReader
阅读 dicom 系列。 - 使用
vtkImageThreshold
从卷中获取 Threshold 图像。 - 使用离散行进立方体算法生成 3D 模型。
- 使用
vtkPLYWriter
将输出写入 PLY 文件。
当我使用 meshlab 查看 ply 文件时,它看起来像 this (从后面)。
我面临的问题是,轴/枢轴不在模型的中心。那么有没有办法解决这个问题?我知道我需要使用 vtkTransformfilter
来完成它(我想,我可能是错的),但我只是不知道如何做。
我确实看过他们网站上提供的 vtk 示例,但它没有提供足够的信息来说明我想要什么。我也搜索了SO中的其他问题,但大多数都是使用vtkActors和渲染器,并没有解决我遇到的问题。
我使用的 dicom 集来自 here .
我还想知道是否可以在 Three.js 中执行此操作,例如加载模型然后将其居中?
谢谢
最佳答案
如果可以移动模型,那么可以定义模型的中心,将其变换到全局原点,然后将变换后的模型保存为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文件。
注意:这将使居中模型与图像数据的关联变得更加困难。
关于javascript - 在 python-vtk/three.js 中居中多数据模型的轴/枢轴,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35619907/