Python

Python SimpleITK 影像處理教學:讀取 DICOM 影像後設資料 Metadata

介紹如何在 Python 中使用 SimpleITK 讀取 DICOM 影像的後設資料(metadata)。

許多的醫學影像(例如 X 光、斷層掃描、各種顯微鏡影像等)都會以 DICOM 的格式儲存,而附帶的實驗相關資訊也都會儲存在 DICOM 標準的 Tags 中,以下介紹如何從 DICOM 檔案中取出這些資訊。

讀取 DICOM 後設資料

若要讀取 DICOM 的後設資料,最簡單的作法就是使用 ReadImage 將 DICOM 的內容讀取出來之後,再從 SimpleITK 影像物件中取出需要後設資料:

import SimpleITK as sitk

# 讀取 DICOM 影像
image = sitk.ReadImage("demo.dcm")

# 列出所有的 DICOM Tags
print(image.GetMetaDataKeys())

# 病人姓名(Patient's Name)Tag
tag = '0010|0010'

# 判斷指定的 DICOM Tag 是否存在
if(image.HasMetaDataKey(tag)):
    # 讀取指定的 DICOM Tag 值
    print(image.GetMetaData(tag))

只讀取 DICOM 後設資料(不讀取影像)

對於比較大型的 DICOM 影像,若我們要只需要後設資料,不需要看實際的影像資料,就可以改用 ImageFileReaderReadImageInformation 只讀取後設資料,可讓讀取速度加快許多:

import SimpleITK as sitk

# 建立 DICOM 的 Reader
file_reader = sitk.ImageFileReader()
file_reader.SetImageIO("GDCMImageIO")
file_reader.SetFileName("demo.dcm")

# 讀取 DICOM 檔案的後設資料(不讀取影像資料)
file_reader.ReadImageInformation()

# 列出所有的 DICOM Tags
print(file_reader.GetMetaDataKeys())

# 病人姓名(Patient's Name)Tag
tag = '0010|0010'

# 判斷指定的 DICOM Tag 是否存在
if(file_reader.HasMetaDataKey(tag)):
    # 讀取指定的 DICOM Tag 值
    print(file_reader.GetMetaData(tag))

DICOM 序列檔案

若要讀取 DICOM 序列檔案中的後設資料,可以使用 ImageSeriesReader 讀取 DICOM 影像之後,再取出後設資料:

import SimpleITK as sitk

# 取得 DICOM 序列檔案列表
data_directory = 'MR_BRAIN/1.3.12.2.1107.5.2.30.25049.30000007071111324087500000017/1.3.12.2.1107.5.2.30.25049.30000007071110510826500012297'
series_IDs = sitk.ImageSeriesReader.GetGDCMSeriesIDs(data_directory)
series_file_names = sitk.ImageSeriesReader.GetGDCMSeriesFileNames(data_directory, series_IDs[0])

# 建立 DICOM 的 Reader
reader = sitk.ImageSeriesReader()
reader.SetFileNames(series_file_names)

# 設定讀取後設資料
reader.MetaDataDictionaryArrayUpdateOn()
reader.LoadPrivateTagsOn()

# 讀取 DICOM 序列檔案
image = reader.Execute()

# 只看第一張 slice
slice_num = 0

# 列出所有的 DICOM Tags
print(reader.GetMetaDataKeys(slice_num))

# 病人姓名(Patient's Name)Tag
tag = '0010|0010'

# 判斷指定的 DICOM Tag 是否存在
if(reader.HasMetaDataKey(slice_num, tag)):
    # 讀取指定的 DICOM Tag 值
    print(reader.GetMetaData(slice_num, tag))

參考資料:SimpleITK-Notebooks

Share
Published by
Office Guide
Tags: DICOMITK

Recent Posts

Python 使用 PyAutoGUI 自動操作滑鼠與鍵盤

本篇介紹如何在 Python ...

1 年 ago

Ubuntu Linux 以 WireGuard 架設 VPN 伺服器教學與範例

本篇介紹如何在 Ubuntu ...

1 年 ago

Linux 網路設定 ip 指令用法教學與範例

本篇介紹如何在 Linux 系...

1 年 ago

Linux 以 Cryptsetup、LUKS 加密 USB 隨身碟教學與範例

介紹如何在 Linux 系統中...

1 年 ago