注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

中吴南顾惟一笑

成功法则就是那19个字

 
 
 

日志

 
 

[转]初识DICOM标准  

2009-12-21 21:17:06|  分类: consulting |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
在医疗影像通讯领域DICOM标准已经成为主导标准。然而,尽管DICOM标准在厂商那里唾手可得、应用广泛,并且在迅速扩展进入包括非放射影像在内的新领域,仍然有很多放射专家仍然对DICOM认识不足。这种情况出现的部分原因是DICOM的“学习曲线过于陡峭”,现有的DICOM介绍材料不是写给工程人员的对于放射专家来说太过技术性,就是写给高层管理人员对于放射专家来说太肤浅了。
为什么我们要对这样一个看上去很简单的东西大费周章呢?答案是,事情并不想它看上去那么简单。通常放射专家都对胶片影像了如指掌,胶片影像在任何有光源的地方都可以观看。当我们把传统胶片影像转化为数字影像的时候需要面对一系列的问题,传输、显示、存储等等,这时候DICOM的出现就很必要了。在胶片时代,曝光、处理流程和读片工作中的细微变化对工作影响不大。而在数字影像时代,几个字节的差异就足以中断影像在系统之间的传送。

电子通讯通常被划分为不同的层次,每一个层面上完成相应的功能。这种将通讯标准划分成不同层面的模型实际上是一个国际通讯标准的一部分,此标准就是ISO-SOI(国际标准组织开发系统互联)参考模型。这个模型可以类比为一个生产加工厂的结构。在这个模型的最高层面是用户应用程序的界面(比如在一个计算机终端上用户可以通过应用程序跨越网络访问数据)。这个层面相当于工厂的决策者他们决定工厂生产什么样的产品,运输什么样的货物。在模型的最低层面是物理层,这个层面为电子通讯提供物理介质(比如:线缆)。这个层面相当于运输部门的货车。模型中的“高层”和“低层”并不是表示不同层面的重要程度,实际上高低的区别只是因为不同层面象一个堆栈,物理层在最下面,应用层在最上面。
在最高层和最低层之间,还有其他层面负责解决类似下列问题:用什么样的字符集来显示信息;用什么样的规则在物理层上建立连接;如何处理通讯过程中出现的错误等等。这些中间层面类似于我们假象工厂中不同的职能部门,每个都承担着特定的功能(比如:零件选择、制造装配、质量控制、规划运输路线等等)。在电子通讯模型和假象工厂中发生着同样的情况,每个层面(部门)从上一个层面(部门)获得信息,按照预定功能工作,将结果输出到下一个层面(下游部门)。

任何两个层面之间的交换都是无往不复的,因为所有通讯(正如同货物在不同公司之间的交流)都是双向的。在通讯术语中,信息在不同层面之间的流动被称之为层面提供的服务。然而,通讯意味着信息的交换,因此,还需要对方设备上有相对应的层面并且有物理媒介的连接。

我们的假想工厂加工并且运输自己的产品到另外一个公司,在那里经过组装产生新的产品。后面这个公司并不把产品原封不动地送回到去我们的假想公司(除非他们收到劣质产品要退货),不过他们要把货款发送回来。两个公司的物流部门需要为双方货运制定计划和规则(比如,不要在在长假期间发运保鲜货物)。同理,两个电器设备之间的的通讯也需要事先设定的规则或者协议,这样设备间相对应通讯层面才能连接。在电子通讯中,两个设备之间真正的数据流动只存在于物理层。然而,由于建立了机遇层面的通讯模型,每一个层面可以看作和对方设备的对应层面基于已有协议的直接通讯。在提供本层面的服务时,一个层面在所接收到的数据上加入一些信息然后发送给下游层面,下游层面接收到数据后也作相同的工作。在接收端,数据在向上穿行过各个层面的时候,每个层面提取从数据中出自己所需要的信息实现层面功能。在我们的假想公司中,质控部门会在产品的包装上贴合格标签再将其送到物流部门发货,而在收货的公司,产品接收后会开包验货,公司的质控部门会检查产品的合格标签并且确认产品没有任何运输损坏。只有产品通过检查后,才会被发送到别的部门接受进一步处理,最后财务部门会得到签收通知安排付款。在上述过程中的协议保证了发货人在产品上粘贴了正确的质控标签,而收货人可以根据发票检查产品数量和质量。如果过程中有人违反协议(比如发货人没有检查产品,或者忘记了贴标签),产品将被拒绝接收(收货人拒绝收货或者扣留货物直到问题解决)。

电子通讯的层面模型优势之一是当一个层面被新层面替代时其他层面不受到影响。

不同层面的集合通常被称为栈或者协议栈。DIOCM标准使用了层面通讯结构,实际上它并没有新建一个标准通讯栈而是直接使用了一个已有标准。可能有人会问,如果DICOM仅仅是使用了一个已有的通讯标准,它还有什么意义?为什么不直接用那些现有的通讯协议标准呢?

