刚刚学习医学影像,学习到了DICOM,搜集一些基础入门的资料分享给大家。
DICOM(Digitalimaging and Communications in Medicine)数字影像和通信标准
DICOM3.0.2004在2004年11月发布。
DICOM 3.0标准共有18个部分,其各部分的内容概要如下:
第一部分:引言与概述,简要介绍了DICOM的概念及其组成。
第二部分:DICOM兼容性声明。声明DICOM要求制造商精确地描述其产品的DICOM兼容性,即构造一个该产品的DICOM兼容性声明。
第三部分: DICOM信息对象定义。介绍了lOD和SOP类。
第四部分:服务类,说明了14个服务类,服务类详细介绍了功能与信息对象上的命令及其产生的结果。
第五部分:数据结构及语意,描述了怎样对信息对象类和服务类进行构造和编码。
第六部分:数据字典,描述了所有信息对象是由数据元素组成的,数据元素是对属性值的编码。
第七部分:消息交换,定义了进行消息交换时相互通讯的医学图像应用实体所用到的服务和协议。
第八部分:消息交换的网络通讯支持,说明了在网络环境下的通讯服务和支持DICOM应用实体进行消息交换的必要的上层协议。
第九部分:消息交换的点对点通讯支持。由于目前在实际中很少使用点对点通信,该部分在DICOM 2003版中已经被删除。
第十部分:介质存储与文件格式。
第十一部分:介质存储应用描述。
第十二部分:存储功能和用于数据交换的介质格式。
第十三部分:打印管理的点对点通讯支持。该部分在DICOM 2003中也已被删除。
第十四部分:灰度图的标准显示(显示和打印)功能。
第十五部分:安全特性描述。
第十六部分:内容资源映射。
第十七部分:说明信息。这部分包含标准化表格和信息附件中的说明信息。
第十八部分:WEB访问DICOM持久对象。定义基于WEB的服务,用于访问DICOM持久对象。提供从HTML页面或者XML文档访问DICOM持久对象的简单机制。
有一些问题在网上搜索了一下,发现以下博客的内容还不错,也有风~~博主的一些自己的看法和想法,也转载过来当做参考:
以下内容转自http://hi.baidu.com/diqiucun666/blog/item/85a7da1197b0d216b9127b2c.html
一 dicom是什么?
二 dicom文件结构
三 如何编写dicom程序
四 利用开发包开发dicom程序
五 dcmtk使用介绍
一 dicom是什么?
dicom全名是医学数字影像和通讯。它是个编码和数据传输协议。医院里的ct机出来的x光胶片就是遵从这个协议编码的。当然其他仪器比如核磁共振等等也是如此。平时看到的胶片只是打印出来的dicom文件的部分数据。ct机所有的操作包括打印、生成文件、传输都要遵从dicom协议。
dicom官方网站在这里 http://medical.nema.org 。dicom英文协议可以在这里下载。
中国PACS论坛 http://www.cnpacs.org 这里有一个专门讨论dicom的板块里面有很多资料其中有网友翻译的dicom中文协议。(本文大部分资料都出自这个论坛)
二 dicom文件结构 如图就是dicom文件的结构。
图中所用软件是“jdicom”这是一个用java编写的免费软件,这个软件是我作dicom开发不可缺少的参考。
它的网址是 http://www.tiani.com 进入网站在菜单research里面有“jdicom”一项。由于是java软件需要下载一个“j2re-1_3_1_14-windows-i586-i.exe”网址在这里 http://java.sun.com/products/archive/index.html 当然“www.tiani.com”也会有相关联接。
下面引用pacs论坛上总版主JB的一片帖子忘记了。来简要介绍dicom文件结构。相信有了上面软件“jdicom”直接对dicom的观察和这篇pacs上的帖子再加对dicom协议的阅读后相信对dicom文件的结构会有一个清晰的了解。
以下是帖子内容:
DICOM 文件格式 DICOM 文件内容在 Part 3 DICOM IOD 里定义。CT, MR, CR, DR, US, NM, PET, XA 等各有自己的内容定义,由共同的专有的部分 (IE 和 Modules) 组成。
DICOM 文件内容由两个部分组成:存参数的 header 和图点数据 (pixel data)。
header 只描述图像的基本参数:如病人基本资料、检验基本资料、系列资料、位置资料等等。
DICOM 的 4 个内容层次: 1. Patient (病人) 2. Study (检验) 3. Series (系列) 4. Image (图像) 尽管头几层的内容在很多图像里是相同的,它们在每个图像文件里都要有。每一层叫一个 Information Entity,或 IE (从 relational database schema 设计引用而来)。每一层又细分成 Module。每个 Module 里面的最小单元叫做一个 attribute 或 element。
现在举个例子:
CR 图像 (DICOM Part 3, A.2.3, Table A.2-1 1. Patient IE: a. Patient Module (参考 C.7.1.1)
2. Study IE: a. Study Module (参考 C.7.2.1) b. Patient Study Module (参考 C.7.2.2)
3. Series IE: a. General Series (参考 C.7.3.1) b. CR Series (参考 C.8.1..1) c. General Equipment (参考 C.7.5.1)
4. Image IE: a. Genrral Image (C.7.6.1) b. Image Pixel (C.7.6.3) c. Contrast/bolus (C.7.6.4) d. CR Image (C.8.1.2) ... i. SOP Common (C.12.1) 将这些 modules (tables) 里的所有 elements 都找出来就做成了一个 CR 图像的架构。要注意的是这些 module 有些是一定要的 (modatory) 有些是用户选用的 (user)。到了每个 module 里 attribute/element 表又有分五类 Type 1, 1C, 2, 2C 和 3。 Type 1 是一定要的,2 也是一定要的但是内容可以是空的。Type 3 则可要可不要。所以浓缩一下,一个 CR 图像里的元素 (elements) 也不是太多。把这些表格展开后,这些 elements 组成一个 dataset。
那么写到一个文件里或通过网路传送又是个什么格式呢?这就要看 Part 5。
一个元素 (element) 的结构是:
1. group tag: 16-bit
2. element tag: 16-bit
3. length (or VR/length): 32-bit
4. data (bytes of length) 对应每一个用到的 element DICOM 标准 Part 6 都定义了一个 group tag 和 element tag。比如说: patient name: 0x0010, 0x0010 patient ID: 0x0010, 0x0020 ... VR 说的是 element 格式,比如说 patinet name 的 VR 是 PN。格式是 last_name^first_name^middle_name^prefix^surfix。那么我的英文名字就是: Wang^JB^^Dr.^
往外写时要做几个事情:
1. 要把所有元素按 group tage 和 element tag 理一遍 (sort)。从小排到大。
2. 如果是写 DICOM 介质的 DICOM file 还先写 128 bytes preamble (一般是空白),加 "DICM", 加 group 2 Meta header。(讲到 Part 10 时再细说)
3. 如果 dataset 里面含有 Sequence elements, sequence 里面每一个 Item 又是一个 dataset。 [注意]:dicom协议共有15章,其中第三章是“信息对象定义”,第五章是“数据结构和编码”,第六章是“数据字典”这几张比较重要。
三 如何编写dicom程序自己编写dicom很困难,编出来的程序经常会有兼容性的问题。本人提倡用开发包进行dicom程序编写,但是为了加深对dicom协议的了解还是应该尝试一下至少看一看别人的代码。这里提供两个程序。这两个程序都存在兼容性的问题,有的dicom文件会读不出来。但是作为初学者的参考还是值得一看的。
第一个程序是pacs论坛上的总版主JB所写(对!还是那个人),“DcmBmp转换程序.rar”主要是把dicom文件中的像素信息转换成bmp文件。
第二个程序是一个pacs论坛上的一个网友wakyrei所写(由于服务器数据库文件以外遭到破坏这个人在pacs论坛上的所有信息都已经消失的无影无踪了),“dcm”此程序相当粗燥读起来需要一定耐心,作者好像根本不懂怎样使用mfc,不过其中的dicom类还是值得推敲的。
看完几个解惑的问题,那就直接找一个dcm格式图像看数据吧,但是有一些标识符是什么意思呢?继续参考下风~~博主的一篇文章。以下内容转自http://hi.baidu.com/diqiucun666/blog/item/b4d2a41cb1a5308d87d6b6d5.html
多帧图像的文件数据流格式(以JPG格式为例): (7FE0, 0010) + ‘OB’+ (0000) + (FFFF, FFFF) //最后4个字节全是F,表明是未知长度 (FFFE, E000) + (xxxx, xxxx) + (FrameNum*4) (FFFE, E000) + (xxxx, xxxx) //(xxxx,xxxx)是第一帧图像大小 ………… ………… 第一帧图像数据区 ………… (FFFE, E000) + (xxxx, xxxx) //(xxxx,xxxx)是第二帧图像大小 ………… ………… 第二帧图像数据区 ………… (FFFE, E000) + (xxxx, xxxx) //(xxxx,xxxx)是第三帧图像大小 ………… ………… 第三帧图像数据区 ………… 以此类推…… (FFFE, E000) + (xxxx, xxxx) //(xxxx,xxxx)是最后一帧图像大小 ………… ………… 最后一帧图像数据区 ………… (FFFE, E0DD) + (0000, 0000) //图像结束 个人笔记整理,如有不足或错误,不吝赐教 0002组:
(0002,0000):0002组的总长度,但不包含(0002,0000)tag的长度。
(0002,0001):写文件时,通常,bVersion[2] = {0,1},这个值是2字节。
(0002,0002):SOP Class UID
举例说明:
例如取值“1.2.840.10008.5.1.4.1.1.7”
则指明该图像是Secondary Capture Image即“SC”
相关标签:(0008,0016)与(0002,0002)取相同值
(0008,0060)取值“SC” 。
如果取值是1.2.840.10008.5.1.4.1.1.77.1.1.1是指:
(0002,0003):SOP Instance UID
用来唯一标示这个图像文件,常由产生这个图像的设备生成;同
一设备产生的图像具有的实例UID是不一样的。可自定义。
相关标签:(0008,0018)与该标签取相同值。
(0002,0010):Transfer Syntax UID.
例如:取值“1.2.840.10008.1.2.4.50”
代表:JPEG Baseline(Process 1)
Default Transfer Syntax for Lossy JPEG 8 Bit Image
Compression.
(0002,0012):Implementation SOP Class UID,用来标示产生该图像的机构,对
所有图像来说,它都是同样的一个值。
0008组:
(0008,0000):0008组的总长度,但不包含(0008,0000)tag的长度。
(0008,0005):在DICOM(2004)中给出了中文的编码字符集—
ISO_IR 192 (繁体)
GB18030 (简体)
具体使用以及和GB2312的区分,有待更进一步的讨论。
(0008,0008):详细参考PART3 C7.6.1.1.2
(0008,0016):SOP Class UID 取值与(0002,0002)相同。
(0008,0018):SOP Instance UID,取值与(0002,0003)相同。
(0008,0020):study date,检查开始日期
(0008,0021):serial date,序列开始日期
(0008,0022):acquisition date,每个序列都不一样,同一个序列一样。
(0008,0030):study time,检查开始时间
就是生成当前图像时间
(0008,0031):serial time,序列开始时间
(0008,0032):acquisition time,每个序列都不一样,同一个序列一样。
(0008,0033):content time,图像时间,每幅图都不一样
(0008,0054):Title of the DICOM Application Entity where the
Image(s) may be retrieved on the network.
(0008,0060):图像类型,如:“SC”指Secondary Capture Image。
相关标签:(0002,0002)。
(0008,0064):Discribes the kind of image conversion.
Defined Terms:
DV = Digitized Video
DI = Digital interface
DF = Difitized Film
WSD = Workstation
SD = Scanned Document
SI = Scanned Image
DRW = Drawing
SYN = Synthetic Image
(0008,0070):Menufacture. eg: GOLDWAY
(0008,0080):Institution Name. eg: Hoog Hospital(医院名称)
(0008,0090):Refering physician’s name(检查医生)
(0008,0081):(0008,0080)的通信地址
(0008,1010):Station Name. eg: Hoog Hospital
(0008,1030):study description
(0008,1080):Description of the admitting diagnosis(diagnoses诊断)
(0008,1084):A sequence that conveys the admitting
diagnosis (diagnoses). One or more Items
may be included in this Sequence.
个人笔记整理,如有不足或错误,不吝赐教 |
以下部分转载自http://hi.baidu.com/diqiucun666/blog/item/a129100810998a36e92488ca.html Meta Element Group Length (0002,0000) 1 UL
Patient Group Length (0010,0000) 1 UL
Acquisition Group Length (0018,0000) 1 UL
Relationship Group Length (0020,0000) 1 UL
Image Presenta... Group Length (0028,0000) 1 UL
Pixel Data Group Length (7FE0,0000) 1 UL |
以下转载自:http://blog.csdn.net/ljzhao82/archive/2007/06/23/1663960.aspx
http://blog.csdn.net/ljzhao82/archive/2007/06/23/1663960.aspx
DICOM-1 判断图像是单色的还是彩色的 && 2 如何获取图像的像素数据 &&3 DICOM文件头
1 判断图像是单色的还是彩色的
根据0028,0004(Photometric Interpretation)决定,如果是MONOCHROME1或MONOCHROME2就是灰度的,如果是RGB则是RGB:),还有其他可能。
还应该参考
0028,0100 BitsAllocated
0028,0002 SamplePerPixel
等决定位数
2 如何获取图像的像素数据
从7FE0,0010(Pixel Data)得到像素数据就可以了。
3DICOM文件头
DICOM文件头(DICOM File Meta Information)包含了标识数据集合的相关信息。每个DICOM文件都必须包括该文件头。文件头的最开始是文件前言,它由128个00H字节组成,接下来是DICOM前缀,它是一个长度为4字节的字符串“DICM”,可以根据该值来判断一个文件是不是DICOM文件。文件头中还包括其它一些非常有用的信息,如文件的传输格式、生成该文件的应用程序等等,关于文件头详细的说明请参阅DICOM标准PS 3.10的13~14页表7.1-1。
说明:
(1) 除了128字节的文件前言和4字节的DICOM前缀外,所有其它的文件头元素都必须采用上面介绍的显示格式编码,各个数据元素排列的顺序按照标签数值从小到大的传输格式(Little Endian)编码。
(2) 每个文件头元素的长度必须为偶数,否则应该按照规定补充一个字节。
(3) 所有(0002,****)类的标签都为DICOM所保留。为了兼容后续版本,如果发现文件中有目前尚未规定的(0002,****)类标签,则应该忽略它。
四 DICOM数据集合
DICOM文件主要组成部分就是数据集合。这不仅包括医学图像,还包括许多和医学图像有关的信息,如病人姓名、图像大小等。
DICOM数据集合是由DICOM数据元素按照指定的顺序依次排列组成的。对于DICOM文件,一般采用显式传输,数据元素按标签从小到大顺序排列,即DICOM PS 3.5规定的Explicit VR Little En-dian Transfer Syntax。
在DIOCM标准的PS 3.3部分(Information Object Defini-tions)中,定义了各种类型的图像文件必须包括和可选的DICOM数据元素,在制定自己的DICOM文件结构时,必须严格遵照该部分规定。例如,制定核磁共振医学图像的DICOM文件,可以查阅DICOM标准PS 3.3中的A.4节。其中定义了如下的核磁共振医学图像信息实体(Information Entity,IE)的内容(表4)。
表中“使用”列为“M”时表示该模块必须存在,“U”表示可选,“C”表示在特定的情况下必须存在。
要构造信息实体,按照表中指定的模块参考相应的DICOM标准章节即可。例如,在制定Patient模块时,查阅DICOM标准PS 3.3部分的C.7.1.1小节,可以查到如表5所示的病人模块属性表。
这样按照表5中所列出的元素,选出自己需要的元素(表中类型为1和2的元素是必须包括的,3可选)即可。按照表4中指出的所有模块,查阅DICOM标准中相应的章节,选出合适的DICOM元素,这样DICOM文件的格式就确定下来了。