在 python-vtk/three.js 中将多数据模型的 axis/pivot 居中

centering the axis/pivot of a polydata model in python-vtk/three.js

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

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

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

我确实看过他们网站上提供的 vtk 示例,但它没有提供足够的信息来说明我想要什么。 SO里的其他问题我也搜了,大部分都是用vtkActors和renderer,并没有解决我遇到的问题

我使用的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文件。

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

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