本文主要讲述dicom标准及dicom通讯的工作方式。dicom全称医学数字图像与通讯 其实嘛就两个方面 那就是“存储”跟“通讯”。 文件数据组织方式 网络数据组织方式。文件数据组织方式就是解析静态的dicom文件 在 《dicom格式文件解析器》一文中已经阐述过了 就不再说了。网络数据组织方式 简而言之就是各种协议 命令控制 数据序列化。那么这一章中我们将会讲他,但是进行实际操作将在后面几章。
又一篇详尽的Dicom协议介绍:
http://blog.csdn.net/zssureqh/article/details/41016091
dicom标准简介
dicom相关单词整理
association 关联
acquire 影像获取
window level 窗位
RSNA 北美放射学会
vendor 供应商
tag 数据字典 即常说的Tag 以数据元素为单位
IOD 信息对象定义 比如病人、 系统 都是IOD ,但是IOD只是他们的定义 并不特指某个实例
dicom使用UID 在网络环境下标识各种IOD对象
1.2.840.10008.5.1.4.1.1.2 这个特定的UID其实是代表CT图像存储
service class 服务类 store query print c-echo
SOP 服务对象对 IOD跟服务类的结合 表述传输的这个数据对象需要对它进行什么样的处理
VR: Value Representation 可选字段:依赖于传输语法的值类型
modality 成像仪)
LUT look up table
PDU 协议数据单元
modality 成像设备
VM 值的多样化
SCU/SCP (Service Class User/Service Class Provide)服务使用者跟服务提供者
HU 射线相对于水的衰减系数之比 称之为CT值 单位为HU (hounsfield unit)
dicom是一个全球的通讯标准
他是在以下大大的共同努力下开发出来的:
ACR(美国放射学学院)
NEMA(美国电气制造商协会)
ESC(欧洲心脏病学会)
ACC(美国心脏病学院)
SFR(法国兴业法国放射科)
DRG(DeutschenRöntgengesellschaft)
AAO(美国眼科学会)
AAD(美国皮肤病学会)
CAP(美国病理学院)
JIRA(Japaneese放射供应商协会)
COCIR(欧洲放射供应商协会)
...
dicom在93年十月被批准
dicom文档每年更新
DICOM 2003,是DICOM2001的兼容扩展
+27项变更
+3项补充说明
全球工程文档:
http://global.ihs.com
或
免费网址:http://medical.nema.org/dicom.html
DICOM 3.0, DICOM 96, DICOM 98, DICOM 99, DICOM 2000,
DICOM 2001, DICOM 2003
只是文档发布名称而已
这对现有产品一致性并没有直接影响
dicom包括:
影像管理 dicom网络图像传输 dicom网络打印
网络支持,例如。 TCP / IP协议
和。。。多媒体交换/归档
dicom的4个主要功能:
影像管理(其实就是指worklist) 影像查询检索 影像存储 硬拷贝
在今天我们能用dicom做什么实质性的东西?
。dicom能在大多数医学成像系统之间跨平台
。建立简单易于实现的网络
。提高生产效率
。建立未来PACS的必要步骤
dicom编码 :以连续的dataElement的形式进行编码
message=data set
发送者->DataElement DataElement DataElement->接收者
每个element的结构又如下:
Tag VR Value| Length| Value| Field
tag: 在dicom数据字典里的唯一tag定义
VR: Value Representation 可选字段:依赖于传输语法的值类型
dicom 标准由14部分组成
1简介 introduction and overview
2一致性声明 这个是厂商自己对外公开的纯文本性的说明
3信息对象定义IOD 分为简单型 复合型
4 服务类规范 service class specifications 就是对服务类的结构进行说明要实现那些接口 主要描述命令及其产生的结果
5数据结构和编码 怎样对信息对象类和服务类进行构造和编码
6数据字典 所谓的数据字典就是键值对 即属性 一个IOD由多个属性 也就是数据字典组成
7消息交换 MessageExchange 定义通讯所用到的服务和协议 一个典型的dicom消息由一个命令和紧随其后的数据流(可选)组成 这里定义了各服务类所发送和接收的消息 并阐述了以下规则:
建立和终止关联(association)的规则
控制交换网络命令请求和响应的规则
用于建造命令流数据和消息的编码规则 其实就是说怎样去组织这个用于完成特定功能的网络流
服务类的命令和IOD数据都要经过编码成指定结构的数据流才能形成消息 明白了吗 客户端请求打印的时候会说 我要打印这些东西:然后是数据服务命令跟IOD一起包装成套接字数据流
8消息交换的网络通讯支持 大概是说消息交换的底层的东西吧
9消息交换的点对点通讯支持 这个是为了兼容 nema2.0 也就是dicom2.0而定义的东西 不用管
10数据媒体存储和文件格式 说白了这个是描述那些后缀为.dcm的文件组织方式的
11媒体存储策略 不用管
12数据交换的存储功能和媒体格式 不用管
13点对点通讯支持的打印管理 不用管
14灰度显示功能 grayscaleStandardDisplayFunction 这个有用规定了灰度级显示设备的标准 显示方式
2~9部分是重点内容
一个设备或诊断系统为一个应用实体
如果厂商的设备声称支持dicom 那么都应该有一致性声明,就是说你到底怎么个支持法。
一致性声明包括:
1本系统支持的dicom信息对象
2本实体支持的服务类 不同的厂商可支持不同的服务类 。这体现了dicom是一个可扩充的面向对象的标准
3支持的协议
4所支持的表示上下文信息
5本实体的系统配置信息
用户或系统设计人员通过对比两种不同实现的一致性声明 就能够判断出两个系统是否可以进行互操作和通讯
---------------------------------------------------------------------------
dicom通讯的工作方式:
说得那么复杂 其实主要就是soket的dimse通讯 而dimse是属于应用层的就跟http协议ftp协议一样。 就是socket上的数据流而已 只不过这种特定的数据组织方式称之为dimse 。就是说你要自己去实现一个类似http的协议。
dimse由命令集跟数据集组成
命令集指导目标怎样去操作某种东西,数据集就是指“待操作的东西”其实就是指厨师做菜的“材料”。 也不一定所有的都一定要有数据集。比如“我想获取你的机器状态”, 请求端就不需要数据集。有些需要数据集,比如“我给你个图像 你把它拿去存储”就需要数据集。命令集你可理解为通过各种各样不同的命令一起完成了某件事情某个服务。数据集理解为IOD的实例化 比如病人姓名 病人年龄 等tag 一起组成了一个病人实例。dicom就是通过这种服务类跟IOD的组合在两个应用实体间正确的“传达意图”。从而两个设备之间进行互操作,这是dicom设备通讯和互操作的核心思想。
但是在这之前还得进行一件事情 那就是表达上下文协商。
什么叫表达上下文
表达 想象一下人与人之间的交流,我们需要的是正确的传达意图 传达内容,计算机也是一样,但是他们之间先得确定一个一致的方式。从来没有听说我跟朋友聊天还需要协商表达上下文哇 。我勒个去 在现实社会之中我们进行交流可能从来没有意识到他的存在 因为我们在这个环境中生活的太久了 也没有语言障碍 觉得理所当然。表达上下文主要有两个东西 absSyntax 跟transferSyntax absSyntax确定了将要做的事 transferSyntax确定了编码规则。由此可见表达上下文是为了确定两个东西 以让目标计算机能正确的“理解”本地主机所发出的数据。协商的内容 两个实体对同一个应用上下文达成共识。
dicom 的协商过程到底在协商些什么 一件事情的表达 让双方都能够理解 分为词汇跟语义 ,tag就是所谓的词汇 那个tag表示什么命令 哪个tag表示病人姓名。 而数据组织方式就是语义 。通过这样的协商让双方才能够进行正常的dicom通讯
达成共识后我们就需要建立连接
上文说了那么多 但是dimse的基础数据单位是data-element 和pdu
所有数据都封装在TCp协议数据单元(PDU)中进行传输 该层负责TCP连接的建立 释放以及TCP上PDU的传送和接收 为Dicom上层协议提供TCP连接服务DICOM上层服务包括A-ASSOCLATE A-RELEASE A-ABORT P-DATA A-P-ABORT五种服务。这些上层服务允许对等的dicom应用之间建立连接 传送数据 中断连接 DICOM应用实体就是利用这些上层服务来完成消息传送和信息交换。
PDU是一种数据结构 dataElement是一种数据结构
pdu结构总共7种 其中用于连接控制的就占了6种
A-Associate—RQ PDU
连接请求协议数据单元,用于关联请求。
A-Associate.AC PDU
基于DICOM标准的医学图像通信过程的实现
连接接受协议数据单元,
A.Associate—RJ PDU
连接拒绝协议数据单元,
A-Release-RQ PDU
用于对关联请求的应答。
用于拒绝关联请求。
连接释放请求协议数据单元,
A-Release.RSP PDU
连接释放响应协议数据单元,
A.Abort PDU
传输内容的pdu只有一种P.DATA.TF PDU,
当通讯双方建立了关联之后,就可以使用P.DATA-TF所提供的传输服务来实现不同的通信功能了。在最新的DICOM3.0标准中,共列举出11个通讯服务类。其中有5个针对复合IOD的操作,包括C.STORE、C.GET、C-MOVE、C.FIND和C-ECHO;AET唯一的标示了网络中指定系统上的服务或者应用
所以整个通讯过程应该是 应用层也是就是程序段提出需求我需要做什么 比如存储一幅CT图像 ,然后根据各种参数及IOD 确定服务原语 dimse 服务类规范,根据各种参数确定dimse 。然后把这些东西序列化为pdu的方式通过tcp传输出去
从低到高分为五层:TCP Socket层、DICOM上层协议层、消息层、DIMSE(DICOM Message Exchange)层、SCU/SCP层。
TCP保证数据的可靠性传输。
dicom上层协议 ul upLayer(ULP)
其实就是指的那几个associate-RQ RJ 啥的 用来建立关联释放连接
实现DICOM上层协议层,主要是在TCP Socket的基础上,接收来自TCP网
络的数据流,并按照DICOM协议单元关联过程中的A.Associate.RQ/AC的数据结
构分析数据流,然后根据分析的结果,返回相应结构的数据。其核心就是动态接
收数据,并实时对数据进行分析,解析出A.Associate-RQ中的各种参数,并做出
A.Associate.AC回应,完成关联过程。关联过程一旦完成,SCU与SCP之间就可
以实现DICOM中规定的其它服务类操作。
然后就是dimse层(连接建立后的信息交换单元) ,C-Find 那些属于dimse 具体表现为 P.DATA.TF PDU。
dicom应用实体在通信时的流程是:接收命令->确定角色->构成SOP->编码(生成消息数据)->消息数据装进PDU->通过套接字socket将PDU发出。其中的编码部分就是消息层的主要工作。生成的消息由命令集合和数据集合组成。意思是dimse层主要是对SOP进行编码? 而SOP由服务类跟IOD组成 比如用c-store存储一幅图像 貌似就是指的c-get c-move c-find n-get那些东西?他们分为两种操作operation 和返回状态notification dicom3.0里面规定的dimse服务中只有n-event-report 是notification其他的全是operation
然后是scu/scp层 就是啥服务类啊 那些大的功能 比如我想实现一个网络打印,我想实现一个图形存储
原语是个什么东东
C-STORE C-FIND那些是属于DIMSE的 他包括各种乱七八糟的服务原语?
DICOM上层协议是指建立关联 associate 释放连接 那些?
socket层 负责发送P-DATA PDU数据?DICOM最底层的代码?
DIMSE消息服务层的主要功能就是将SCU/SCP层的通信需求转换成DICOM中规定的各种消息服务原语,然后将消息服务原语传给下一层
dicom网络底层 是用PDu的形式进行交换 pdu总共有7种类
其中有6种是专门用来建立释放连接的 只有一种是用来信息及数据交换的
在以后的几篇我们将手把手的分析一个dicom网络打印的通讯过程 并实现dicomPrint_SCP