介紹如何在 Python 中使用 VTK 函式庫讀取 DICOM 影像。
vtkDICOMImageReader
讀取單一檔案 DICOM 影像
若要以 VTK 讀取單一檔案的 DICOM 影像,可以使用 vtkDICOMImageReader
並指定檔案位置即可:
import vtk # 建立 vtkDICOMImageReader dicomReader = vtk.vtkDICOMImageReader() # 指定 DICOM 檔案 dicomReader.SetFileName("myfile.dcm") # 讀取 DICOM 影像 dicomReader.Update() # 取得 DICOM 影像 img = dicomReader.GetOutput() # 顯示影像資訊 print("Scalar Type:", img.GetScalarTypeAsString()) print("Origin:", img.GetOrigin()) print("Extend:", img.GetExtent()) print("Spacing:", img.GetSpacing())
vtkDICOMImageReader
讀取 DICOM 影像序列
vtkDICOMImageReader
亦可用於讀取 DICOM 影像序列,只要指定 DICOM 序列檔案的所在目錄即可:
import vtk # 建立 vtkDICOMImageReader dicomReader = vtk.vtkDICOMImageReader() # 指定 DICOM 檔案所在目錄 dicomReader.SetDirectoryName("/my/dicom/folder") # 讀取 DICOM 影像 dicomReader.Update() # 取得 DICOM 影像 img = dicomReader.GetOutput() # 顯示影像資訊 print("Scalar Type:", img.GetScalarTypeAsString()) print("Origin:", img.GetOrigin()) print("Extend:", img.GetExtent()) print("Spacing:", img.GetSpacing())
vtkDICOMImageReader
在讀取 DICOM 影像序列時,如果該目錄中包含多組影像序列(包含多個 Series Instance UID),則 vtkDICOMImageReader
就只會依據第一個找到的 Series Instance UID 來讀取 DICOM 影像序列,其餘的 DICOM 影像則不會被讀取到,所以在使用 vtkDICOMImageReader
讀取 DICOM 影像序列時,必須先確認同一個目錄中僅包含同一個 Series Instance UID 的 DICOM 影像,避免遺漏部分的影像。
標準的 VTK 函式庫所提供的 DICOM 影像讀取功能非常有限,若需要讀取較複雜的 DICOM 影像,可以參考 vtk-dicom,或是改用 SimpleITK 或 Pydicom 來讀取 DICOM,再透過 NumPy 與 VTK 的轉換,將影像轉換為 VTK 格式。
參考資料:discourse.vtk.org