何 博 曹晓光 杜振洲
(北京航空航天大学图像中心 北京 100083)
DICOM 网关是医学图像存档与通信系统(PACS) 的关键部分,用于接收、存储、转发DICOM 医学图像,实现了DICOM存储和通讯的关键技术。本文介绍了DICOM 网关的详细设计过程以及在Windows 2000/ XP 操作系统下利用DCMTK工具包实现DICOM 网关的具体方法,并进行了对比测试和结果分析。
引言
医学图像存档与通信系统(简称PACS) 是遵循医学数字成像和通讯标准(简称DICOM) 的计算机网络系统。PACS 应用网络通讯和计算机图像处理技术,整合全医院医学图像的获取、存储、传输、显示和管理,从而改进医学图像的管理质量,提高工作效率,降低管理成本。DICOM 网关用于接收、存储、转发DICOM 医学图像,因此, DICOM网关是PACS 的关键部分之一,其实现技术也是PACS 的关键技术之一。本文在研究DICOM 国际标准和改造流行的DICOM 开发工具包DCMTK的基础上,进一步设计实现了Windows 2000/ XP操作系统的DICOM 网关程序。本文阐明了需要解决的各类实际问题和总体解决方案的设计构想,并进行了程序对比测试和结果分析,涉及的思路、方法和结果可供同类相关研究和开发参考。
1 DICOM 网关总体设计
1. 1 图像存储方案
PACS 中图像有两个特点: (1) 图像数据量大;(2) 访问频率高。由于关系数据库支持海量图像数据的高频率访问能力差, 直接在诸如Oracle 或SQL Server 等关系数据库中存储DICOM 图像,将无法满足PACS 存储海量数据和即时响应的要求。PACS 采用如下图像存储方案:将DICOM 图像所包含的相关信息存储在关系数据库,将图像数据以文件的形式存储在图像存档服务器( Picture Archiving Server ,简称PAS) 中,通过DICOM 图像所包含的病人、检查等信息为数据库和PAS 建立对应关系。
1. 2 图像传输流程
PACS 中DICOM 图像流程如下:
(1) 登记工作站登记病人信息,在数据库中建立该病人的记录,将病人信息填入数据库;
(2) 操作医疗设备的检查医生将病人信息登记到医疗设备中,然后进行检查;
(3)DICOM 网关从医疗设备获取图像;
(4)DICOM 网关将图像转发并存储到PAS ;
(5)DICOM 网关将图像在PAS 的存储目录写入该病人的数据库记录中;
(6) 诊断工作站调用病人图像时,首先访问数据库中该病人记录,获取DICOM 图像在PAS 中的存储目录;
(7) 诊断工作站根据存储目录以FTP 方式获取PAS 上的图像,进行阅片或其他处理。
整个过程如图1 所示,其中虚线代表信息数据流,实线代表图像数据流
1. 3 DICOM 网关工作流程
根据PACS 中图像传输流程,自行设计的DICOM网关用于实现图像采集和图像存储功能。DICOM 网关负责完成1. 2 节中描述的第(3) 、(4) 、(5) 步工作,需要实现的功能包括: (1) 与医疗设备实现DICOM 通讯并存储DICOM 图像; (2) 转发DICOM 图像到PAS ; (3) 访问数据库。DICOM 网关的工作流程如图2 所示。
2 DICOM 网关详细设计
2. 1 图像采集机制设计
DICOM网关负责采集医疗设备产生的DICOM 图像。根据DICOM 协议,连接的双方通过应用实体(Application Entity ,简称AE) 进行通讯,AE 的名字叫做AE Title。AE 代表了某个进程,它必须拥有物理网络中唯一的网络地址,即表示层地址。由于DICOM 采用TCP/ IP 作为底层协议,AE映射到表示层地址就是IP 地址和TCP 端口号。在进行实际的DICOM 设备连接时,必须设置AETitle、IP 和端口号这三个参数,才能接收DICOM图像。设置参数后,DICOM 网关监听网络消息,接收到DICOM 连接消息后,协商传输语法、应用上下文、表示上下文等内容,一旦协商成功,就与医疗设备建立连接,进行数据传输,实现DICOM 通讯过程,从而采集到DICOM 图像。
2. 2 图像存储机制设计
DICOM 网关按照分级目录进行图像存储。
各级目录的命名由对应的DICOM 图像中与病人、医疗设备相关的信息确定。这些信息包括检查号( ExamNo) 、设备类型(Modality) 、检查日期(StudyDate) 、病人ID ( Patient ID) 、病人姓名拼音(PatientName) 、检查序列号(Series Number) 、传输语法( Transfer Syntax UID) 等。
目录结构需要便于查找、备份、导出等日常文件操作。为了保证文件操作的效率,目录结构设计为四级: (1) 图像类型; (2) 采集时间; (3) 病人信息;(4) 图像序列号。其中第一级目录命名为图像中Modality 的属性值; 第二级目录命名为图像中StudyDate 的属性值; 第三级目录命名为图像中Patient ID 属性值和PatientName 属性值的组合,从而保证病人信息的唯一性;第四级目录命名为图像中SeriesNumber 的属性值。
比如一个ID 为2000 , 名为J ack 的病人, 在2004 年3 月15 日做了两次CT 检查,分别得到序列号0001 和序列号0002 的两个序列的CT 图像,那么第一次检查的图像存储目录是CT \20040315 \ 2000 J ack \ 0001 ,第二次检查的图像存储目录是CT \ 20040315 \ 2000 J ack \ 0002 。这种结构的优点在于既保证文件存储的唯一性,又方便文件的查找和备份。即使同一病人在同一天做了多次同类设备的检查,仍然能够保证每次检查的图像的存储目录唯一。
2. 3 图像转发机制设计
DICOM网关负责转发DICOM图像到PAS 上。首先网关将接收到的图像按照四级目录结构存储在本地,然后再转发到PAS ,并按照相同的四级目录结构存储。
另外,在大型医院中,为了减轻网络数据流量,还需要在不同的科室建立多个科室PAS 作为中央PAS 在科室的备份。科室内部的诊断工作站可以直接访问科室PAS 中的图像而不必直接访问中央PAS ,从而减少主干网络访问量,提高网络利用效率。因此DICOM 网关还必须能够同时向多个PAS 发送图像,这种机制被称为“预分配”机制。
2. 4 数据库访问机制设计
DICOM 网关负责将DICOM 图像中相关信息填入数据库。
首先DICOM 图像中含有的检查号信息访问数据库,然后把从DICOM 图像中获得的设备类型、检查日期、图像序列号三项信息填写到该检查号对应的数据库记录中。诊断工作站在访问数据库后,可以根据这些信息构成对应的图像在PAS上的存储目录。
3 DICOM 网关实现
根据DICOM 网关的设计方案, 在Windows2000/ XP 操作系统上以Visual C + + . NET 为开发工具,采用面向对象的设计方法,实现了DICOM网关。
网关由三个模块组成:
(1) 接收模块;
(2) 发送模块;
(3) 数据库模块。
接收模块实现图像采集和图像存储机制,采用DICOM 协议与医疗设备进行通讯,接收DICOM 图像,并在网关本地按照四级目录结构存储。发送模块实现图像转发机制并支持“预分配”机制,采用FTP协议转发DICOM 图像并存储在PAS。数据库模块实现数据库访问机制,把从DICOM 图像中获得的信息填入数据库记录中相应字段
3. 1 接收模块 实现
根据DICOM 标准和PACS 设计要求,医疗设备对应为C - STORE 存储服务类的服务类使用者(Service Class Provider ,简称SCU) ,DICOM 网关接收模块对应为C - STORE 存储服务类的服务类提供者(Service Class Provider ,简称SCP) 。医疗设备与网关接收模块之间的通讯过程如图3 所示:其中第(1) 步到第(4) 步是连接协商过程,其目的为了确定传输数据的数据类型和编码方式。第(5) 步到第(6) 步是数据传输过程,协商数据类型和编码方式成后,SCU 将DICOM 命令和DICOM数据封装成协议数据单元( Protocol Date Unit ,简称PDU) ,然后以协商好的连接方式发送给SCP。第(7) 到第(8) 步是释放连接过程,数据传输完毕或者传输出现错误都需要释放连接。
根据上述通讯过程,在DCMTK 开发包基础上实现了网关接收模块。DCMTK 开发包是一套开放源代码的DICOM 工具包,它提供了一系列函数和类库, 便于开发DICOM 应用程序。由于DCMTK是开放源代码工具包,不能够满足具体的应用需求, 因此为了实现网关接收模块, 对DCMTK进行了二次开发。
接收模块的具体实现函数流程如下:
(1) initializeNetwork ,用于创建、初始化网络连接;
(2) setParameter ,用于设置网络连接参数;
(3) acceptAssociation ,用于接收连接;
(4) selectSyntax ,用于确定传输语法;
(5) acknowledgeAssociation ,用于确认协商后连接成功;
(6) receiveCommand ,用于接收传输命令;
(7) storeSCP ,用于实现C - STORE SCP 服务,传输、存储数据;
(8) dropSCPAssociation ,用于关闭SCP 连接;
(9) dest royAssociation ,用于释放连接;
(10) dropNetwork ,用于释放网络连接。
在DCMTK中C - STORE SCP 服务需要指定相应的传输语法才能工作。在selectSynatax 函数中修改了这一限制,从而能够支持8 种传输语法:
(1)DICOM 隐式VR 小尾;
(2)DICOM 显示VR 小尾;
(3)DICOM 显式VR 大尾;
(4) RL E 无损压缩;
(5)J PEG无损压缩;
(6)J PEG有损压缩(8 位) ;
(7)J PEG有损压缩(12 位) ;
(8) DICOM 显式Deflated压缩。
另外, DCMTK 中按照DICOM 图像中的StudyInstanceUID 信息和DateTime 信息构成存储目录,不能满足网关需要。接收模块按照存储机制设计要求修改了存储目录。网关获取图像之后,首先根据图像的格式,提取出文件中的检查号、设备类型、研究日期、病人ID、病人姓名拼音、检查序列号六项信息,并按照“Modality \ StudyDate \ Patient ID PatientName \ SeriesNumber”四级目录结构将图像存储在本地硬盘。
3. 2 发送模块实现
网关获取DICOM 图像后,按照设定IP 地址、端口号、用户名、密码、存储目录等,将DICOM 图像采用FTP 方式转发到PAS。
采用FTP 方式传输文件效率高、便于管理,因此网关作为FTP 客户端,将采集到的DICOM 图像以FTP 方式上传到任意一个PAS。发送模块以动态链接库的形式供网关程序调用。
发送模块传输文件的步骤是:
(1) 创建并初始化一个网络会话;
(2) 建立与服务器的连接;
(3) 连接时查询或设置网络参数;
(4) 对FTP 服务器进行操作,实现按照4级目录结构上传文件功能;
(5) 关闭FTP 连接。另外,为了实现“预分配”机制,发送模块提供了INI 文件(配置文件) 接口,只要在INI 文件中设置目的PAS 的IP 地址、端口号、用户名、密码、目录等,就可以将DICOM 图像转发到指定的PAS并按照四级目录结构存储。
3. 3 数据库模块实现
为了关联PAS 和数据库,网关发送文件后需要修改数据库中相应记录。数据库模块以动态链接库的形式供网关程序调用。
数据库模块操作数据库的步骤是:
(1) 注册和连接数据库;
(2) 根据检查号打开数据库记录集;
(3) 操作该检查号对应的数据记录集,在设备类型、研究日期、检查序列号这些字段中填入信息;
(4) 关闭与数据库的连接。
4 结果分析
4. 1 传输语法比较
对自行设计的DICOM 网关与美国DesAcc 公司的商业化DICOM 服务器Digital J acket Pro 4. 0(DJ ) 进行了多种传输语法测试,DICOM 网关和DJ都支持的传输语法包括:
( 1) Implicit VR , LittleEndian ;
(2) Explicit VR , Little Endian ;
(3) Explicit VR , Big Endian ;
(4) J PEG Lossy , 8bit ;
(5) JPEGLossy ,12bit ;
(6) J PEG Lossless。
而DICOM 网关支持,而DJ 不支持的传输语法如表1 所示。
由表1 可以看出DICOM 网关支持的传输语法比Digital Jacket Pro 4. 0 多。
4. 2 传输时间比较
在相同软件(Windows XP 操作系统) 、硬件(CPU : Intel Pentium 2. 0G; 内存: 256M) 、网络(100Mbps) 环境下,以4 组有代表性的DICOM 图像作为测试样本(测试图像如表2 所示) ,测试了DICOM 网关与Digital J acket Pro 4. 0 接收相同图像的时间,如表3 所示。
由表3 可以看出,自行设计的DICOM 网关接收MR、CR、CT、US 图像所消耗时间都比Digital Jacket Pro 4. 0 少10 %以上。
4. 3 转发机制比较
DICOM 网关能够实现预分配机制,可以同时向多个PAS 服务器转发指定的目录下的DICOM图像;Digital J acket Pro 4. 0 只能向一个指定的PAS 服务器转发图像。
4. 4 数据库机制比较
DICOM 网关能够访问并修改数据库记录,Digital J acket Pro 4. 0 没有访问数据库的功能。
5 结论
DICOM网关是PACS 的重要组成部分。
自行设计的DICOM网关经过实际测试,实现了:
(1) 正确接收和存储DICOM 图像;
(2) 正确地将DICOM 图像发送到指定的一个或多个服务器;
(3) 正确修改数据库记录中的相应字段。目前,DICOM 网关已经用于PACS 测试版本中,正在进行进一步的测评。