基于VC++的医学图像传输系统

2015-03-16 09:53姜晓鹏
电脑知识与技术 2015年1期

姜晓鹏

摘要:以VC++为开发平台,创建DICOM图像核心类,实现了DICOM图像的传输。首先介绍医学图像传输过程,然后分析DICOM应用实体关联协商及数据传输关系,最后阐述了系统实现的技术。

关键词:VC++;远程医疗系统;图像传输;医学数字成像和通信

中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2015)01-0137-03

Medical Image Transmission System Based on VC ++

JIANG Xiao-peng

(The Peoples Hospital of Sichuan Longchang, Neijiang 642150, China)

Abstract:DICOM image transmission is achieved By using VC++ to create a DICOM image core class, The process of Medical image transmission is introduced firstly, then the DICOM application entity related consultation and data transmission relationship is analyzed, the implement technology of system is elaborated at last.

Key words: VC++;Remote medical system; image transmission; DICOM

随着科学技术的不断发展,临床广泛应用医学成像设备,医学图像在医疗总的信息比例占到了医学信息量的70%—80%以上,各种数字医学图像已经成为医生提供了诊断各种疾病的重要依据。但由于缺乏统一的医学图像标准和一致性接口,造成不同生产厂商的医学成像设备的医学图像存储方式、存储格式、图像传输方式都不同,导致各种医学设备难以共享图像。 DICOM(Digital Imaging and Communications in Medicine)标准的出现为医学数字成像和通信提供了统一的标准,它支持TCP/IP网络,规范了医学图像及各种数字信息的格式,很好地解决了医学图像信息的存储、共享等问题。

1 医学图像传输过程

医学图像传输协议采用DICOM 通讯协议,DICOM 通讯协议处于 TCP/IP 协议之上,主要实现 OSI 的会话层、表示层和应用层的功能,采用DICOM 通讯协议进行通信时,不用关心各层内部的具体实现过程,只要利用上下层之间的接口函数即可实现通信,非常方便程序的升级和维护。根据 DICOM 标准自身的层次结构,传输系统采用分层方法进行设计并实现 DICOM 的传输。医学图像传输过程主要有这几个步骤,如图1所示。

1) 建立协商:将进行数据传输的雙方必须先建立协商关联,确定传输数据的类型、字节顺序和对传输的数据进行编码等,为 DICOM 的服务对象对之间的数据传输做好准备,只有协商建立后,方可进行传送消息、释放、终止等过程;建立协商时,请求方发送一个关联请求数据传输单元 PDU,接收方接收到这个 PDU 后,对这个 PDU 的进行检查,然后发送关联回应或拒绝 PDU。

2) 数据传输:经过协商以后,服务对象对双方对要进行传输消息,一个典型的 DICOM 消息是由一个命令流(如果需要的话)和一个数据流组成的。下面以存储服务类为例介绍 DICOM 通讯过程。

①服务请求方通过 C-STORE 请求原语要求服务执行方存储 SOP 实例,服务执行方DIMSE 协议机接收到 C-STORE 请求原语后,根据请求原语生成一个 C-STORE-RQ 消息,然后将C-STORE-RQ 消息分成 PDV 封装在 PDU 中,再使用 P-DATA 请求服务将该消息发送。

②服务执行方 DIMSE 协议机接收到 C-STORE-RQ 的消息后,向 DIMSE 服务执行方发出C-STORE 指示原语,服务执行方根据 C-STORE-RQ 的消息判断是拒绝还是接收这个消息,然后向服务执行方 DIMSE 协议机发出 C-STORE 回应原语。

③DIMSE-C 协议机收到来自服务执行方发出的 C-STORE 回应原语后,根据请求原语生成一个 C-STORE-RSP 消息,把C-STORE-RSP消息分成 PDV 封装在 PDU 中,再使用 P-DATA 请求服务将该消息发送。

