rolei注:文章不长,是本文作者的总结,提纲携领,相关的说细文档出处比较详尽,并提供了相关的工具软件及开发程序,希望对大家有所帮助。同时也希望大家能够多多的发一些贴子过来,原创或是转贴。共同关注,共同进步,这是我们建立此论坛的真正目的。
医学数字影像和通讯(dicom)编程简介
刚开接触dicom时网上可查的资料真是太少了。
在此写出一些心得和经验和大家分享,希望坛子里做dicom的网友能够得到一些启发。
目录:
一 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 里 |