当前位置: 首页 > news >正文

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;

};

相关文章:

  • MVC2 Area实现网站多级目录
  • IBM Java多线程 - 4.共享对数据的访问
  • TADOQuery池
  • Windows7问题集
  • 连接postgres特别消耗cpu资源而引发的PostgreSQL性能优化考虑
  • 应用开发框架之——业务规则脚本化
  • 对等计算实践: P2P 遇上 SSL
  • Sprout and the Bean
  • 数据库水平拆分和垂直拆分区别(以mysql为例)
  • 跟我一起学WCF(11)——WCF中队列服务详解
  • 第6期(江西省吉安市永丰县)县长手机信箱工作简报(自吹自擂政绩,自圆其说)
  • 各种排序算法的稳定性和时间复杂度小结
  • Java 种15种锁的介绍:公平锁,可重入锁,独享锁,互斥锁等等...
  • 前端设计模式(0)面向对象设计原则
  • 专访Connolly:为什么我们需要手动回归测试宣言?
  • 分享的文章《人生如棋》
  • [deviceone开发]-do_Webview的基本示例
  • angular2 简述
  • ECMAScript 6 学习之路 ( 四 ) String 字符串扩展
  • JavaScript函数式编程(一)
  • LintCode 31. partitionArray 数组划分
  • Linux编程学习笔记 | Linux多线程学习[2] - 线程的同步
  • NSTimer学习笔记
  • PHP变量
  • Quartz初级教程
  • Quartz实现数据同步 | 从0开始构建SpringCloud微服务(3)
  • 从零开始学习部署
  • 前端
  • 前嗅ForeSpider中数据浏览界面介绍
  • 嵌入式文件系统
  • 鱼骨图 - 如何绘制?
  • 远离DoS攻击 Windows Server 2016发布DNS政策
  • 在 Chrome DevTools 中调试 JavaScript 入门
  • Oracle Portal 11g Diagnostics using Remote Diagnostic Agent (RDA) [ID 1059805.
  • NLPIR智能语义技术让大数据挖掘更简单
  • 昨天1024程序员节,我故意写了个死循环~
  • ​​​​​​​GitLab 之 GitLab-Runner 安装,配置与问题汇总
  • $(function(){})与(function($){....})(jQuery)的区别
  • (Matalb时序预测)PSO-BP粒子群算法优化BP神经网络的多维时序回归预测
  • (仿QQ聊天消息列表加载)wp7 listbox 列表项逐一加载的一种实现方式,以及加入渐显动画...
  • (附源码)计算机毕业设计SSM教师教学质量评价系统
  • (十)【Jmeter】线程(Threads(Users))之jp@gc - Stepping Thread Group (deprecated)
  • (提供数据集下载)基于大语言模型LangChain与ChatGLM3-6B本地知识库调优:数据集优化、参数调整、Prompt提示词优化实战
  • (转)创业家杂志:UCWEB天使第一步
  • .equal()和==的区别 怎样判断字符串为空问题: Illegal invoke-super to void nio.file.AccessDeniedException
  • .equals()到底是什么意思?
  • .h头文件 .lib动态链接库文件 .dll 动态链接库
  • .NET CF命令行调试器MDbg入门(三) 进程控制
  • .net core使用RPC方式进行高效的HTTP服务访问
  • .NET Framework 4.6.2改进了WPF和安全性
  • .net 写了一个支持重试、熔断和超时策略的 HttpClient 实例池
  • .NET/C# 避免调试器不小心提前计算本应延迟计算的值
  • .netcore 6.0/7.0项目迁移至.netcore 8.0 注意事项
  • .NET中的Exception处理(C#)
  • @Builder用法