DICOM 2: Data Format

文件存储格式

不同于html或xml等协议把信息保存为文本格式,protobuf把数据保存为二进制,DICOM协议的数据既有文本格式又有二进制格式。用文本编辑器打开一个dcm文件,数字字母这些我们认识的就是文本数据,叉叉圈圈框框……这些就是二进制数据。由于二进制数据在不同的计算机系统上的字节序不同(可以参考big-endian和little-endian相关知识 ),当DICOM数据在不同的系统间传输时,就要采用统一的标准,在后来DICOM传输部分会有进一步说明。

数据组成 Data Element

一个完整的DICOM文件或数据是由一个个独立的数据元素(Data Element)组成的,每一个数据元素遵循相同的格式,包含:

  • 唯一标识此元素的标签Tag值
  • 描述元素中数据格式的Value Representation
  • 数据的长度
  • 数据内容

标签 Tag

每个标签由Group值和Element值组成,Group值相同的两个数据元素在逻辑或医学概念上一般可以归为一类。Group值和Element值分别保存为两个字节整数,在DICOM协议的文档和字典中通常以括号中被逗号隔开的的两个16进制数表示。

值表现 Value Representation

DICOM标准在PS3.5中定义了27个基本数据类型,就是所谓的值表现(VR)。值表现是用来封装所有可能的临床数据类型的。在DICOM中写任何东西必须符合27个类型中的一个。每个VR都有他自己两个字母的缩写,表示内容的定义,数据中允许出现的字母描述,以及规定的数据长度。详细的定义见VR Table6.2-1

从程序员角度看,DICOM定义的VR有二十七中之多(甚至有表示未知数据类型的UN),相比大多数编程语言区区几个基本数据类型,实在是够复杂的。比如标示时间日期的就有DA(日期)、TM(时间)、DT(时间日期)、AS(年龄字符串),表示文本字符串的有CS(代码字符串)、SH(短字符串)、LO(长字符串)、ST(短文本)、LT(长文本)、UT(无限制文本),每个都有不同的定义、数据长度和使用规则。虽然复杂的VR规则有很多遗留的缺点和陷阱,但也使DICOM协议的能独立于计算机硬件,保证了数据的统一性。

数据字典 Data Dictionary

在DICOM标准的PS3.6中,DICOM数据字典对所有标准中的DICOM数据元素(属性)进行了定义,按照Tag值顺序排列,包含数据的名称,值表现(VR),数据元素多样性(VM,Value Multiplicity),Retried Status。DICOM数据字典就是在数字医疗方面,所有标准数据项(属性)的注册表。

有了DICOM Dictionary不同系统的开发者就可以按照统一标准解析和处理DICOM数据了。我们使用DICOM开发库DCMTK自带的dcmdump工具把同一个DICOM文件打印出来,得到了可读的DICOM信息。需要注意的是这是软件显示DICOM信息格式,不同的软件或选择不同的格式,实际存储格式是如图2所示。

未完待续……