何 博 曹晓光 杜振洲

(北京航空航天大学图像中心 北京     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 测试版本中,正在进行进一步的测评。

【转】DICOM 网关的设计与实现相关推荐

  1. 微服务之API网关接口设计

    微服务之API网关接口设计 API网关,顾名思义,就是外部到内部的一道门,其主要功能: 服务路由:将前段应用的调用请求路由定位并负载均衡到具体的后端微服务实例,对于前端应用看起来就是1个应用提供的服务 ...

  2. 大规模 Node.js 网关架构设计与工程实践

    作者:王伟嘉,腾讯云 CloudBase 前端负责人. 本文是王伟嘉在 GMTC 2021 全球大前端技术大会(深圳站)上的演讲内容:<十亿级 Node.js 网关的架构设计与工程实践>. ...

  3. 微服务网关的设计与实现

    API网关概述 "计算机科学领域的任何问题都可以通过增加一个间接的中间层来解决." --David Wheeler 分布式服务架构.微服务架构与 API 网关 1. 什么是API网 ...

  4. 【学习笔记】- 支付网关的设计

    大部分内容,来自大佬[凤凰牌老熊]博客:http://doc.cocolian.cn/essay/,外加我乱加的一些标签和乱找的一些注解. 文章目录 支付网关的设计 功能概述 支付(API)网关 支付 ...

  5. 基于golang的智能物联网网关的设计论文

    很抱歉,我不能提供具体的智能物联网网关的设计论文,但是我可以提供一些相关信息供您参考. 智能物联网网关是物联网系统的重要组成部分,它起到了连接物联网设备和云端服务器的作用.基于 Golang 的智能物 ...

  6. Atmel公司引进低成本Zigbee转以太网网关参考设计

    低成本Zigbee转以太网网关参考设计是一个关键的产品预备方案,将IEEE 802.15.4无线网络连接有线以太网网络.对于Zigbee,使用Atmel ATmega256RFR2,还有WIZnet ...

  7. 百亿流量微服务网关的设计与实现

    百亿流量微服务网关的设计与实现 本文从百亿流量交易系统微服务网关(API Gateway)的现状和面临的问题出发,阐述微服务架构与 API 网关的关系,理顺流量网关与业务网关的脉络,分享 API 网关 ...

  8. NAT-PT 协议转换网关的设计与实现

    NAT-PT 协议转换网关的设计与实现 摘要:介绍NAT-PT 的技术原理,给出NAT-PT 协议转换网关的概念和系统结构.根据RFC 2766 文档和RFC 2765 文档的相关说明,参 照Linu ...

  9. 一个简单可参考的API网关架构设计

    http://www.infoq.com/cn/articles/api-gateway-architecture-design 网关一词较早出现在网络设备里面,比如两个相互独立的局域网段之间通过路由 ...

最新文章

  1. SVN 问题解决之 The XML response contains invalid XML
  2. 字节流和字符流复制文件内容实例
  3. 026_Pagination分页
  4. 互联网加大赛历届作品_匠心筑梦 ——家具漆服务系统2020年度涂装大赛成功举办...
  5. arcgis批量处理nc文件_ArcGIS处理NetCDF(.nc)的多维科学数据
  6. 《Python程序设计》实验指导书(30个实验)
  7. 搭建Maven环境及其基本知识
  8. 小程序 实现语音播放功能
  9. 2017年6月计算机排名,桌面CPU性能排行 CPU天梯图2017年6月最新版
  10. uniapp路由守卫
  11. 在计算机中360云盘如何删除文件,如何在360云盘中检索已删除的文件
  12. oracle存储过程无效字符_ORA-20003 , procedure存储过程失效问题
  13. 怎样将系统防御升到服务器级别,H3C IPS入侵防御系统 Web配置手册-5PW104
  14. ubuntu 安装浏览器flash插件
  15. 跟这台计算机连接的一个USB设备运行不正常
  16. 初学者做电脑的双屏显示
  17. 医院计算机系统日常维护记录表,医院计算机信息管理系统维护措施
  18. eja智能压力变送器工作原理_HONEYWEL、 EJA 、罗斯蒙特变送器的工作原理
  19. linux iso挂载报错,linux下文件系统、iso挂载
  20. 大学c语言活动策划,大学校园文化班级趣味运动会活动方案

热门文章

  1. 【iCore4 双核心板_uC/OS-II】例程一:认识 uC/OS-II
  2. 【shell】Shell编程的前篇以及通过编程实现,jdk的安装
  3. 【Linux】Linux用户和权限管理
  4. lucene全文检索的概念
  5. Jmeter 分布式测试完整实践过程(部署成功)
  6. 08-01 Jmeter 核心原理与性能测试理论
  7. 8plus基带电源供电线路_双电源供电与双回路供电的区别是什么?别再傻傻分不清了!...
  8. springboot做网站_SpringBoot项目实战(3):整合Freemark模板
  9. linux 没有windows.h头文件_宋宝华: Linux内核编程广泛使用的前向声明(Forward Declaration)...
  10. 外包员工午休起身喝水被正式员工大骂:脑子进“S”,打扰我休息