Использование vtkVolume16Reader без FilePrefix - PullRequest
0 голосов
/ 09 октября 2018

Я пытаюсь визуализировать серию изображений dicom, следуя примеру Medical3.py из официального репозитория VTK.Все примеры, которые я нашел в python, используют класс vtkVolume16Reader , который ожидает определенный шаблон имен файлов <% s>. <% D>.Означает ли это, что нет API для чтения серий изображений с другими шаблонами имен?

В C ++ есть пример ReadDICOMSeries , который не требует определенного шаблона имени файла.Было бы здорово, если бы у Python-оболочки был какой-то аналог.

1 Ответ

0 голосов
/ 10 октября 2018

На основе примера C ++ ReadDICOMSeries я переписал аналог с использованием Observer для перемещения между слайсами (гораздо лучше настроить класс vtkInteractorStyleImage).Вот простой пример, когда вы начинаете с 50-го среза и можете перейти к 60-му, нажав «k», или до 40-го, нажав «l»:

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 При запуске появляются два окна.Пожалуйста, дайте мне знать, как удалить один из них.

...