DICOMDIR结构

DICOMDIR文件结构:

格式

DICOMDIR文件遵照DICOM文件的存储格式,需要有128个无意义字节的前言(假如没有特殊要求,这些字节都为00H),紧接着是DICOM前缀(长度为4字节的“DICOM”字符串,判断是否为DICOM文件的唯一标准),再接着是group标签为:0x0002的elemnt,强制要求的有[0002,0000] [0002,0001] [0002,0002] [0002,0003] [0002,0010] [0002,0012]。

之后是目录信息(group为0x0004的元素),其中有第一个组件的入口和最后一个组件的入口以及图像集相对路径(DICOMDIR文件名必须为“DICOMDIR”,并且必须与图像集文件夹在同一目录内) (PS10,P.20)

 

物理结构:

 

 

逻辑结构:

 

 

DICOMDIR展开依次有4层的树状结构:

1. Patient

2. Study

3. Series

4. Image

在设计数据结构的时候,可以用树的节点来表示每一层的每一个实体。如下:

 

class Patient

{

public:

       Info Name;

       Info Id;

       int sonnum;

       Patient(void);

       ~Patient(void);

 

};

 

class Study

{

public:

       Info Date;

       Info Time;

       Info Description;

       Info Instance;

       Info ID;

       Info AccNum;

       int sonnum;

       Study(void);

       ~Study(void);

};

 

class Series

{

public:

       Info Modality;

       Info Instance;

       Info Number;

       int sonnum;

       Series(void);

       ~Series(void);

};

class Image

{

public:

       Info Instance;

       Image(void);

       ~Image(void);

};

class Root

{

public :

       int sonnum;

       char *Version;

       char *Path;

};

每一层由多个实体组成,每个实体包含2个内容:目录信息和实体信息。

 

目录信息必须具备以下元素:下一个实体入口地址(0x0004,0x1400)、下一层(第一个)实体入口地址(0x0004,0x1420)、目录使用标记组成(0x0004,0x1410)和实体类型(0x0004,0x1430),另外Image实体还需要包含对应影像文件的相对路径。

 

不同层的实体要求包含不同的元素,详见PS3.3 P.1217。

 

 

DICOMDIR或者DICOM的实体,从逻辑上的上至下遍历可以直接通过入口地址进行索引,也可以通过一种比较方便的结构来进行组织和索引,就是通过嵌套的形式(Sequence)。在DICOM标准中,一共有3种嵌套格式,如下:

 

 

 

(ps5.7 p.44)

嵌套结构(也即串)格式如下:

一个VR为SQ的元素起头,接下去的ITEM(也即元素)以(FFFE,E000为TAG的元素起头)。SQ元素记录整个(不包括SQ元素)数据集(dataset)的大小。FFFE,E000元素记录其下内容的大小。

Dataset则是由1个或多个ITEM组成。

元素(ITEM)格式:

显式时:

 

 

隐式时:

 

TAG由2字节16进制的group tag 和 element tag 组成。

VR有显式和隐式2种方式,当显式传输时,VR有值,当隐式传输时,VR无值;另外,组号是0002的元素都是显式的。

当VR值是OB,OW,OF,SQ,UT或者UN的时候,VR的长度为4字节,由2字节的字符串和2字节的00H组成。当VR值是其他值的时候,VR的长度为2字节,即2字节的字符串。

ValueLength的长度是根据VR可变的,共有2种长度,当VR为OB,OW,OF,SQ,UT或者UN的时候长度为4字节。当VR为其他值时,长度为2字节。ValueLength表示的是Value的长度,另外,当DataLength的长度不为偶数时,则根据需要添加前缀或者后缀补齐。

Value区则是具体的值,长度根据ValueLength。

Item的数据格式可以定义如下:

Class Item

{

       short Group;

       short Element;

       char VR[4];

       int ValLen;

       char *Value;

};

posted @ 2012-12-26 10:13  微笑的艾米  阅读(1371)  评论(0编辑  收藏  举报