医学数字图像通讯标准(DICOM)的实现

from: http://www.ynradiology.net/Article_Show.asp?ArticleID=652
目的 实现医学数字图像通讯标准(DICOM)。
方法 分析实现DICOM标准的策略。
结果 用C++实现了DICOM标准。
结论 医学图像设备接口标准化的问题是未来医学图像设备成败的一个关键因素,在国内对DICOM标准进行相应的开发研究将对我国医学图像设备标准化作出贡献。
 1 引言
  随着医学影像技术的发展,制造医学影像诊断设备和PACS的厂商越来越多,而有关的图像格式、传输方式却千差万别,这就给PACS及各种设备之间的图像及其相关信息的交换带来了很大困难。为此,美国放射学会(American College of Radiology;ACR)和美国全国电子厂商联合会(National Electrical Manufacturers Association;NEMA)于1985联合建立了一种标准,以利于规范图像及其相关信息的交换。这一标准经过几年的版本更新,于1993年正式成为医学数字图像通讯标准3.0(Digital Imaging and Communications in Medicine 3.0,DICOM3.0)。
  DICOM利用面向对象的技术,基于详细的信息模型(实体-关系模型),给出了DICOM标准中的数据结构-信息对象定义(information object definitions;IODs),以及对这些信息对象的操作-DICOM消息服务单元(DICOM message service elements;DIMSE);同时还定义了消息(包含医学图像或相关信息以及对他们的操作)交换的网络及点对点通讯的支持。应用这一标准的数字图像医疗设备以及PACS,只需进行一些简单的参数设置就可以交换医学图像及其相关信息。关于DICOM标准的详细内容可参阅文献。

  2 DICOM实现策略
  实现DICOM标准往往是根据实际情况的需要,实现DICOM定义的某些特定功能而不是全集。例如,DICOM同时定义了网络传输和点对点通讯对DICOM消息交换的支持,实际应用中往往只选择一种通讯方式。所以,每个DICOM的具体实现是不尽相同的。虽然如此,实现 DICOM还是有一定规律可循的。
  2.1 层次性 DICOM标准还在不断地更新,目前已有14部分及许多补充部分。图1(略)显示了DICOM标准的组成部分图。人一般情况下实现DICOM要分以下三层次进行。
  (1)DICOM消息交换的网络支持层(DICOM第八部分)。这部分是最低层次,是其它层次的基础,这部分主要定义了医学图像及相关信息的网络传输协议,它对应着开放系统互连(Open Systems Interconnection;OSI)定义的网络传输中的会话层、表示层及连接控制服务单元,图2显示了DICOM标准的网络层次结构。由于篇幅限制,有关点对点通讯及媒质交换在这里也不讨论了。
  (2)DICOM消息服务(DICOM第四、五、七部分)。这几部分详细定义了DIMSE及对医学图像及相关信息的操作,包括医学图像及相关信息的查询、存储、打印等服务,是对信息对象的操作。
  (3)DICOM信息对象(DICOM第三、六部分)。这两部分利用面向对象技术定义了信息对象定义及数据字典。它们是实现DICOM的最高层次。
  2.2 面向对象 是DICOM标准的一大特点,整个DICOM标准就是利用面向对象技术定义的,典型的体现在 IODs的定义。IODs有两种类型:普通型、复合型。普通信息对象类仅包含其对应的现实世界实体所固有的属性;复合信息对象类可额外包含不是其对应的现实世界实体所固有的属性。复合信息对象类提供了结构化的框架方法来表达图像通讯的需求。
  由于面向对象技术在DICOM标准中的广泛应用,利用面向对象的编程语言来实现DICOM标准就成为理所当然的了。利用诸如C++、Smalltalk、Java等面向对象语言实现DICOM标准,将有利于工作的顺利开展。
  2.3 易于扩展 DICOM是一个开放的、不断发展的标准。它从1993年至今已从九个部分发展到十四个部分,而且每部分都有所更正和补充,尤其是IODs不断增加,使DICOM标准不仅适用于放射学领域,而且扩展到其它医学信息学领域,其应用范围不断扩展。层次性实现方式有利于DICOM实现的扩展。
  2.4 代码平台独立 DICOM主要应用于各种不同的医疗设备之间进行医学图像及相关信息的交换,所以往往运行于各种操作平台。因此,实现通用的DICOM标准需要代码平台独立性。

  3 用C++实现DICOM
  我们借鉴了国外在实现DICOM上的一些经验,独立对DICOM作了多方面工作,已取得初步成果。其中之一就是利用C++实现了平台独立的基于TCP/IP的DICOM标准。
  3.1 实现DICOM消息交换网络支持 DICOM消息交换网络支持的实现是分两个层次实现的(如图3)。首先要实现平台独立的TCP/IP常用接口Berkeley标准套接字(BSD socket);其次,对DICOM定义的消息传递机制进行封装。图中,上层的DICOM消息传递机制调用封装后的TCP/IP套接字通过网络进行信息交换。
  (1)DICOM标准第八部分定义了通过TCP/IP传输DICOM对象的标准。它对应于OSI定义的网络传输中的会话层、表示层及连接控制服务单元。这部分底层的信息交换,采用了TCP/IP常用接口BSD套接字。由于BSD套接字在不同平台上的接口有些不同,所以采用了面向对象技术对BSD套接字进行了封装,以实现代码平台独立。
  (2)DICOM标准第八部分定义了建立、结束网络连接及传送DICOM对象的消息机制。
  在这里,第八部分定义的所有消息均被封装为对应它们名字的C++对象中,如图3。

  3.2 完成DIMSE服务 实现了DICOM消息交换网络支持后,就应该完成更高层次的DICOM支持,这就是 DIMSE服务。DIMSE服务包括DIMSE-C服务和DIMSE-N服务。DIMSE-C服务允许一个DICOM应用实体要求另一DICOM应用实体对复合信息对象进行操作。DIMSE-N服务仅用于一个DICOM应用实体通知另一DICOM实体某种事件的发生。由于篇幅限制,这里只讨论DIMSE- C服务。
  SOP类与信息对象定义是结合在一起的,但它是通过DIMSE服务来进行操作的。操作是主要由DICOM第四部分定义的,而信息对象定义是由DICOM第三部分定义的。实现DIMSE服务关键是按DICOM的层次结构实现操作与信息对象定义的分离。这是通过实现抽象类来实现的,这些抽象类包括AbstractStorage,AbstractQuery,AbstractRetrieve。这些抽象类可以被继承生成特定的SOP类。这样做可以减少代码重复从而减少错误发生,并且易于增加新的IOD从而扩展适用范围。而抽象SOP类是由DICOM定义的DIMSE-C服务类抽象定义的。
  3.3 完成信息对象定义 DICOM的信息对象定义是由模块组成的,每个模块是一个由一系列属性组成的数据结构。这样定义信息对象有利于DICOM应用范围的扩展。例如,要在DICOM中增加适用于牙科的信息对象定义,没有必要再重新定义病人对象(Patient Object)、研究对象(Study Object)和系列对象(Series Object),只需要定义那些DICOM中未定义的牙科图像特有的属性。根据DICOM构成信息对象定义的方式,将每个组成模块定义为一个基类,由分别继承相应基类的方式就可以组成信息对象。
  我们利用面向对象的方法,分三个层次实现了DICOM标准。这三个层次是紧密相连的,上一个层次需要继承下一个层次的类或调用下一个层次的函数,下一个层次返回数据给上一个层次。在实现过程中,采用了各种方法来保证代码的平台独立性,如封装了BSD套接字及一些操作系统敏感的函数。由于采用了层次实现方法,使得系统更易于扩展,既在每个层次上都可以建立自己的高层次应用。

  4 实现DICOM应注意的问题
  由于DICOM是新兴的且不断发展的,在实现DICOM的过程中会遇到许多问题。在这里我们只讨论两个常见的对DICOM概念理解的错误。
  4.1 应用名称(Application Name) 人们易犯的错误是同一DICOM应用程序在网络上两个不同节点上运行时使用同一应用名称,认为应用名称是程序的一部分。这显然是不正确的。 DICOM标准中是这样定义的应用名称的:DICOM应用名称在网络上唯一标志一个服务或应用。况且C-MOVE服务的一个参数就是移动的目的地的应用名称。如果在一个网络上有两个应用名称,C-MOVE将不知道将信息对象移动到何处。
  4.2 查询格式 DICOM标准定义了基于三个信息模型的层次查询方法。如果一个SCU要在某一个层次进行查询,它必须提供这个层次以上所有层次的唯一关键字。即,如果SCU要在series层查询,它必须提供study层和patient层的唯一关键字。只给出上一层的唯一关键字是不正确的。另外,在某一层次进行查询只能查询该层次的属性,不能查询低层次的属性。
  
5 结论
  DICOM标准已成为业界公认的工业标准,在医学图像传输领域使用DICOM标准已成为趋势。为了适应这一趋势,我们展开了对DICOM的研究工作。为了证明我们工作的阶段结果,我们与国外的一些DICOM公用服务器进行了互连,成功地完成了信息的传递。另外,与MIR 的中心测试节点(Cental Test Node;CTN)软件进行测试也取得了满意的结果。
  目前国际上,DICOM已经成为普遍适用的标准,即大部分医学图像设备及PACS系统都使用DICOM作为其互连标准。而目前国内在这方面的工作开展得还不够,大部分国内生产的医学图像设备、PACS系统都是非标准化(也是非DICOM)接口的。我们正是基于这种认识,对DICOM进行相应开发研究及应用的。

你可能感兴趣的:(DICOM)