LoginSignup
6
5

More than 5 years have passed since last update.

DICOM RTをpythonを使って解析する

Last updated at Posted at 2018-05-22

放射線治療の分野ではDICOM RT形式のファイルを扱うことが多いが,これに関する日本語の記事が少ない。自分で何度も調べてしまうので備忘録としてメモする。

環境

pythonを使ってdicomを解析するときは pydicom があると便利。DICOM RTにも対応してくれている。
本稿ではanacondaJupyterLabを使ったとして話を進める。単純に自分の好みなので,何でも良いけども。

開発の進め方

pydicomのインストールはanacondaに任せるとして,python(ここではipython)スクリプト上でimportする。

import dicom

そして使いたいdicomファイルを指定する。例えば

dicomplan_path="C:/Users/me/RP.dcm"

といった具合に。
そしてdicomファイルとして読み込む。

d=dicom.read_file(dicomplan_path)

これでdicomは読み込めた。
そうしたら,jupyterの補完機能を使えるので,例えば d.などと打ってtabを押せば候補が沢山出てくる。

そのうち,例えば

d.BeamSequence

などとしたとする。
そうすると

<Sequence, length 1, at 195B50D64F8>

とかでてきて,なんじゃそりゃ?となる。
そういうときは

d.BeamSequence[0]

とかしてやると中身がでてくる。

(0008, 0070) Manufacturer                        LO: 'Linac'
(0008, 0080) Institution Name                    LO: 'Hospital'
(0008, 1040) Institutional Department Name       LO: 'Radotherapy'
(0008, 1090) Manufacturer's Model Name           LO: 'Linac'
(0018, 1000) Device Serial Number                LO: '0123456'

みたいな感じ。
なのでその下にタグを追記すると下の階層にアクセスできる。
注意しなければならないのが,

d.BeamSequence[0](008,0070)

ではだめで,下記のように

d.BeamSequence[0][0x008,0x0070]

丸括弧でなく四角括弧,数字の前に"0x"をつけなければならない。
若き日の自分はこの"0x"をつけるのがわからずに随分悩んだことがあった。
そして,例えばSource-Axis Distanceは

d.BeamSequence[0][0x300a,0x00b4]

とすると,

(300a, 00b4) Source-Axis Distance                DS: '1000'

と返ってくるのだが,これを数値として使いたかったら

d.BeamSequence[0][0x300a,0x00b4].value

として'1000'として値を抜き出し,それをint()なりfloat()なりすると使えるようになる。
以上。

放射線治療に関するトピックが少ないので書いてみました。

6
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
5