首页 > 解决方案 > 使用不带 FilePrefix 的 vtkVolume16Reader

问题描述

我正在尝试按照来自官方 VTK存储库的示例 Medical3.py可视化一系列 dicom 图像。我在 python 中找到的所有示例都使用类vtkVolume16Reader,它需要定义的文件名模式 <%s>.<%d>。这是否意味着没有用于读取具有其他名称模式的图像系列的 API?

在 C++ 中有不需要特定文件名模式的示例 ReadDICOMSeries 。如果 Python 包装器有一些类似的东西,那就太好了。

标签: pythonvtkdicom

解决方案


基于 C++ ReadDICOMSeries 示例,我使用 Observer 在切片之间移动重写了类比(自定义 vtkInteractorStyleImage 类要好得多)。这是一个简单的示例,您从第 50 个切片开始,可以通过按“k”移动到第 60 个或按“l”移动到第 40 个:

import sys
import numpy as np
import vtk


PathDicomDir = "/path/to/dicom/dir"
reader = vtk.vtkDICOMImageReader()
reader.SetDirectoryName(PathDicomDir)
reader.Update()

viewer = vtk.vtkImageViewer2()
viewer.SetInputData(reader.GetOutput())
viewer.SetSlice(50)

def Keypress(obj, event):
    key = obj.GetKeySym()
    if key == "e":
        obj.InvokeEvent("DeleteAllObjects")
        sys.exit()
    elif key == "k":
        viewer.SetSlice(60)
        print("next")
    elif key == "l":
        print("prev")
        viewer.SetSlice(40)

iren = vtk.vtkRenderWindowInteractor()
iren.AddObserver("KeyPressEvent", Keypress)

viewer.SetupInteractor(iren)

viewer.Render()
viewer.GetRenderer().ResetCamera()
viewer.Render()
iren.Start()

PS 运行时出现两个窗口。请让我知道如何删除其中之一。


推荐阅读