dicom入门资料
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持久对象的简单机制。
DICOM简介
一 dicom是什么?
二 dicom文件结构
三 如何编写dicom程序
四 利用开发包开发dicom程序
五 dcmtk使用介绍
一 dicom是什么?
dicom全名是医学数字影像和通讯。它是个编码和数据传输协议。医院里的ct机出来的x光胶片就是遵从这个协议编码的。当然其他仪器比如核磁共振等等也是如此。平时看到的胶片只是打印出来的dicom文件的部分数据。ct机所有的操作包括打印、生成文件、传输都要遵从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格式图像看数据吧,但是有一些标识符是什么意思呢?
DICOM图像格式
多帧图像的文件数据流格式(以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.
DICOM标签
Meta Element Group Length (0002,0000) 1 UL
File Meta Information Version (0002,0001) 1 OB
Media Storage SOP Class UID (0002,0002) 1 UI
Media Storage SOP Instance UID (0002,0003) 1 UI
Transfer Syntax UID (0002,0010) 1 UI
Implementation Class UID (0002,0012) 1 UI
Implementation Version Name (0002,0013) 1 SH
Source Applica... Entity Title (0002,0016) 1 AE
Identifying Group Length (0008,0000) 1 UL
Specific Character Set(0008,0005) 1 CS
特殊字符集
Image Type (0008,0008) 1-n CS
图像类型 AXIAL = 确定一个CT轴图像
LOCALIZER = 确定一个CT定位器图像
SOP Class UID (0008,0016) 1 UI
SOP类UID
SOP Instance UID (0008,0018) 1 UI
SOP实例UID
Study Date (0008,0020) 1 DA
研究信息获得开始的日期
Series Date (0008,0021) 1 DA
序列开始的日期
Acquisition Date (0008,0022) 1 DA
产生这个图象的数据获得开始的日期
Image Date (0008,0023) 1 DA
图象数据开始创建的日期
Study Time (0008,0030) 1 TM
研究信息获得开始的时间
Series Time (0008,0031) 1 TM
序列开始的时间
Acquisition Time (0008,0032) 1 TM
产生这个图象的数据获得开始的日期
Image Time (0008,0033) 1 TM
图象数据开始创建的时间
Accession Number (0008,0050) 1 SH
RIS产生的标识研究顺序的号码
Modality (0008,0060) 1 CS
最初获得数据来创建这个序列中的图象的设备的类型
Manufacturer (0008,0070) 1 LO
产生数字图象的设备的制造商
Institution Name (0008,0080) 1 LO
设备位于的机构
Referring Physician's Name (0008,0090) 1 PN
这次就诊病人的主要负责医师
Station Name (0008,1010) 1 SH
用户定义的名字,标识产生数字图象的机器
Study Description (0008,1030) 1 LO
机构产生的描述或已执行的研究(组件)的分类
Institutional Department Name (0008,1040) 1 LO
产生数字图象的设备定位的机构内的部门
Performing Physician's Name (0008,1050) 1-n PN
执行研究的医师
Name of Physic...Reading Study (0008,1060) 1-n PN
阅读研究的医师
Operator's Name (0008,1070) 1-n PN
序列的技术支持人员
Manufacturer's Model Name (0008,1090) 1 LO
产生数字图象的设备的制造商模型号
Patient Group Length (0010,0000) 1 UL
Patient's Name (0010,0010) 1 PN
病人的完整合法姓名
Patient ID (0010,0020) 1 LO
主要医院标识号或病人代码
Patient's Birth Date (0010,0030) 1 DA
指定名字的病人的出生日期
Patient's Sex (0010,0040) 1 CS
病人性别
Patient's Age (0010,1010) 1 AS
病人年龄
Acquisition Group Length (0018,0000) 1 UL
Body Part Examined (0018,0015) 1 CS
检查的身体部位的描述
Slice Thickness (0018,0050) 1 DS
名义上的切片厚度,以毫米为单位
KVP (0018,0060) 1 DS
Data Collection Diameter (0018,0090) 1 DS
直径数据的采集
Device Serial Number (0018,1000) 1 LO
产生数字图象的设备的制造商序列号
Software Version(s) (0018,1020) 1-n LO
产生数字图象的设备的制造商模型号
Spatial Resolution (0018,1050) 1 DS
设备的固有毫米限制分辨率,是对于高对比物体所选择的数据
采集和重建技术。如果可变的交叉序列的图象,这个值在图象的中心
Reconstruction Diameter (0018,1100) 1 DS
直径的改变 在毫米范围之内的直径数据被用于生成影像的改变。
数据可能存在于这种范围之外,而且部分病人也在范围之外
Distance Source to Detector (0018,1110) 1 DS
源头到探测器的距离
Distance Source to Patient (0018,1111) 1 DS
源头到病人的距离
Gantry/Detector Tilt (0018,1120) 1 DS
支架/探测器的倾斜
Table Height (0018,1130) 1 DS
表高
Rotation Direction (0018,1140) 1 CS
旋转方向 当相关联时,源头的旋转方向大约最
接近设备的主要轴。计算标准:CW = 顺时针CC = 逆时针
Exposure Time (0018,1150) 1 IS
曝光时间
X-ray Tube Current (0018,1151) 1 IS
X射线管的电流
Generator Power (0018,1170) 1 IS
发电机功率
Focal Spot(s) (0018,1190) 1-n DS
病灶点
Convolution Kernel (0018,1210) 1-n SH
回旋中心 描述回旋中心或者算法的标签用于改变数据
Patient Position (0018,5100) 1 CS
病人位置
Relationship Group Length (0020,0000) 1 UL
Study Instance UID (0020,000D) 1 UI
研究的唯一标识符
Series Instance UID (0020,000E) 1 UI
序列的唯一标识符
Study ID (0020,0010) 1 SH
产生研究标识符的用户或设备
Series Number (0020,0011) 1 IS
标识这个序列的号码
Acquisition Number (0020,0012) 1 IS
获得的数字
Instance (form...Image) Number (0020,0013) 1 IS
标识图象的号码
Patient Orientation (0020,0020) 2 CS
病人方位
Image Position (Patient) (0020,0032) 3 DS
图像位置(病人)
Image Orientation (Patient) (0020,0037) 6 DS
图像方向(病人)
Frame of Reference UID (0020,0052) 1 UI
为一个序列唯一地标识参考帧
Position Reference Indicator (0020,1040) 1 LO
病人解剖学部分用作一个参考
Slice Location (0020,1041) 1 DS
实际的相对位置,以毫米为单位。
Image Comments (0020,4000) 1 LT
用户定义的关于图象的注解
Image Presenta... Group Length (0028,0000) 1 UL
Samples per Pixel (0028,0002) 1 US
每个象素实例每个象素的样本 对于单色(灰度)和
调色板颜色图像,位面的数字是1。对于RGB和其它三矢量
颜色模型,这个属性值是3。对于ARGB和其它四矢量颜色
模型,这个属性值是4。对于CT图像,每个象素实例
有一个1列举值。
Photometric Interpretation (0028,0004) 1 CS
光度计的解释 对于CT图像,有下面列举值之一:
MONOCHROME1 MONOCHROME2
Rows (0028,0010) 1 US
图像中行的数字
Columns (0028,0011) 1 US
图像中列的数字
Pixel Spacing (0028,0030) 2 DS
象素空间 病人中各个象素中心点之间的物理距离,
由一个双行的数字值(定界符)列值值以毫米来确定。
Bits Allocated (0028,0100) 1 US
位分配对于CT图像,位分配有16的列举值。
Bits Stored (0028,0101) 1 US
位存储对于CT图像,位存储有12到16的列举值。
High Bit (0028,0102) 1 US
高位对于CT图像,高位只有小于发送到位存储值的列举值。
Pixel Representation (0028,0103) 1 US
象素表示 象素样本的数据表示。每个样本有相同的象素表示。
列出的值:0000H=无符号整数0001H=2的补码。
Pixel Padding Value (0028,0120) 1 SS
添加到非矩形图象来填充到矩形格式的象素值
Window Center (0028,1050) 1-n DS
窗位
Window Width (0028,1051) 1-n DS
窗宽
Rescale Intercept (0028,1052) 1 DS
Rescale 截取
Rescale Slope (0028,1053) 1 DS
Rescale 斜面
Pixel Data Group Length (7FE0,0000) 1 UL
Pixel Data (7FE0,0010) 1 OB
象素数据
1 判断图像是单色的还是彩色的
根据0028,0004(Photometric Interpretation)决定,如果是MONOCHROME1或MONOCHROME2就是灰度的,如果是RGB则是RGB,还有其他可能。
还应该参考
0028,0100 BitsAllocated
0028,0002 SamplePerPixel
等决定位数
2 如何获取图像的像素数据
从7FE0,0010(Pixel Data)得到像素数据就可以了。
3 DICOM文件头
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,****)类标签,则应该忽略它。
4 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文件的格式就确定下来了。
转自: HC3i