tak0kadaの何でもノート

発声練習、生存確認用。

医学関連は 医学ノート

dicomファイルの構造

簡易DICOM Viewerをつくろうを参考にしつつ、DICOM sample image setsのデータを試しに開いてみることにする。

既存のビューワーで開いてみる

YAMAKI DICOM Tools

pydicomでもタグなど見れる

(0008, 0008) Image Type                          CS: ['ORIGINAL', 'PRIMARY', 'AXIAL']
(0008, 0012) Instance Creation Date              DA: '20040119'
(0008, 0013) Instance Creation Time              TM: '072731'
...

バイナリー形式でDICOM情報はどのように保存されているか

ghexで見てみる:

┏━━━━━━━━━━━━━┳━━━━━━━━━━━━━━
┃ファイルヘッダ      ┃ファイルプリアンブル
┃             ┣━━━━━━━━━━━━━━
┃             ┃ファイルプリフィックス
┣━━━━━━━━━━━━━╋━━━┳━━━━━━━━━━
┃データ要素        ┃タグ ┃グループ
┃             ┃   ┣━━━━━━━━━━
┃             ┃   ┃エレメント
┃             ┣━━━┻━━━━━━━━━━
┃             ┃VR(値表現)
┃             ┣━━━━━━━━━━━━━━
┃             ┃値長さ
┃             ┣━━━━━━━━━━━━━━
┃             ┃値フィールド
┣━━━━━━━━━━━━━┻━━━━━━━━━━━━━━
┃・・・・・・・・・ 
┣━━━━━━━━━━━━━┳━━━━━━━━━━━━━━
┃データ要素        ┃
┗━━━━━━━━━━━━━┻━━━━━━━━━━━━━━

.dcmファイルは上のような構造になっている。全体としてはヘッダとデータ要素の集まりになっている。

  • ヘッダは先頭から128バイトは00H(pythonでは0x00と書く)だけのプリアンブルとその後4バイトはDICMの4文字を表すプリフィックスからなる。
  • データ要素はタグ、VR(値表現)、値長さ、値フィールドの4つからなる。
    • タグ: グループとエレメント(どちらも2バイト)からなる。データの種類を示す。
    • VR(値表現): データの型を表す。省略されることもあるので注意。
    • 値長さ: 値領域の長さを示す16ビットか32ビットの符号なし整数。値の長さが未定義の場合は0xFFFFFFFFになる。
    • 値フィールド: データ(長さが偶数ということだけは決まっているらしい)。複数あることもある。

Data Elementの情報を表示してみよう

ここから後はGDCMというライブラリを利用する。メジャーなライブラリとしてはDCMTKもある。