DICOMファイル
DICOMファイルとは、DICOM規格で定められた医用画像ファイルフォーマットのことである。
ファイル構造
DICOMファイルの基本構造は以下のようになっている
プリアンブル
DICOMファイルの先頭にある固定128バイト(0~128バイト)。
通常は全部0x00で埋め尽くすことになっているで、プログラムを作る時は問答無用で読み飛ばすこと。正確には「好きに使ってよし」という領域なのでプログラマの遊びメッセージなんかを書いておいても良い。
プリフィックス
プリアンブルに続く固定4バイト(129~132バイト)。 中身は「DICM」(0x44, 0x49, 0x43, 0x4D)という文字列。 DICOMファイルかどうかを判断するのに使用する。
ちなみにDICOMファイルのファイル名は「半角の大文字英字および数字で最大8文字」で「拡張子なし」という事になっていた。最近では長いファイル名だったり、アンダーバーなどの記号を含んだり、拡張子が.dcmだったりするが、間違っても拡張子で判断してはいけない。たとえファイルの拡張子が.jpgとなっていても、DICOMビューアたるものDICOMファイルである可能性を捨てず、問答無用でまずプリフィックスを調べにいけ。
メタ情報
以降はメタ情報と呼ばれる可変長の要素がファイルの終わりまで繰り返し登場する。 1個のメタ情報は基本的に、タグ、VR(データの型)、データ長、データ本体の4つで構成される。必ずしもこの4つで構成されるとは限らないので注意。
タグ
タグとは、データ本体に何の情報が入っているかを示す4バイト。 タグはグループ(上位2バイト)とエレメント(下位2バイト)で構成される。
グループの値が偶数の場合は標準タグといい、それぞれのタグの値が何を意味するかはDICOM規格に記載された膨大な辞書で決まっている。例えばタグが(0010,0010)であれば患者名という感じ。
グループの値が奇数の場合はプライベートタグといい、勝手に独自の値を突っ込んでいいことになっている。標準タグでカバーしきれない情報を書いておきたい場合に使う。基本的に第三者には意味不明な情報となってしまうので極力使うな。
VR
VRとは、Value Representationの略で、データ本体の型を表す2バイト。 文字列なのか数値なのかなど。
なお暗黙的VR(Implicit VR)と明示的VR(Explicit VR)という規定があり、暗黙的VRの場合はVRが存在しない。 その場合はタグからVRを判断する(患者名なら文字列など)。 つまりタグから判断できる項目なので不要。 親切丁寧に書いても良いが不要。 ぶっちゃけ書いてあっても信用ならんので無視してタグから推定するくらいが丁度良い。
データ長
データ長とは、データ本体のバイト数のこと。 2バイトまたは4バイトまたは6バイト。 なお6バイトの場合、上位2バイトはゴミで、有効なのは下位4バイトのみであり、実質的に4バイトである。
データ長が何バイトなのかはVRから推定する。例外的に明示的VRで特定タグの場合はタグから推定する。
4バイト(6バイト含む)かつ、値が0xFFFFFFFFの場合は「データ本体の長さ未定」を意味する。
データ本体
目的のデータはここに入っている。