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;

};

最新文章

  1. 分享50款 Android 移动应用程序图标【下篇】
  2. sed delete
  3. 20145225《Java程序设计》 实验五 Java网络编程及安全
  4. java乱码问题(转)
  5. 给js function的参数设置默认值
  6. memcached介绍及基本使用
  7. swift中通知的使用
  8. FTP 1.0
  9. sql优化总结
  10. Netty中的HttpObjectAggregator
  11. python学习之数组二
  12. 2019微软Power BI 每月功能更新系列——2月Power BI 新功能学习
  13. grep 正则表达
  14. Java语法糖初探(三)--变长参数
  15. Failed to enable constraints. One or more rows contain values violating non-null, unique, or foreign-key constraints.
  16. 第3章 文件I/O(3)_内核数据结构、原子操作
  17. 鸟哥的私房菜:Bash shell(二)-变量的丰富功能
  18. The memory graph Shared by the method
  19. JSTL核心标签
  20. Django应用的打包和应用的安装和卸载

热门文章

  1. CentOS7.5 firefox Flash插件更新
  2. lr_get_transaction_duration 函数介绍
  3. 【Java】Java中常用的String方法
  4. Django错误大汇总
  5. HDU 6203 ping ping ping [LCA,贪心,DFS序,BIT(树状数组)]
  6. 【BZOJ 1398】 1398: Vijos1382寻找主人 Necklace (最小表示法)
  7. SPOJ1811 && SPOJ1812
  8. NOIP2018提高组题解
  9. 【8.31校内测试】【找规律二分】【DP】【背包+spfa】
  10. 实用在线小工具 -- Google URL Shortener