• 跳至主要導覽
  • 跳至主要內容
  • 跳至主要資訊欄
Office 指南

Office 指南

辦公室工作實用教學

  • Excel
  • Word
  • PowerPoint
  • Windows
  • PowerShell
  • R

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

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


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

相關文章:
Python SimpleITK 影像處理教學:基本影像讀取與檢視
Python SimpleITK 影像處理教學:讀取 DICOM 影像序列檔案
Python 使用 Pydicom 讀取、編輯 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 影像,若我們要只需要後設資料,不需要看實際的影像資料,就可以改用 ImageFileReader 的 ReadImageInformation 只讀取後設資料,可讓讀取速度加快許多:

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

分類:Python 標籤:DICOM, ITK

讀者互動方式

發佈留言 取消回覆

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

主要資訊欄

搜尋

近期文章

  • C++ 語言使用 Crypto++ 實作 RSA 數位簽章教學與範例
  • C++ 語言使用 Crypto++ 實作 RSA-OAEP 搭配 SHA256 加密教學與範例
  • C++ 語言使用 Crypto++ 實作 AES 加密、解密、認證加密教學與範例
  • C++ 語言使用 Crypto++ 實作 MD5、SHA1、SHA2、BLAKE2 雜湊教學與範例
  • Ubuntu Linux 安裝、使用 Crypto++ 加密函式庫教學與範例
  • C 語言使用 OpenSSL 實作橢圓曲線 ECDH 金鑰交換教學與範例
  • Python 以 eciespy 實作 ECC 非對稱式加密方法教學與範例
  • C 語言使用 OpenSSL 實作 PBKDF2 教學與範例

推薦網站

  • Udemy 線上教學課程
  • Coursera 線上教學課程

關注本站

  • 電子郵件
  • Facebook

公益

  • 家扶基金會
  • 台灣世界展望會
  • Yahoo 奇摩公益
  • igiving 公益網
  • 兒福聯盟

Copyright © 2021 · Office Guide