DICOMファイル
DICOMファイル(だいこむふぃある)とは、DICOM規格で定められている医用画像などのファイルフォーマットのことである。
概要[編集 | ソースを編集]
DICOMファイルはDICOMデータにプリアンブルを付けてファイルとして保存したものをいう。「DICOMデータ」という場合は、DICOMファイルのみならず、DICOM通信で内部的に用いるパケット(DICOM/PDUなど)のフォーマットなども含まれるが、会話などにおいてはDICOMファイルを指していることも多いので、これも前後の文脈から読み取る必要がある。
DICOMファイルの大多数は医用画像であるが、非常に稀に医用画像以外のデータが格納されていることもある。たとえばDICOM SRと呼ばれる形式で読影レポートを格納したDICOMファイルや、主にCD-Rなどの外部書き出しの際に用いるDICOMDIRと呼ばれるディレクトリ構造やファイル構成を表すDICOMファイルなどがある。これらと区別するため医用画像のみを指す場合は「DICOM画像ファイル」や単に「DICOM画像」と呼ばれることもあり、狭義なのか広義なのかは文脈から適宜判断する必要がある。
ファイル名および拡張子について[編集 | ソースを編集]
DICOMファイルの正式なファイル名の形式は以下のとおりである。
- 半角大文字および数字
- 最大8文字
- 拡張子は存在しない
DICOMファイルのファイル名規則は、MS-DOSのファイル名規則(8文字+拡張子3文字)よりも厳しい内容であり、現在では博物館に展示されているような遥か古代のコンピューターとの互換性を想定したものである。
なお、この厳しい規則では現代的なコンピューターでの運用性が非常に悪いため、このルールは無視されていることが多く、ファイル名の文字数も8文字以上で拡張子には「.dcm」などが用いられるのが一般的となっている。.dcm拡張子についてはIANAおよびRFC 3240において「application/dicom」というMIME TYPEが割り振られており、事実上のデファクトスタンダードとなっている。
ただしこれはDICOMの正式な決まりではないので稀に「.dicom」などとしている製品やファイル名は8文字以上で小文字や記号も含まれるが拡張子なしなど、様々な形式を採用している製品も見受けられるため、DICOM対応製品の開発に際してはこれらを受け入れる柔軟性が重要となる。
ファイル構造[編集 | ソースを編集]
DICOMファイルの基本構造は以下のようになっている
プリアンブル[編集 | ソースを編集]
DICOMファイルの先頭にある固定128バイト(0~128バイト)。
通常は全部0x00で埋め尽くすことになっているので、プログラムを作る時は問答無用で読み飛ばすこと。正確には「好きに使ってよし」という領域なのでプログラマの遊びメッセージなんかを書いておいても良い。
プリフィックス[編集 | ソースを編集]
プリアンブルに続く固定4バイト(129~132バイト)。 中身は「DICM」(0x44, 0x49, 0x43, 0x4D)という文字列。 DICOMファイルかどうかを判断するのに使用する。
備考:DICOMファイルのファイル名[編集 | ソースを編集]
ちなみにDICOMファイルのファイル名は「半角の大文字英字および数字で最大8文字」で「拡張子なし」という事になっていた。最近では8文字以上の長いファイル名だったり、小文字を含んだり、アンダーバーなどの記号を含んだり、拡張子が.dcmだったりすることの方が多いが、間違っても拡張子でDICOMファイルであると判断してはいけない。たとえファイルの拡張子が.jpgとなっていても、DICOMビューアたるものDICOMファイルである可能性を捨てず、問答無用でまずプリフィックスを調べにいく必要がある。
メタ情報[編集 | ソースを編集]
以降はメタ情報と呼ばれる可変長の要素がファイルの終わりまで繰り返し登場する。 1個のメタ情報は基本的に、タグ、VR(データの型)、データ長、データ本体の4つで構成される。必ずしもこの4つで構成されるとは限らないので注意。
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12〜 |
タグ | VR | データ長 (2〜6byte可変、VRから推定する) |
データ本体 | |||||||||
グループ | エレメント |
タグ[編集 | ソースを編集]
タグとは、データ本体に何の情報が入っているかを示す4バイトである。 タグはグループ(上位2バイト)とエレメント(下位2バイト)で構成される。
グループの値が偶数の場合は標準タグといい、それぞれのタグの値が何を意味するかはDICOM規格に記載された膨大な辞書で決まっている。例えばタグが(0010,0010)であれば患者名といった感じで決まっている。
グループの値が奇数の場合はプライベートタグといい、勝手に独自の値を突っ込んでいいことになっている。標準タグでカバーしきれない情報を書いておきたい場合に使う。基本的に第三者には意味不明な情報となってしまうので極力使うな。
詳細は「DICOMタグ」の項目を参照。
VR[編集 | ソースを編集]
VRとは、Value Representationの略で、データ本体の「型」を表す2バイトの値であり、データ本体が文字列なのか数値なのかという情報である。
なお、DICOMでは暗黙的VR(Implicit VR)と明示的VR(Explicit VR)という規定があり、暗黙的VRの場合はVRが存在しない。 その場合は前述のタグからVRを判断する(患者名なら文字列など)。 つまりタグから判断できる項目なので不要。 親切丁寧に書いても良いが不要。 ぶっちゃけ書いてあっても信用ならんので無視してタグから推定するくらいが丁度良い。
詳細は「DICOM/Value Representation」を参照。
データ長[編集 | ソースを編集]
データ長とは、データ本体のバイト数のことである。 2バイトまたは4バイトまたは6バイトとなる可変長であり、データ長が何バイトなのかはVRから推定する。 例外的に明示的VRで特定タグの場合はタグから推定する。 なお、6バイトの場合は上位2バイトがゴミデータであり実際に有効なのは下位4バイトのみである。
ちなみにデータ本体のバイト数は絶対に偶数という決まりがある。
4バイト(6バイト含む)かつ、値が0xFFFFFFFFの場合は「データ本体の長さ未定」を意味する。 この形式は主に画像データ本体(7FE0,0010)などに登場ことが多いする。
データ本体[編集 | ソースを編集]
目的のデータはここに入っている。