我正在从一系列dicom图像中创建一个3D模型。我正在使用的工作流程如下:
vtkDICOMImageReader
阅读dicom系列。vtkImageThreshold
从卷中获取阈值图像。vtkPLYWriter
将输出写为PLY文件。当我使用meshlab查看ply文件时,它看起来像this(来自后面)。
我面临的问题是,轴/枢轴不在模型的中心。那有没有办法解决这个问题?我知道我需要使用vtkTransformfilter
来做它(我想,我可能错了),但我不知道怎么做。
我确实看过他们网站上给出的vtk示例,但它没有提供我想要的足够信息。我还搜索了SO中的其他问题,但大多数都使用了vtkActors和渲染器,并没有解决我的问题。
我使用的dicom集来自here。
我还想知道是否可以在Three.js中执行此操作,例如加载模型然后居中它?
谢谢
答案 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一起使用吗?