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;

};

DICOMDIR结构的更多相关文章

  1. DICOMDIR

    DICOMDIR 是一个可变长度 迷你 database 文件.由 group (0002, xxxx) 和 group (0004, xxxx) 为主题.描述的是一个 4 层的树状结构 (tree ...

  2. dicom和dicomdir

    转载http://blog.sina.com.cn/s/blog_4bce5f4b01019ix5.html DICOM 文件内容在 Part 3 DICOM IOD 里定义.CT, MR, CR, ...

  3. 【.net 深呼吸】细说CodeDom(1):结构大观

    CodeDom 是啥东东?Html Dom听过吧,XML Dom听过吧.DOM一般可翻译为 文档对象模型,那 Code + DOM呢,自然是指代码文档模型了.如果你从来没接触过 CodeDom,你大概 ...

  4. 读书笔记:《HTML5开发手册》--HTML5新的结构元素

    读书笔记:<HTML5开发手册> (HTML5 Developer's CookBook) 虽然从事前端开发已有很长一段时间,对HTML5标签也有使用,但在语义化上面理解还不够清晰.之前在 ...

  5. Python学习--04条件控制与循环结构

    Python学习--04条件控制与循环结构 条件控制 在Python程序中,用if语句实现条件控制. 语法格式: if <条件判断1>: <执行1> elif <条件判断 ...

  6. HTML5 语义元素(一)页面结构

    本篇主要介绍HTML5增加的语义元素中关于页面结构方面的,包含: <article>.<aside>.<figure>.<figcaption>.< ...

  7. React在开发中的常用结构以及功能详解

    一.React什么算法,什么虚拟DOM,什么核心内容网上一大堆,请自行google. 但是能把算法说清楚,虚拟DOM说清楚的聊聊无几.对开发又没卵用,还不如来点干货看看咋用. 二.结构如下: impo ...

  8. ElasticSearch 5学习(10)——结构化查询(包括新特性)

    之前我们所有的查询都属于命令行查询,但是不利于复杂的查询,而且一般在项目开发中不使用命令行查询方式,只有在调试测试时使用简单命令行查询,但是,如果想要善用搜索,我们必须使用请求体查询(request ...

  9. ASP.NET Core应用针对静态文件请求的处理[4]: DirectoryBrowserMiddleware中间件如何呈现目录结构

    和StaticFileMiddleware中间件一样,DirectoryBrowserMiddleware中间本质上还是定义了一个请求地址与某个物理目录之间的映射关系,而目标目录体现为一个FilePr ...

随机推荐

  1. Centos bash: make: command not found

    一般出现这个bash: make: command not found提示,是因为安装系统的时候使用的是最小化mini安装,系统没有安装make.vim等常用命令,直接yum安装下即可: yum -y ...

  2. 【caffe-Windows】微软官方caffe之matlab接口配置,以及安装caffe的注意事项

    1.在此之前,记录一下之前的错误,在参考博客[caffe-Windows]caffe+VS2013+Windows+GPU配置+cifar使用进行caffe的安装时,其中的一些步骤可以不做,具体见下图 ...

  3. bzoj 1102

    思路:用dfs 会爆栈,巨坑,要用bfs. #include<bits/stdc++.h> #define LL long long #define fi first #define se ...

  4. Map 的四种遍历方式

    Map 的四种遍历方式 import java.util.HashMap; import java.util.Iterator; import java.util.Map; public class ...

  5. elementUI 学习入门之 checkbox 复选框

    CheckBox 复选框 与单选框基本类似.如:按钮样式.带边框.复选框按钮大小. eg: <template> <el-checkbox-group v-model="s ...

  6. PHP视频教程 字符串处理函数(一)

    字符串处理函数: PHP处理字符串的空格: strlen()   字符串长度 trim()对字符串左右空格删除 ltrim()对字符串左边空格删除 rtrim()对字符串右侧空格删除 PHP对字符串大 ...

  7. [BOI2004]Sequence

    题面描述 给定整数数组$a_1,a_2,a_3...a_n$,求递增数组$b_1,b_2,b_3...b_n$ 使得$|a_1 - b_1| + |a_2 - b_2| + ... + |a_n - ...

  8. CodeForces - 1017D The Wu

    题面在这里! 比较显而易见的暴力,O(2^(2n) + 2^n * 100) 就可以直接做了 #include<bits/stdc++.h> #define ll long long us ...

  9. Nginx -- nginx.conf 配置文件详讲

    Nginx服务器配置,nginx.conf文件代码详讲,结合不同楼主的博文得到: #关掉访问日志可以优化服务器 #定义Nginx运行的用户和用户组 #user nobody; #nginx进程数 #如 ...

  10. [转]Android:异步处理之AsyncTask的应用(二)

    2014-11-07     既然UI老人家都这么忙了,我们这些开发者肯定不能不识趣的去添乱阻塞UI线程什么的,否则UI界面万一停止响应了呢——这不是招骂的节奏么?!所以我们知道用Handler+Th ...