放射線治療の分野ではDICOM RT形式のファイルを扱うことが多いが,これに関する日本語の記事が少ない。自分で何度も調べてしまうので備忘録としてメモする。
#環境
pythonを使ってdicomを解析するときは pydicom があると便利。DICOM RTにも対応してくれている。
本稿ではanacondaでJupyterLabを使ったとして話を進める。単純に自分の好みなので,何でも良いけども。
#開発の進め方
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()
なりすると使えるようになる。
以上。
放射線治療に関するトピックが少ないので書いてみました。