将三维切片转换为二维图像

2024-09-30 01:30:16 发布

您现在位置:Python中文网/ 问答频道 /正文

有没有一种方法使用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()

非常感谢你的帮助

埃里克


Tags: ofthe方法selfthispointsreadervtk
1条回答
网友
1楼 · 发布于 2024-09-30 01:30:16

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

创建一个vtkimagerslice对象,一个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())

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

基本上,在连接两个vtKalgorithm或映射器时使用SetInputConnection。在

相关问题 更多 >

    热门问题