DICOM标准的意义和其功能的重要性,可以用个假想制造厂之间的交易来解释。

假想你是产品开发部的经理,现在需要一些零件来组装一个原形产品。于是你要求你的采购经理贝蒂从埃克美零件公司采购一些零件。贝蒂知道最快捷的办法就是打电话给埃克美公司订货,但同时她也知道你需要的零件非常抢手很可能已经销售一空。她拿起电话拨号,听到了熟悉的声音:“你好,这里是埃克美公司,请问你要找哪位?”贝蒂回答道:“请转销售部鲍勃罗伯茨。”

贝蒂刚才所做的工作非常类似于一台设备使用DICOM协议与另外一台设备通讯。当她拿起电话,她首先要求线路畅通。她听到的拨号音告诉她线路正常(如果没有拨号音则说明线路有问题)。同理,DICOM标准通过服务请求与网络上的另一台设备通讯。网络协议会首先探测网络是否可用。如果可用,DICOM协议就将发起一系列的活动,由此产生一个对另一台设备的连接。

拿起电话拨入需要接通的号码然后倾听回应,你就遵循了一系列通讯协议。首先,你遵从一定的规则拨号。如果你在办公室里拨号,可能还要先拨一个外线号码,如果对方不在本地,你还要拨对方的区号。然后你听到对方的振铃声,你知道对方没有占线,否则你的“协议”会引导你挂上电话等会儿再拨。

电话那一端的人所说的头两个字就很有意义。它告诉你两件重要的事情,首先对方所说的语言是你能够听懂的,其次你没有拨错号码。如果你听到的回答是“Moshi moshi, Fujiyama Denki desu”,你可能会马上挂断电话或者寻问对方是不是你要找的人。在这种情况下,会发生某种谈判,你会询问对方的电话号码,对方也会改说一种你能够听懂的语言。你假设对方能够听懂你说的话,而对方此时的反应决定了你下一个问题是什么。

DICOM协议也是用过发起某种谈判来建立连接的。这些谈判的主要内容是判断发起通讯的设备希望完成什么工作,以及接受设备能够完成什么工作。实际上,在DICOM协议中并不是设备本身完成这些谈判,而是其上运行的软件完成这一功能。DIOCM协议作为设备所支持的一个应用实体而存在,因为发起建立通讯是应用层(通讯栈中最上面的一个层面)的功能。

正如同你在电话中的谈判确定了通讯双方的基础能力(比如,使用的语言,对方的身份等),DIOCM中的连接建立也需要谈判来确定能力。应用实例的连接发起方将希望完成的工作编成一个列表发给对方。而接收方回应一个能够完成工作的列表。后续的交流是在两个列表的交集范围内进行的。举个例子,对于大于8位的数字像素值不同系统的处理就不同。有些计算机系统先发送最小有效字节,而有些系统则恰恰相反。如果两个系统用相反的表示方法传送数据,将导致错误数值出现。解决办法是设备能够发现这个问题,并且自动转换数值。DICOM协议对两种表示方法都支持,因而在信息交换前的谈判中有一个内容就是检测设备使用哪种方法。

另外一个影像设备之间的差异是对数值的表示方法。正如后面将要详述的,DICOM标准将所要发送的信息分解为一系列的数据元素。对于数据元素中所包含的数值,不同的应用程序会有不用的表示方法。DICOM对所支持的数据类型有着非常明确的定义,被称之为数值表现方法(VR)。其中包括了不等长混合字符串(像一个句子那样包含了开头、结尾和一连串顺序字符的文字串)、二进制数据、时间和日期数据以及人员姓名数据等等。在早期的ACR-NEMA标准中,这些VR被定义在所谓数据字典的一组标准中。如果你需要编写能够接收ACR-NEMA标准数据的应用程序,为了解释接收到的数据,你需要在数据字典查询ACR-NEMA元素标签才能了解数据元素中包含什么样的数据以及如何表示这些数据。DICOM标准需要扩充新的VR标准,未来的进一步扩展将增加数据字典的大小和复杂性。这也就是为什么在DICOM标准中同时支持ACR-NEMA方法和在数据元素中定义VR的新方法。 DICOM新定义的方法VR被定义在数据元素中,这样就不免了可能的混淆。对于软件设计人员来说,新方法减少了查阅数据字典的负担。在数据字典中定义VR的ACR-NEMA方法被称做内部VR;而DICOM所使用的在数据元素中定义VR的方法被称为外部VR。DICOM同时支持这两种方法,在通讯能力谈判时知道这一点很重要。

