dicom通讯的工作方式及dicom标准简介

转自:http://www.cnblogs.com/assassinx/p/3223460.html

本文主要讲述dicom标准及dicom通讯的工作方式。dicom全称医学数字图像与通讯 其实嘛就两个方面 那就是“存储”跟“通讯”。 文件数据组织方式  网络数据组织方式。文件数据组织方式就是解析静态的dicom文件 在 《dicom格式文件解析器》一文中已经阐述过了 就不再说了。网络数据组织方式 简而言之就是各种协议 命令控制 数据序列化。那么这一章中我们将会讲他,但是进行实际操作将在后面几章。

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做什么实质性的东西?
1、dicom能在大多数医学成像系统之间跨平台
2、建立简单易于实现的网络
3、提高生产效率
4、建立未来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

时间: 2024-10-14 03:30:34

dicom通讯的工作方式及dicom标准简介的相关文章

LVS三种工作方式八种算法

一.集群简介 什么是集群 计算机集群简称集群是一种计算机系统,它通过一组松散集成的计算机软件和/或硬件连接起来高度紧密地协作完成计算工作.在某种意义上,他们可以被看作是一台计算机.集群系统中的单个计算机通常称为节点,通常通过局域网连接,但也有其它的可能连接方式.集群计算机通常用来改进单个计算机的计算速度和/或可靠性.一般情况下集群计算机比单个计算机,比如工作站或超级计算机性能价格比要高得多. 集群就是一组独立的计算机,通过网络连接组合成一个组合来共同完一个任务 LVS在企业架构中的位置: 以上的

Java NIO的工作方式

1.BIO带来的挑战 BIO即阻塞IO,不管是磁盘IO,还是网络IO,数据在写入OutputStream或者从InputStream读取时都有可能发生阻塞,一旦有阻塞,当前线程将会被挂起,即线程进入非可执行状态,在这个状态下,CPU不会给线程分配时间片,线程将会失去CPU的使用权,即线程暂停运行,这在当前的大规模访问量和有性能要求的情况下是不能被接受的.虽然当前的网络I/O有一些解决办法,如一个客户端一个处理线程,出现阻塞时只是一个线程阻塞而不会影响其他线程工作,还有为了减少系统线程的开销  ,

年终了,学习几条老板最满意的实用工作方式

又要一年了,不要再做个傻傻的程序员,然后不停的问:为什么技术好.工作认真却还败给那些不如自己的人,身在职场,也要看看老板满意什么样的工作方式.         1.汇报工作说结果 不要告诉老板工作过程多艰辛,你多么不容易,在工作中遇到多少阻难,老板不傻,否则做不到今天.举重若轻的人老板最喜欢,一定要把结果给老板,结果思维是第一思维.他最想知道的其实就是你的工作结果,你有没有达到他想要的目的和效果之类.他希望下属能帮他解决问题,而不是向他提出忧虑.         2.请示工作说方案 作为项目的非

稳压电源的工作方式

中港扬盛直流稳压电源线路简单.纹波小.相互干扰小,但体积大.耗材多,效率低(常低于40%-60%).它以改变调整元件(或开关)的通断时间比来调节输出电压,从而达到稳压.这类电源功耗小,效率可达85%左右.那么直流稳压电源的工作方式都有哪些呢?直流稳压电源又称直流稳压器.它的供电电压大都是交流电压,当交流供电电压的电压或输出负载电阻变化时,稳压器的直接输出电压都能保持稳定.稳压器的参数有电压稳定度.纹波系数和响应速度等.直流稳压电源分连续导电式与开关式两类.前者由工频变压器把单相或三相交流电压变到

Rsync的工作方式及Sersync

Rsync的工作方式 单个主机本地之间的数据传输(此时类似于cp命令的功能). 借助rcp,ssh等同到来传输数据(此时类似于scp命令的功能). 以守护进程(socket)的方式传输数据(这个是rsync自身的重要的功能). cp -a /etc/hosts /tmp/ rsync -avz /etc/hosts /tmp/ rsync --delete /null/ tmp/ 推送scp /etc/hosts ***@********:/tmp/ 推送rsync -avz -e 'ssh '

从一个简单例子来理解js引用类型指针的工作方式

? 1 2 3 4 5 6 7 <script> var a = {n:1};  var b = a;   a.x = a = {n:2};  console.log(a.x);// --> undefined  console.log(b.x);// --> [object Object]  </script> 上面的例子看似简单,但结果并不好了解,很容易把人们给想绕了--"a.x不是指向对象a了么?为啥log(a.x)是undefined?".&

Buffer的工作方式

1.Buffer的工作方式 前面<java NIO的工作方式>介绍了Selector检测到通信信道I/O有数据传输时,通过select()方法取得SocketChannel,将数据读取或写入Buffer缓冲区,下面讨论Buffer如何接受和写出数据.通过查看JDK源码可知道,Buffer的构造函数 Buffer(int mark, int pos, int lim, int cap) { // package-private if (cap < 0) throw new IllegalA

MVC4 WebAPI(二)——Web API工作方式

在上篇文章中和大家一起学习了建立基本的WebAPI应用,立刻就有人想到了一些问题:1.客户端和WebService之间文件传输2.客户端或者服务端的安全控制要解决这些问题,要了解一下WebAPI的基本工作方式. (一)WebAPI中工作的Class 在MVC中大家都知道,获取Request和Response使用HttpRequest和HttpResponse两个类,在WebAPI中使用两外两个类:HttpRequestMessage 和HttpResponseMessage,分别用于封装Requ

单片机定时/计数工作方式

单片机中的定时/计数器都能有多种用途,要通过定时/计数器的方式控制字来设置,需要的用途. 在单片机中有两个特殊功能寄存器与定时/计数有关,这就是TMOD和TCON.,TMOD和TCON是名称,我们在写程序时就能直接用这个名称来指定它们,当然也能直接用它们的地址89H和88H来指定它们(其实用名称也就是直接用地址,汇编软件帮你翻译一下而已).     TMOD被分成两部份,每部份4位.分别用于控制T1和T0.TCON也被分成两部份,高4位用于定时/计数器,低4位则用于中断(TF1.0在这).TR0