医療画像はDICOM画像として保存されており、そのタグには患者情報や、検査情報、画像情報と様々な内容が入っています。
画像処理を行っていく際に、タグ情報を使うことは多々あります。
そこで、今回はpythonでDICOMタグを扱っていく方法をやってみたいと思います。
DICOMを読み込む方法や、表示方法は以下の記事に記載していますのでそちらを参照ください。
DICOMタグの構成
まずは、タグ情報を扱うにはDICOMタグの構成を知らなければなりません。タグの一つ一つの中には以下のようないろいろな情報がまとまって一つの情報となっています。(記載事項以外にもあるかも。。。)
Tag | タグの番号 |
Attribute Name | 項目名 |
Attribute Name J | 日本語の項目名 (上図に記載されていません) |
Attribute Type | データの必須事項、条件付き必須事項等 (上図に記載されていません) |
VR | データの型 |
Length | データの長さ (上図に記載されていません) |
Value | 値 |
なので、プログラミングで使っていく際にはDICOMデータのどの項目を扱っていくのか指定しなければならないということになります。
予約タグとプライベートタグ
タグには必須事項となるタグがあり、それが予約タグとなります。
また、必須項目のタグはモダリティーにより異なってきます。
また、患者情報であったり、検査情報であったり、必須項目は偶数番のブロック(タグ番号の前側の番号)で指定されています。一方、プライベートタグに関しては奇数番で指定できます。
各モダリティーごとの必須項目タグはLIBERWORKS社のサイトに記載されていますので興味があるかたはご覧ください。
タグ情報を変更する
既存のタグ情報を変更するする場合は以下のコードでできます。
dcm[0x0008,0x0070].value = ‘変更する値’
なお、このままではタグ情報を変更しただけで保存できていませんので次に保存していきましょう。
タグ情報を画像に保存する
タグ情報を変更したら今度は、画像に保存しなければなりません。
save_as(file_path, write_like_original=False)
で保存することができます。
write_like_original=False
の部分は、DICOMに準拠した形式ではなく個人で指定した形式で保存しますか?という事です。なので、Trueにしてしまうと形式に反してしまうかもしれませんのでここの部分はFalseのままがいいでしょう。
プライベートタグを作成する
プライベートタグに関しては、企業がそれぞれ作成しています。
例えば、SiemensのMRI装置でDiffusionを撮像した場合、b値等がプライベートタグとして登録されていますが、10年前のcanon製のMRI 装置では記載されていません。
プライベートタグを画像に載せたい場合はまず、ブロックを作成しなくてはなりません。患者に関する情報を載せているグループや、検査情報を載せているグループといったものです。
block = dcm.private_block(0x0019, “diffusion parameter”, create=True)
block.add_new(0x0c, ‘SH’, b_val)
で画像に登録をしたら保存をします。
dcm.save_as(file_path, write_like_original=False)
これで、プライべートタグの登録が完了です。
資料
DICOM規格に関してはJIRAのホームページに詳細な記載がありますので興味がある方は以下のリンクからご覧ください。
JIRA 勉強会資料 DICOMに慣れる -現場で DICOM 接続に慌てないための知識 (3) 画像系の通信 -
環境
- windows10
- python3.6.1
- Anaconda custom(64-bit)
- PyCharm2020.2(Communication Edition)