dicomファイルの構造
簡易DICOM Viewerをつくろうを参考にしつつ、DICOM sample image setsのデータを試しに開いてみることにする。
既存のビューワーで開いてみる
- ImageJ、pydicom: 記事執筆時点で非圧縮のDICOM画像を開くことができない。
- MITK: ビルドに成功していないのでまた後で。
- Windows用ビューワー(playonlinux経由):
- DICOMViewer: タグしか見れなかった。
- YAKAMI DICOM Tools: 少しレスポンスが悪いが一応動く
- .netのインストールにはaskubuntuが具体的でわかりやすい。日本語リンク先、日本語リンク先2も参考になる。
- playonlinuxはwineのグラフィカルフロントエンドでソフトウェアごとに異なる設定を利用できる。
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になる。
- 値フィールド: データ(長さが偶数ということだけは決まっているらしい)。複数あることもある。