④服务请求方 DIMSE 协议机收到传递 C-STORE-RSP 的消息后,向服务请求方发出C-STORE 确认原语,完成 C-STORE 协议过程。

3) 关闭连接

为了网络的过分臃肿及增加其他用户的访问数目,已建立的连接的服务对象对在数据正常传输后,需要关闭已经建立起来的连接。使用 A-RELEASE 服务可以用来在对等应用实体间正常有序地结束连接,而且不会造成任何数据的丢失,而 A-ABORT 是用来强行终止应用连接,可能造成数据的丢失。

对于医院影像中心的CT、MR、CR、DR等支持DICOM Storage SCU的设备,可通过在设备上设定DICOM 3.0技术参数(例如:AE Title,IP Address,Port NO.等信息)直接接入PACS系统,将其影像传输至服务器及存储系统进行集中存储管理。通过DICOM Storage方式可获取原始的影像数据,可保证影像及相关信息的完整性。

对于医院影像中心的非DICOM设备(超声、内窥镜等),使用PacsGate DICOM网关进行影像采集,PacsGate将采集的影像转换为标准DICOM影像并与病人信息进行整合后归档到PACS服务器。只要采集设备采集分辨率高于原始图像分辨率,就可保证获取图像在诊断过程中的质量要求。

2 图像传输

DICOM标准是PACS系统所遵守的通信协议,DICOM通信主要基于客户端/服务器模式,并通过SCU和SCP服务类交互的实现信息传输,DICOM通讯是采用面向对象方法进行信息的传递,方便了面向对象语言对通信模型的开发和设计。DICOM医学图像存储、管理、检索等相关应用都要建立在TCP/IP协议上的DICOM上层协议层。

2.1 通信模型

DICOM标准的通信是利用现有的网络通信协议栈发展起来的,DICOM协议是建立在TCP/IP协议基础之上的一个协议,是(OSI)7层协议的子集,DICOM是以TCP/IP协议栈的四层结构(网络接口层,网络层(IP层),传输层(TCP层)以及应用层)实现通信,利用TCP/IP协议的Socket通信机制来实现TCP连接,因此,DICOM标准通信模型可分为五层:SCU/SCP层,DIMSE(DICOM消息服务元素)层,消息层,DICOM上层协议层(ULP)和TCP Socket层,如图2所示。

2.2 DICOM 通信实例

DICOM 通信的整个过程如图3所示,首先客户端(SCU)先与服务器端(SCP)之间通过调用SOCKET 函数建立一条TCP连接,在建立了TCP连接之后,客户端将医学图像传输存储命令(C-STORE)交给 DIMSE 层;DIMSE 层调用 C-STORE 服务类并结合医学图像数据便确立了一个 SOP 对象,因为这个CT图像已经是DICOM文件格式,所以直接对该图像文件进行分解,包括导言、前缀以及各个数据元素(这里主要是像素数据元素),C-STORE服务类与它们确立成服务对象对。然后,在消息层进行编码,生成请求消息。ULP先构建发送A-AssociateRQ PDU到SCP端请求协商建立关联,如果收到A-AssociateAC PDU则表示关联经协商建立成功,此时可将已生成的请求消息装入P-DATA-TF PDU中再通过 TCP SOCKET 层发送出去。服务器端接收的过程则正好相反:接收PDU——从中取出消息——进行解码——根据解码后的数据调用 C-STORE类——完成指定的操作(存储医学图像)。一切结束之后服务器端会根据结果构造响应消息,再通过ULP的P-DATA-TF PDU将响应消息送回客户端。客户端收到消息后构建并发送A-ReleaseRQ PDU便可结束与服务器端的关联了。至此,便完成了CT图像从客户端到服务器端的传送和存储。

3 系统实现

3.1 开发平台

