DICOM协议概述

          参考[url]http://www.dicom3dsdk.cn/[/url]
          在讲述 DICOM 协议前,请先考虑一个问题,如果让你来制定 DICOM 标准,你会怎么考虑,做过网络通讯的人都知道,网络通讯主要包括数据传输和数据编码两个方面,数据传输就好象两个人说话,首先要使用双方都能听懂的语言,然后还要知道你问什么,我回答什么,计算机的网络通讯比人说话复杂的多,可以分为七层,我们只考虑会话层,网络通讯的过程通常是这样的,首先服务端进行监听,客户端向服务端发送数据,服务端收到后对数据进行分析,并把结果发送到客户端,完成一次会话,你看,和人说话是不是很相似。而客户端发送的数据要让服务端能识别,就要考虑数据编码,即使用双方都能解析的编码方式,对于同一个协议,编码方式是事先固定的,在 DICOM 中数据传输被定义为消息交换,数据编码包括数据结构和编码、网络传输支持, DICOM3DSDK 开发包已经对两个方面进行了封装,使得网络通讯非常简单。
1、 DICOM 的消息交换
          我们已经知道客户端和服务端的一次会话可以完成一次数据传输,在 DICOM 中要完成不同的动作(例如存储、查询、转移等),这就需要不同的会话,也就是要区别每种类型的会话,在 DICOM 中这种不同的会话被定义为不同的服务,每种服务用一个标记做区别,每种服务有自己的服务类规范,可以想象, DICOM 的传输方式就是这样的,客户端对数据打包,对标记部分设置为某种服务标记,发送到服务端,服务端收到数据后,读取标记部分,执行服务该服务,最后把结果发送到客户端,完成一次服务, DICOM 中服务端被成为服务提供者( SCP ),客户端被成为服务使用者( SCU )。 DICOM 的定义了 14 个服务,这里我们不具体讨论每种服务的传输过程,因为我们的控件里已经隐藏了这些细节。
 
2、 DICOM 数据结构
        大家知道,要保存、浏览影像,最简单的方式就是使用位图,那么为什么不使用位图?我们又该使用什么样的存储格式?原因很简单,因为在医学影像中,我们不仅仅要看到影像,还要知道影像包含的其他信息,例如病人信息、诊断信息等,所以我们不能使用位图,而是要定义专用的格式,是不是我们把需要的信息按固定长度写到文件里,再加上像素部分就可以了?显然没那么简单,因为固定长度的方式非常不方便,因此 DICOM 中用长度加内容的方式来描述影像信息,为了区分每个信息,我们给每个信息加一个标签, DICOM 中,标签由组标记和元标记组成,可以理解为组标记为影像信息做了大的分类,元标记在大类中分小类,总之标签的功能是区分每个信息并分类,这种包括标签、长度和数据的信息被成为元素,有时元素中可以包括类型定义,用来标记该元素的数据类型,实际上, DICOM 文件就是由不同元素组成的,这些元素的组合我们把它叫做数据集, DICOM 协议中,传输和存储的内容都是数据集,要执行不同的服务,需要使用不同的数据集,那么,我们怎么构造各种数据集呢,可以想象,如果我们定义“人”这个概念,我们可以分解为头、手、脚、胸等不同组成部分,然后可以对各个部分进行再分类, DICOM 的数据集也一样,例如定义 CT 影像,我们可以把它先分为病人信息、诊断信息、序列信息和影像信息,其中病人信息可以包括姓名、编号、性别、年龄等,同样诊断信息、序列信息、影像信息也可以再细化,在 DICOM 中,这种可以细化分类的对象叫做信息对象,每个信息对象有多个数据元素组成, DICOM 标准已经定义了不同的信息对象,因此要定义数据集,只需要找到该数据集包括的信息对象,然后把各个信息对象包括的元素找出来,最后对元素按标签顺序排序,就可以得到需要的数据集,就好象链表一样,但是,有的数据元素可以包括一个或多个数据集,因此我们可以把 DICOM 的数据集看作二叉树结构。对于 DICOM 文件来说,它还包括 128 字节的保留部分, 4 字节的标志和文件头信息,其中文件头信息是一个特殊的部分,它告诉你该文件编码方式是什么。当然使用 DICOM3DSDK 开发包,你只要知道 DICOM 数据集是由不同元素构成的就可以了,不用去考虑内部结构,因为我们已经为用户做了这些工作。

你可能感兴趣的:(职场,休闲,DICOM,PACS)