#はじめに
DICOMを読み込むライブラリはいくつかありますが,この記事ではSimpleITKを使ってMRIやCTなどの医用画像を読み込む方法を解説します.
#SimpleITKとは
SimpleITKはITKという医用画像解析のための形式をPythonやほかの言語で容易に利用するためのライブラリです.(https://en.wikipedia.org/wiki/SimpleITK)
3D SlicerやImageJ,ITK-Snapなどのソフトウェアでも利用されています.
#医用画像の形式
例えばMRI画像はDICOMデータとして利用することが多く,SimpleITKではDICOMを直接読み込むことができます.また,DICOM画像はしばしばNIFTI(.nii, .nii.gz)やNRRD形式(.nrrd)として保存されることがありますが同様に読み込めます.(https://simpleitk.readthedocs.io/en/master/IO.html)
ただし,出力に関してはDICOM形式では出力できないと思われます.
#目的
SimpleITK形式で読み込まれた画像を用いて表示やndarray形式に変換でき,処理や解析を行えます.
このライブラリを用いた目的は,PyRadiomicsという別の画像解析用ライブラリ上でSimpleITK形式で画像を読み込む必要があったためです.自分の学習記録としてもせっかくなのでまとめました.
#環境
- Windows 10
- Python 3.7
- Jupyter Notebook(Anaconda)
Google Collaboratoryでも同様に行えますがローカルにあるDICOMデータなどをいちいちアップロードするのは面倒なので環境構築しました.
#SimpleITKのインストール
conda install -c simpleitk simpleitk
pipでは普通にインストール可能です.
#画像の読み込み
DICOM画像が複数枚同じフォルダーに保存されている場合を想定しています.
import sys
import SimpleITK as sitk
import numpy as np
import matplotlib.pyplot as plt
# Dicomの読み込み
imgdir = sys.argv[1]
reader = sitk.ImageSeriesReader()
dicom_names = reader.GetGDCMSeriesFileNames(imgdir)
reader.SetFileNames(dicom_names)
image = reader.Execute() # ITK形式で読み込まれた画像
# NIFTIやNRRDを読み込む場合
image = sitk.ReadImage("画像のディレクトリ")
# 画像のサイズ取得
size = image.GetSize()
print("Image size:", size[0], size[1], size[2])
# ITK形式をndarray形式に変換
ndImage = sitk.GetArrayFromImage(image)
# 画像を表示
plt.imshow(ndImage[n], cmap='gray') # nは任意のスライスについて表示
$ python3 image_input.py "DICOMが存在するディレクトリ名"
#まとめ&読み込んだ画像の使い道
上記のコードではサイズのチェックと簡単な表示を行いました.
画像を読み込んだあとの使い道は様々です.
例えば,3次元のndarray形式になっているのでprintで任意のボクセルの信号値を見ることもできます.
画像の出力やどんな解析ができるかどうかは別の記事でまとめたいと思います.