Python

PythonでレントゲンのDICOM画像をみる pydicomの使用方法

 
ここではDICOMデータをPythonのpydicomというツールを用いて開きます。
さきにコードを書いておくと

import pydicom
from matplotlib import pyplot as plt
ds = pydicom.read_file('test.dcm') plt.imshow(ds.pixel_array, cmap='gray') plt.show()

こんな感じです。
必要なライブラリ(Pythonのツール)は

  • matplotlib
  • pydicom

です。
解説を加えていきます。

1.pydicomモジュールをインストールして使用する

Pythonと画像データは相性がいいです。

なぜかというと、画像は縦、横の白黒データの羅列で表せます。
行列の扱いはPythonの拡張モジュールのnumpyの得意とするところであり、
行列の描画はmatplotlibでできるからです。

早速レントゲン画像を見てみます。

Macを使用した例です。
Google Colabolatoryでも同じ作業でできます。
numpy, matplotlibはanacondaでインストールしておきます。

まず、「pydicom」というモジュールをインストールします。

~ % pip install pydicom

例として肩のレントゲンを読み込みます。

pythonやipythonの対話モード上で行います。
まずpydicomとmatplotlibのpyplotをインポートします。

import pydicom
from matplotlib import pyplot as plt

つぎにDICOMデータを読み込み、dsという変数に入れます。
ここでは練習用の肩のレントゲンデータ 「test.dcm」 というファイルを使うとします。

ds = pydicom.read_file(‘test.dcm’)

print(ds)

(0008, 0005) Specific Character Set CS: [”, ‘ISO 2022 IR 87’]
(0008, 0008) Image Type CS: [‘ORIGINAL’, ‘PRIMARY’]
(0008, 0016) SOP Class UID UI: Computed Radiography Image Storage
(0008, 0018) SOP Instance UID UI: DICOMのidが表示される
(0008, 0020) Study Date DA: ’20xx0xxx’ 日付が表示される
(0008, 0023) Content Date DA: ’20xx0xxx’ 日付が表示される
(0008, 0030) Study Time TM: ‘170753.0’ 撮影時刻
(0008, 0033) Content Time TM: ‘170956.0’
(0008, 0050) Accession Number SH: ‘xxxxx8100026727’ 撮影 id
(0008, 0060) Modality CS: ‘CR’ レントゲン
(0008, 0070) Manufacturer LO: ‘KONICA MINOLTA’など
(0008, 0080) Institution Name LO: [‘施設名’]
/
/
数十行続く

DICOMのラベルがでます。

dsはpydicomのデータセットです。typeで形式を見ることができます。

In [11]: type(ds)
Out[11]: pydicom.dataset.FileDataset

2.データフレームのpixel_array属性で画像の濃淡を取得

このデータセットのなかで

ds.pixel_array

に画像の濃度の情報が格納されています。

ds.pixel_array
array([[489, 487, 487, …, 63, 63, 0],
[478, 482, 478, …, 63, 63, 0],
[468, 473, 478, …, 63, 63, 0],
…,
[ 0, 0, 0, …, 0, 0, 0],
[ 0, 0, 0, …, 0, 0, 0],
[ 0, 0, 0, …, 0, 0, 0]], dtype=uint16)

濃淡が行列で入っています。

ds.pixel_array.shape
(1722, 1430)

縦1722ピクセル、横1430ピクセルです

3.Matplotlibで濃淡のデータを表示する

この行列をmatplotlibで白黒表示すればレントゲンがでます。

plt.imshow(ds.pixel_array, cmap=’gray’)
# グレースケールのためのcmap=”gray”
plt.show()

レントゲン画像が表示されます。

4.まとめ

まとめると
「test.dcm」というDICOMファイルを表示するには
pipでpydicomをインストールしてから

import pydicom
from matplotlib import pyplot as plt
ds = pydicom.read_file('test.dcm') plt.imshow(ds.pixel_array, cmap='gray') plt.show()

となります。
結構シンプル。