有没有办法使用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()
非常感谢你的帮助
埃里克
答案 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。