使用vtk将3D切片转换为2D图像

时间:2013-09-13 08:09:27

标签: python vtk scientific-computing

有没有办法使用vtk从3D坐标和切割平面的关联数据(可能是倾斜的)获取2D图像?

以下是我的代码片段,它读取结构化网格并设置切割平面:

self._reader = vtk.vtkXMLStructuredGridReader()
self._reader.SetFileName(filename)
self._reader.Update()

self._reader.GetOutput().GetPointData().SetActiveScalars("Intensity")

plane = vtk.vtkPlane()
plane.SetOrigin(self._reader.GetOutput().GetCenter())
plane.SetNormal(0, 0, 1)

planeCut = vtk.vtkCutter()
planeCut.SetInput(self._reader.GetOutput())
planeCut.SetCutFunction(plane)

# THIS GIVES THE 3D COORDINATES OF THE POINTS OF THE CUT PLANE
print planeCut.GetOutput().GetPoints()
# THIS GIVES THE DATA ASSOCIATED WITH EACH OF THE POINTS
planeCut.GetOutput().GetPointData().GetAttribute(0)

cutMapper = vtk.vtkPolyDataMapper()
cutMapper.SetInputConnection(planeCut.GetOutputPort())
cutMapper.SetLookupTable(table)
cutMapper.SetScalarRange(0,100)

cutActor = vtk.vtkActor()
cutActor.SetMapper(cutMapper)

self._renderer.AddActor(cutActor)

self._iren.Render()

非常感谢你的帮助

埃里克

1 个答案:

答案 0 :(得分:2)

vtkCutter生成vtkPolyData输出。你想要的是vtkImageReslice。

创建一个vtkImageReslice对象,一个用作参数的vtkTransform,将图像设置为输入并完成。如果要更改切片,请相应地修改转换并更新或渲染。

这样的事情:

reslice = vtkImageReslice()
transform = vtkTransform()
transform.Translate(x,y,z)
transform.Rotate(thetaX, thetaY, thetaZ)
reslice.SetResliceTransform(transform)
reslice.SetInputConnection(blah)
nextAlgorithmOrMapper.SetInputConnection(reslice.GetOutputPort())

注意:在VTK 6.0+中不推荐使用SetInput。对于新代码,请使用first.SetInputConnection(other.GetOutputPort())或first.SetInputData(数据)(如果您已经在6上,否则,第二个表单仍然是first.SetInput(数据),您和# 39; ll必须稍后移植)。 SetInputConnection创建一个算法连接 - 即,如果您在使用者上调用Update(),生产者也将自动更新,依此类推。如果你使用第二种形式,在5.x中它也会创建一个算法连接,但是在6中,它并没有。您必须在每个算法上手动调用Update。

基本上,当您将两个vtkAlgorithms或映射器连接在一起时,请使用SetInputConnection。