Categories: Python

Python 處理 NumPy、SimpleITK 與 ITK 影像互相轉換教學與範例

介紹如何在 Python 中處理 NumPy、SimpleITK 與 ITK 三種影像格式的互相轉換。

SimpleITK 轉換為 NumPy 與 ITK

若要將 SimpleITK 格式轉換為單純的 NumPy 陣列,可以使用 GetArrayFromImage 或是 GetArrayViewFromImage

import SimpleITK as sitk
import itk
import numpy as np

# 以 SimpleITK 讀取影像檔案
sitkImage = sitk.ReadImage("my_image.nrrd")

# SimpleITK 轉為 NumPy 陣列(複製影像)
npImage = sitk.GetArrayFromImage(sitkImage)

# SimpleITK 轉為 NumPy 陣列(共用記憶體)
npImageView = sitk.GetArrayViewFromImage(sitkImage)

若要轉換成 ITK 格式,可以將 NumPy 陣列轉為 ITK 格式之後,再由 SimpleITK 的影像中將影像的 origin、spacing 與 direction 資訊複製過來。

# NumPy 陣列轉為 ITK 影像
IMAGE_DIMENSION = 3
itkImage = itk.GetImageFromArray(npImage,
  is_vector = sitkImage.GetNumberOfComponentsPerPixel() > 1)
itkImage.SetOrigin(sitkImage.GetOrigin())
itkImage.SetSpacing(sitkImage.GetSpacing())
itkImage.SetDirection(itk.GetMatrixFromArray(
  np.reshape(np.array(sitkImage.GetDirection()), [IMAGE_DIMENSION]*2)))

ITK 轉換為 NumPy 與 SimpleITK

將 ITK 影像轉為 NumPy 陣列的做法也非常類似,都是使用 GetArrayFromImageGetArrayViewFromImage 函數。

import SimpleITK as sitk
import itk
import numpy as np

# 以 ITK 讀取影像檔案
itkImage = itk.imread("my_image.nrrd")

# ITK 轉為 NumPy 陣列(複製影像)
npImage = itk.GetArrayFromImage(itkImage)

# ITK 轉為 NumPy 陣列(共用記憶體)
npImageView = itk.GetArrayViewFromImage(itkImage)

將 ITK 轉換為 SimpleITK 格式的作法也很類似,將 NumPy 陣列轉為 SimpleITK 格式之後,再複製影像的 origin、spacing 與 direction 資訊。

# NumPy 陣列轉為 SimpleITK 影像
sitkImage = sitk.GetImageFromArray(npImage,
  isVector=itkImage.GetNumberOfComponentsPerPixel()>1)
sitkImage.SetOrigin(tuple(itkImage.GetOrigin()))
sitkImage.SetSpacing(tuple(itkImage.GetSpacing()))
sitkImage.SetDirection(itk.GetArrayFromMatrix(itkImage.GetDirection()).flatten())

參考資料:ITK

Share
Published by
Office Guide
Tags: ITK

Recent Posts

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

本篇介紹如何在 Python ...

9 個月 ago

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

本篇介紹如何在 Ubuntu ...

9 個月 ago

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

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

9 個月 ago

Windows 使用 TPM 虛擬智慧卡保護 SSH 金鑰教學與範例

本篇介紹如何在 Windows...

10 個月 ago

Linux 以 Shamir’s Secret Sharing 分割保存金鑰教學與範例

介紹如何在 Linux 中使用...

10 個月 ago

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

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

10 個月 ago