使用VTK可视化3D U-Net的CT分割结果

本文介绍如何使用VTK库对训练好的3D U-Net网络的CT分割结果进行三维可视化。

代码实现pythonimport vtkimport numpy as np

加载分割结果数据,维度为(X, Y, Z),代表体素的标签值segmentation = np.load('segmentation.npy')

创建vtkImageData对象dims = segmentation.shapeimageData = vtk.vtkImageData()imageData.SetDimensions(dims[0], dims[1], dims[2])imageData.SetSpacing(1, 1, 1) # 假设体素间距为1imageData.SetOrigin(0, 0, 0)imageData.AllocateScalars(vtk.VTK_UNSIGNED_CHAR, 1)

将分割结果数据复制到vtkImageData对象中scalars = imageData.GetPointData().GetScalars()scalarsArray = vtk.util.numpy_support.numpy_to_vtk(segmentation.flatten(), deep=True)scalars.DeepCopy(scalarsArray)

创建vtkMarchingCubes对象marchingCubes = vtk.vtkMarchingCubes()marchingCubes.SetInputData(imageData)marchingCubes.SetValue(0, 0.5) # 设置等值面的阈值,这里假设标签值为0或1marchingCubes.Update()

创建vtkPolyDataMapper对象mapper = vtk.vtkPolyDataMapper()mapper.SetInputConnection(marchingCubes.GetOutputPort())

创建vtkActor对象actor = vtk.vtkActor()actor.SetMapper(mapper)

创建vtkRenderer对象renderer = vtk.vtkRenderer()renderer.AddActor(actor)

创建vtkRenderWindow对象renderWindow = vtk.vtkRenderWindow()renderWindow.AddRenderer(renderer)renderWindow.SetSize(800, 800) # 设置渲染窗口的大小

创建vtkRenderWindowInteractor对象interactor = vtk.vtkRenderWindowInteractor()interactor.SetRenderWindow(renderWindow)

启动交互式窗口渲染interactor.Initialize()interactor.Start()

输入数据说明

  • segmentation.npy: 3D U-Net网络的分割结果数据,格式为numpy数组,维度为(X, Y, Z),代表体素的标签值。例如,0表示背景,1表示目标。

总结

上述代码演示了如何使用VTK库将3D U-Net网络的CT分割结果进行三维可视化。您可以根据自己的需要修改代码,例如调整等值面的阈值、修改渲染窗口的大小等。

使用VTK可视化3D U-Net的CT分割结果

原文地址: https://www.cveoy.top/t/topic/lath 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录