渭南网站建设公司,网站遮罩是什么,中国做的最好的网站有哪些,网站开发管理学什么转自#xff1a;DICOM命令集和数据集解析 - 微笑的艾米 - 博客园 摘 要#xff1a;本文通过分析一个典型的DICOM消息#xff0c;详细地解析了DICOM命令集和数据集的构成方式和其含义。并在此基础上#xff0c;提出了一种实现DICOM命令集和数据集解析的实施方案#xff0…转自DICOM命令集和数据集解析 - 微笑的艾米 - 博客园 摘 要本文通过分析一个典型的DICOM消息详细地解析了DICOM命令集和数据集的构成方式和其含义。并在此基础上提出了一种实现DICOM命令集和数据集解析的实施方案并对该种方案的设计思路和具体实现方法进行了详细的阐述。
关键词医学数字成像及通信标准信息对象定义服务对象对 1. 前言
DICOMDigital Imaging and Communications in Medicine是医疗设备的国际标准通信协议它为在不同医疗设备之间对医学图像等数字信息进行各种命令操作定义了统一的规范。现在越来越多的医疗设备生产厂家开始施行并支持DICOM标准。现在广泛使用的版本是DICOM3.0。
在本文中利用一个实例来分析DICOM协议是如何利用DICOM命令集和数据集在不同医疗设备之间进行图像存储操作的并在此基础上提出了一个解析DICOM命令集和数据集的实现方案。
2. 信息对象定义
DICOM是一个数字医学图像的网络通讯接口标准。基于此将现实世界中的实体进行抽象数据化是制定标准的一个重要步骤。DICOM标准描述了许多信息对象类Information Object Class简称IOC。这些信息对象类为现实世界中能够以数字医学图像这种方式通讯的实体提供了一个面向对象的抽象定义这个定义称作信息对象定义Information Object Definition,简称IOD。一个信息对象定义IOD是由若干包含相关信息的信息实体组成。每一个信息实体对应着DICOM应用模型中的现实世界实体如患者、图像等的一个数据抽象。每个信息实体是由若干属性组成的属性是现实世界实体性质如患者的姓名、年龄、图像的成像日期等的抽象。在DICOM标准中每个属性用一个数据元素来描述而一个信息实体的相关属性的集合则用数据集来描述。
3 服务对象对
面向对象的设计不仅描述了对象本身的属性同时还说明了怎样处理这些对象的方法。DICOM标准就是利用这个概念定义了诸如存储图像、获取病人信息之类的服务。由于是面向对象的设计故服务又被称作服务类。一个服务类由若干个相关的服务对象类Service Object Pair Class简称SOP Class组成。SOP类是DICOM标准中定义的基本功能单位。对于一个特定的SOP类来说一台装置可能扮演以下两个角色一服务类提供者Service Class Provider简称SCP扮演这个角色的机器提供SOP类的服务它相当于客户服务器模型中的服务器Server二服务类使用者Service Class User简称SCU扮演这个角色的装置使用SOP类的服务它相当于客户服务器模型中的客户。例如一台成像装置要打印一幅图像在这种情况下该成像装置为与打印相关的SOP类的SCU打印机为SCP。一个SOP类的一次具体实现称作服务对象对实例存储图像、获取病人信息等操作就是通过SOP实例实现的。
图1形象地描述了SOP类及其实例的关系。 动词Store 服务DIMSE 名词MRI Image 信息对象定义IOD 一般句子Store a MRI image SOP类 特指句子Store this MRI image SOP实例
图1 SOP类与实例
4. DICOM消息
一个SOP类被定义为一组特定的服务与一个相关的信息对象IOD的结合一个SOP类的具体实现是通过DICOM消息的交互完成的。
在DICOM标准中DICOM消息由命令集和数据集组成其中数据集描述现实世界信息对象的一个实例而命令集则描述对这个信息对象实例做何种操作。命令集由若干个命令元素组成每个命令元素由标签域、值长度域和值域组成。而数据集由若干个数据元素组成每个数据元素由标签域、数据表示类型域可选域、值长度域和值域组成。
无论是在命令集还是数据集中标签都唯一的标识一个命令或者数据元素元素必须按标签的升序依次排列且每个元素一般最多只能出现一次嵌套除外元素标签由一对组号和元素号组成两者均为16位无符号整数值长度域是以字节数表明值域的长度其值必须为偶数值域包含了有关操作命令的属性值针对命令元素而言或者现实世界信息对象实例的属性的具体值针对数据元素而言其长度是可变的但是不能超过值长度域所规定的长度。
在数据集中数据表示类型域是一个可选项说明值域的类型。当元素中包含该域时称作显式VRValue Representation否则称作隐式VR。
下面的表格描述了一个典型DICOM消息其中数据集描述了一个图像的具体实例而命令集的含义则是请求对该图像实例做存储C-STORE服务很显然这是一个从SCU发往SCP的存储C-STORE请求REQUEST消息。其中组号为0000的元素为命令元素其它为数据元素。如表1所示。
表1 C-Store服务的DICOM请求消息 组 元素 长度 值 意义 说明 0000 0000 0004 0000 0056 0000 从本字段的结束至下一组开始的偶数字节 0000 0001 0004 0000 01A0 0010 从本字段的结束至报文结束的偶数字节 0000 0010 000C 0000 4341 2D52 454E 414D 3120 302E “ACR-NEMA 1.0” 识别码 0000 0100 0002 0000 0001 0001H 命令字段C-Store-Request 0000 0110 0002 0000 123A 123A 由成像装置生成的报文识别号 0000 0200 0004 0000 4344 3148 “DCH1” 发送者逻辑地址 0000 0300 0004 0000 4341 3148 “ACH1” 接收者逻辑地址 0000 0800 0002 0000 0000 0000H 数据类型图像 0008 0000 0004 0000 0080 0000 0008 0001 0004 0000 013E 0100 0008 0010 000C 0000 4341 2D52 454E 414D 3120 302E “ACR-NEMA 1.0” 识别码 0008 0020 000A 0000 3032 3230 312E 2E31 3532 “2002.11.25” 分项检查日期 0008 0030 0008 0000 3231 303A 3A35 “12:05:59” 分项检查时间 0008 0040 0002 0000 0000 0000H 数据集类型图像 0008 0060 0002 0000 5254 “DR” 成像模式 0008 0070 0004 0000 4241 4443 “ABCD” 制造商 0008 0080 000E 0000 454D 4352 2059 4F48 5053 5449 4C41 “Mercy Hospital” 医院识别号 0008 0090 0000 0000 检查医师未知 0010 0000 0004 0000 0042 0000 组长度 0010 0010 000E 0000 4F4A 454E 2C53 4A20 4D49 4320 202E “JONES, Jim C. “ 患者姓名 0010 0020 0008 0000 3031 2D32 3033 2034 “102-304 “ 患者识别号 0010 0030 000A 0000 3931 3632 312E 2E31 3532 “1926.11.25” 患者出生日期 0010 0040 0002 0000 204D “M “ 患者性别男 0018 0000 0004 0000 0000 0000 组长度为零—无其它元素传送 0020 0000 0004 0000 0018 0000 组长度 0020 0010 0004 0000 3932 3330 “2903” 分项检查号 0020 0020 0004 0000 5C52 2046 “R/F” 患者取向 0028 0000 0004 0000 002C 0000 组长度 0028 0010 0002 0000 0400 0400H 行数1024 0028 0011 0002 0000 0400 0400H 列数1024 0028 0030 0006 0000 2E20 5C33 332E “ .3\.3” 像素的实际尺寸0.3*0.3像素 0028 0100 0002 0000 0008 008H 每个像素指定的位数8 7FE0 0000 0004 0010 0008 0010 组长度 7FE0 0010 0000 0000 *******…***** 像素数据524288字节
5. 编码
在实际应用中利用两个基类CElement和CElementSet分别表示数据元素或者命令元素以及这些元素集合的抽象并且描述各自的基本特征属性。利用这两个基本类可以派生出其它类。例如我们利用类CElementSet的一个派生类DcmFile来描述一个DICOM图像文件在这个类中我们实现了两个主要方法loadDcmFile()和writeToDcmFile()它们的含义分别是从指定的路径下读取DICOM图像文件和把数据集中的所有数据元素还原成指定路径下的DICOM图像文件同样我们利用类CElementSet的另外一个派生类CommandSet来描述一个命令集它包含两个主要方法getCmdValue()和getDataType()其含义分别是获取此命令集描述的服务和消息类型以及获取此命令集的操作对象数据集所描述的信息实体类型。
在解析一个命令集或者数据集例如一个DICOM图像文件时可以以标签为标识读出感兴趣的命令元素或者数据元素并将该命令元素数据元素作为类CCommandElement或者类CDataElement均为类 CElement的派生类的一个实例来处理。
例如在解析表1的DICOM消息时首先应该读取它的命令集即组号为0000的元素。读取的每个命令元素作为类CCommandElement (类CElement的派生类)的一个实例存在而读取的所有命令元素的集合作为类CommandSet的一个实例存在。然后再利用CommandSet提供的方法getCmdValue()和getDataType()获取此命令集描述的服务和消息类型以及此命令集的操作对象即数据集所描述的信息实体类型。在本例中根据DICOM标准由于命令集中标签为00000010的值域的具体值是0001H所以该命令集所描述的是C-STORE服务请求而标签为00000080的值域的具体值是0000H因此该命令集的操作对象即数据集的类型是图像。综合起来这个DICOM消息的含义就是存储封装在数据集中的图像文件。
解析完命令集后根据解析结果再读取同一个DICOM消息中的数据集即组号不是0000的元素这里将每个读取的数据元素作为类CDataElement(类CElement的派生类)的一个实例存在而读取的所有数据元素的集合作为类DcmFile的一个实例存在。然后调用类DcmFile所提供的writeToDcmFile()方法将这些数据元素还原成图像文件的形式并加以存储。最后根据命令执行的成功与失败构造一个响应信息返回给服务请求端。
6结束语
DICOM标准是第一个广为接受的医疗设备间通讯的国际标准它作为一个计算机和医学相关联的纽带起着非常重要的作用。
本文通过分析一个典型的DICOM消息详细地解析了DICOM命令集和数据集的构成方式和其含义。并在此基础上提出了一种实现DICOM命令集和数据集解析的实施方案并对该种方案的设计思路和具体实现方法进行了详细的阐述。实现DICOM命令集和数据集的解析为远程医疗应用提供了基础。
参考文献
1. National Electrical Manufacturer Association. Digital Imaging and Communication in Medicine(DICOM)[S],1999
2. 贾克斌沈波. 实现医学影像存档和传输系统中的若干关键技术J. 中国图像图形学报20005A7539544