python - 使用不带 FilePrefix 的 vtkVolume16Reader
问题描述
我正在尝试按照来自官方 VTK存储库的示例 Medical3.py可视化一系列 dicom 图像。我在 python 中找到的所有示例都使用类vtkVolume16Reader,它需要定义的文件名模式 <%s>.<%d>。这是否意味着没有用于读取具有其他名称模式的图像系列的 API?
在 C++ 中有不需要特定文件名模式的示例 ReadDICOMSeries 。如果 Python 包装器有一些类似的东西,那就太好了。
解决方案
基于 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 运行时出现两个窗口。请让我知道如何删除其中之一。
推荐阅读
- php - move_uploaded_file 返回 true 但不执行 if 语句
- javascript - 如何将身份验证详细信息传递给 iframe 内的应用程序?
- vim - vim - 如何查询终端缓冲区的密码?
- python - 如何在 Visual Studio 代码的 Python 扩展中选择子文件夹作为包含测试的目录
- json - 如何在 Ionic 4 中显示 JSON 数据中的特定行
- reactjs - 无法访问 jest.mock 函数中的变量
- liquibase - HANA 数据库上的 HDI 容器的板载租户失败
- python - 使用正则表达式排除匹配
- dns - 我可以在 DNS 中添加两条 TXT 记录吗
- r - 在 Shiny R 中,有没有办法在没有延迟的情况下立即运行 observeEvent(renderUI 问题)?