DICOMデータ

提供:メディカルウェア
ナビゲーションに移動 検索に移動

DICOMデータとは、DICOMにおいて使用される各種データの共通形式である。

概要[編集 | ソースを編集]

DICOMデータは、DICOMファイルのプリアンプル部分(いわゆるファイルヘッダ)に続く実データ部分や、DICOM通信のパケットを結合した結果として得られる実データ部分などのことである。

ここだけ見れば簡単に実装できそうであるが、実際にはDICOM通信のパケットを結合するまでの低レベルな仕様や、DICOMデータから実際に画像としてデコードするの労力など、DICOMデータを得るまで、得たあとの部分で過労死するものが後を絶たない。 DICOM通信ではTCP/IPであればネットワークカード上の半導体が処理しているような処理まで書かされ(互換性の名の下に超古代文明の通信規格をTCP/IP上でエミュレーションしている)、画像へのデコードはDICOMが勝手に拡張した規格外のJPEGや世間一般では使われていないJPEG2000を実装する必要があるなど、作業は山盛りである。

基本形式[編集 | ソースを編集]

DICOMデータは以下のような形式で可変長の要素が繰り返し登場する。 1個のメタ情報は基本的に、タグ、VR(データの型)、データ長、データ本体の4つで構成される。 なお、必ずしもこの4つで構成されるとは限らないので注意すること。

データ構造でいえばリスト構造のようなものであり添字に相当するタグを指定して値を得るという繰り返しで処理できる。シーケンスという突如としてリスト構造がツリー構造に豹変する例外もあるが、DICOMの標準的な規格の中ではストラクチャーレポートくらいでしか利用されておらず、残りはほぼプライベートタグである。

0 1 2 3 4 5 6 7 8 9 10 11 12〜
タグ VR データ長
(2〜6byte可変、VRから推定する)
データ本体
グループ エレメント

タグ[編集 | ソースを編集]

DICOMタグとは、データ本体に何の情報が入っているかを示す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)などに登場ことが多いする。

データ本体[編集 | ソースを編集]

目的のデータはここに入っている。

その他[編集 | ソースを編集]

DICOMデータは全世界共通のものであり、実装者が大量にいるため方言も大量にあるという。

関連項目[編集 | ソースを編集]

参考文献[編集 | ソースを編集]