不论是VR方法还是字节顺序都是谈判信息的一部分,这些信息对成功建立信息交换至关重要。这些信息被称做传输语法,被定义在DICOM标准中。在建立连接的最早期阶段,使用何种传输语法进行信息交换是主要的谈判内容。

DICOM标准的最重要的意义就是尽可能明确地定义影像传输过程中涉及到的术语词汇和模型。并且保证接收此协议的用户能够方便使用这些定义。在比较高层面的通讯中(比如用户之间的通讯) ,对术语词汇的认同非常重要。不论实在放射科内部还是在放射科与其他学科交流中,明确地术语定义是保证沟通准确的前提。举例来说,对于“中间”和“侧面”的不准确理解,对于一个基于放射科报告作出诊断的外科医生来说会直接导致灾难性的后果。美国病理学协会已经在“系统化医疗术语”(SNOMED)标准上作了一些工作。这个也被称为受控词汇表的术语标准是基于解剖学和病理应用的。现在美国病理学会是DICOM标准委员会成员,并且正在致力于开发一个新的SNOMD章节用于影像描述。这个章节也被称作SNOMED-DICOM词汇表。

DIOCM标准的定义范围已经超越了术语词汇、测量值和环境变量等范围。它还定义了实体之间的关系模型。举例来说,一个患者和一个他所做过的检查之间的关系。这个例子中两者之间的关系可以用一个简单的字来描述“做过“。一个患者做过一个检查。同理类推,一个检查包含一系列影像。通过对临床活动的研究,流程也可以被定义为标准模型,在这个模型中定义了一组实体(比如:患者、检查、影像、报告)以及实体之间的关系。这个流程称为实体关系模型(E-R)。值得注意的是实体关系模型通常是一个图表,并不描述具体数据的流动方向。

在E-R模型中每一个实体都有其描述或者属性。例如,患者这个实体可以用下列属性来描述:姓名、年龄、性别、病案号、身高体重等等。所有这些属性可以用来标志或者描述一个特定的患者。DICOM标准不但定义了E-R模型,而且定义到了模型中每个实体的具体属性。实际上,DICOM中使用的属性就是ACR-NEMA标准中的数据元素。

定义E-R模型和模型中实体属性的过程式信息分析和建模工作的重要内容。这个分析和建模过程就是面向对象的分析。这项技术与现代计算机科学紧密相关,目前不使用面向对象分析方法的信息科学几乎是不可能的。建立E-R模型的部分目的就是得到一个面向对象的结果:实体就是对象,用属性来描述对象。

DICOM的设计逻辑中部分地采用了面向对象方法。类似影像、报告、患者这样的实体在DICOM中被称为信息对象,因为它们的功能就在于承载信息。对于信息对象构成的定义在DICOM中被称为信息对象定义。信息对象定义的实质就是一个属性列表,这些属性分成必要属性,可选属性和条件属性(这种属性在某些条件下是必需的)。在描述信息对象细微的差别都有重大的意义。信息对象定义类似于一张包含很多空白字段的表格。象患者姓名、病案号这样的信息片断都可以当作一个属性。即使一个空白表格,也代表了一定的信息结构意义。当表格中的空白被填满,属性被赋予数值,对象就有了具体的实际意义它可能代表一个患者,一幅影像或者其他什么对象。这个填表的过程,也就是为属性分配数值的过程就是所谓的创建信息对象实例。

在ACR-NEMA标准的第一和第二版本中并没有使用面向对象的分析和设计思路。 相反地,所有的属性(这里叫做数据元素)按照用途分组。举例来说,描述患者身份的元素分为一组,而描述检查影像获取方法的元素分为另外一组。因为这些版本没有依照E-R模型开发,所以这些分组也不符合面向对象定义的原则。举例来说,在ACR-NEMA第二版中关于CT检查影像的描述元素中也包含了患者姓名。按照E-R模型,患者姓名应当是患者对象的一个属性,而不属于影像对象。换句话说,即使CT影像需要使用患者姓名来做标志,患者姓名也不是CT影像的必要描述内容。这些复杂对象可以看作是由E-R模型中多个实体组成的集合。

产生这些问题的原因在于DICOM标准开发者(当时还是ACR 和NEMA) 仍然希望保持新标准对老版本的兼容性。另外一个原因是,当时的计算机技术人员认为对象应当有具体的数值,而不是离经叛道地让对象包含一些属性。首先,从存储设备中调用复杂对象会更有效率,因为如果对象被拆分为更细小的元素,那么在调用的时候需要在存储中搜索更多更小的元素,耗费更多的时间。因此,DICOM标准继承了所谓的复杂数据及结构,称之为复合对象。遵从面向对象设计原则,DICOM标准E-R模型定义的新对象并不包含除子对象属性外的任何新属性。这些DICOM定义的新对象叫做规范化对象。影像对象(比如CT,超声和MRI的影像)都是复合对象,用于影像及其报告管理的对象是规范化对象。