DICOM 标准引入了信息对象以及服务类,Microsoft 的 VC++是一种面向对象及类的编程工具,非常适合DICOM的开发,且C++语言中的多态性、继承性以及封装性等可大大提高实际编程的工作效;而DCMTK(DICOM Tool Kit)是一套针对 DICOM 标准,它用ANSI C 和 C++混合编程,实现了医学图像的传输、存储和打印等功能,实现了DICOM标准的绝大部分功能,完全以源代码的形式呈现。因此,系统采用WINDOWSXP+VC6.0为开发平台,在开源软件开发包 DCMTK(DICOM Tool Kit) 的支持下开发出了DICOM 通信系统。使用DCMTK开发包时,使用构建工具 CMake 来构建项目工程后,再用VC++编译dcmtk工程,并生成一些静态连接库和exe文件,在VC++下开发需要使用的静态连接库和头文件分别都复制dcmtk_lib和dcmtk_include中以便引用。

3.2 将协商涉及的消息用类进行封装

定义了三种用来接收消息、发送消息和读取消息的长度的公共方法(Read,Write 和 Size 函数),此外,对于每个 DICOM 定义的消息,都将其定义成一个类,各个类的功能如下。

1)“关联建立请求类”CAssociateRQ:请求关联建立的协议数据单元(A-ASSOCIATE-RQ-PDU)的结构和相关操作。

2)“关联建立接受类”CAssociateAC:接受关联建立的协议数据单元(A-ASSOCIATE-AC-PDU)的结构和相关操作。

3)“关联建立拒绝类”CAssociateRJ:拒绝关联建立的协议数据单元(A-ASSOCIATE-RJ-PDU)的结构和相关操作。

4)“关联释放请求类”CReleaseRQ:请求关联释放的协议数据单元(A-RELEASE-RQ-PDU)的结构和相关操作。

5)“关联释放响应类”CReleaseRP:响应关联释放的协议数据单元(A-RELEASE-RQ-PDU)的结构和相关操作。

6)“关联结束类”CAbortRQ:在对方还没有响应的情况下,,强行关闭已建立的关联,,并结束下层的 TCP/IP 协议的 Socket 连接。

7) CBuffer 缓冲区类:是一个抽象基类,其、提供1进1出两个存储缓冲区,分别用于从外界(网络或磁盘)读入和向外界(网络或磁盘)发送数据。

3.3 选择 Socket 服务支持

DICOM 通信协议在 TCP/IP 协议之上,要使用 TCP/IP 提供的服务来完成其功能。在开发过程中,应注意,虽然 MFC 提供了封装好的 Socket 服务类 CSocket 和CAsyncSocket,但是可以选择直接使用 Windows Socket API 函数来提供对 DICOM通信的底层支持。这样做是为了满足两方面的需求:一是使得可扩展性更强;二是为了满足 DICOM 协议对 TCP/IP 网络功能的具体要求,如超时控制等。这比使用封装好的 Socket 服务类灵活性更大。在 DICOM 通信中使用的 API 函数包括 open,accept,listen,recv,send,close,gethostbyname,getservbyname 等。

4 结束语

医学数字图像通讯作为一门新兴的综合应用学科发展到今天,大大推動了医学数字图像的存储、共享、通信以及远程诊断的发展。远程医学图像传输系统投入使用后,医务人员能在第一时间方便、迅捷地查阅病人的影像及诊断报告,使医生突破胶片的局限,及时对病人的影像进行全方位的处理和观察,以便得出更准确的诊断,也优化了病人就诊流程,极大地缩短了病人就诊时间。此外,远程医学图像传输系统还能通过Internet传送数字化影像,实现远程影像会诊。

参考文献:

[1] 包志华,汤乐民.医学图像处理、存档与通信[M].北京:科学出版社,2013.

[2] 田捷.医学成像与医学图像处理教程[M].北京:清华大学出版社,2013.

[3] 周振环,伍云智,赵明.医学图像编程技术[M].北京:电子工业出版社,2010.

[4] 罗述谦,周果宏.医学图像处理与分析[M].2版.北京:科学出版社,2010.