正如同某些工业品标志有唯一识别号码一样,包括影像、报告及其他一些由一台影像设备传输到另外一台设备的信息都需要唯一识别号码。DICOM定义了UID来起到这个作用。UID的格式遵从国际标准,当正确使用时,这个识别码不但在一个机构内是唯一的而且应当在全球范围内是唯一的。UID号码大多是由计算机软件生成的,其结果是号码看上去晦涩难懂。在DICOM标准中任何时候一个对象指向另外一个对象时都要使用UID。举例来说,我们前面提到的不同的传输语法就有不同的UID,这样当设备通讯时可以利用UID来指向某个特定的语法规则。作为国际标注组织的一部分,DICOM委员会负责申请并获得了一个特定的数字字段用来定义DICOM的UID。这个数字字段被称为组织根字段。DIOCM组织获得的字段是1.2.840.10008。在这个根字段上可以附加数字作为标志码。比如说,UID1.2.840.10008.1.2.1就表示了DICOM协议众某个特定的语法。组织根字段根据UID由厂商发放还是由用户发放而略有不同。在这些数字中间出现的符号看上去似乎把数字分成了几个有特定意义的字段,但实际上它们并没有什么意义。UID仅仅给特定对象一个唯一标识,并不附带关于被标识对象的任何信息。

在与设备通讯的同时,你还需要设备能够提供一些服务(比如,显示器能够显示影像,打印机能够打印,归档设备能够存储)。我们前面提到的谈判过程,就是设备声明其能够提供服务类型的方法。

DICOM为其所定义的信息对象制定了标准化的服务类型。这些服务是基于一组数据元素服务而建立的。因为DICOM的信息对象包括复合对象和规范化对象两种,相应的服务也分为复合服务和规范化服务。所有服务都是通过一组数据元素服务来实现的。在我们的例子中,填写订单这个服务实际上就是由一组简单的动作组成的。首先是接线员接听电话,然后转接到销售部门,销售人员根据电话提示书写订单后将复印件发送到付款部门。这样一组小的活动,组成了填写订单这个服务。同理,DIOCM也将其复杂的服务分解成一些小的服务元素,称之为DICOM消息服务元素,简称DIMSE。对于复合信息对象定义了五种DIMSE(叫做DIMSE-C),对于规范化信息对象定义了六种DIMSE(叫做DIMSE-N)。所有这些DIMSE可以分为两类:操作(比如“存储”可以把信息写入存储设备);通知(比如“事件报告”用来通知设备有事情发生)。这些简单的DIMSE构成了影像归档和通讯系统中所需的服务。这些服务包括“归档”(用来将信息对象写入归档设备)和“查询-调阅”(用来在存储设备上提供信息查询和调用功能)。某些服务要求DIMSE成对出现才能正常工作(比如“发送存储”和“接受存储”,另一些服务则需要多个DIMSE才能实现(比如:查询-调阅)。在“查询-调阅“服务中使用了“find”“get”和“move”三个DIMSE。

由于DICOM的面向对象特性,服务通常被称为服务类。这样称呼的部分原因是对于某个制定的服务,可以被多个(或者多类)信息对象所使用。了解一台设备到底是服务的提供这还是服务的使用者非常重要。举例来说:工作站中的文件系统可以提供影像存储服务,而超声机利用工作站的存储服务来存储和最终显示影像。DICOM标准用服务角色来描述这个差别。设备可以是服务的提供方,或者是服务的使用方,也可以两者都是。毫无疑问,如果一个系统中的各个设备能够正常通讯,明确各自的角色就是前提。这一点需要在我们前面提到的谈判过程中明确,换句话说,在功能列表中不但要明确能够支持什么样的服务类,而且要明确对应服务类的角色。

信息对象和服务类是DICOM标准中两个最基础的部件。在首先理解了这些部件之后才有可能理解DIOCM的功能和用途。信息对象定义了医疗影像的核心内容,而服务类定义了这些内容能做什么事情。

服务类和信息对象结合成为DICOM标准中的基本单元,这个单元叫做服务对象对(service-object pair) 简称SOP。既然DICOM是个面向对象的标准,SOP实际上被称为SOP类。SOP类是DICOM的最基础单元,DICOM中任何功能的实现都是基于对SOP类的使用。

服务和信息对象的结合简单直接。举例来说,DICOM定义了一系列的存储SOP类(比如,CT影像存储SOP类,MR影像存储SOP类)。CT影像存储SOP类是由CT信息对象定义和存储服务类组成和,其他存储SOP类也是用类似的方法组成的。因为SOP类是一种描述DICOM功能的方法,所以它也有自己的UID。而且一旦信息对象的属性被赋值,服务类的变量被确定,SOP被实例化时它就有了自己的UID。

  评论这张
 
阅读(533)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017