DICOM笔记整理

来源:互联网 发布:美篇类似软件 编辑:程序博客网 时间:2024/05/16 09:51
2008年09月10日 星期三 14:40

刚开接触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 里面每一个 Item 又是一个 dataset。 [注意]:dicom协议共有15章,其中第三章是“信息对象定义”,第五章是“数据结构和编码”,第六章是“数据字典”这几张比较重要

三 如何编写dicom程序自己编写dicom很困难,编出来的程序经常会有兼容性的问题。本人提倡用开发包进行dicom程序编写,但是为了加深对dicom协议的了解还是应该尝试一下至少看一看别人的代码。这里提供两个程序。这两个程序都存在兼容性的问题,有的dicom文件会读不出来。但是作为初学者的参考还是值得一看的。

第一个程序是pacs论坛上的总版主JB所写(对!还是那个人),“DcmBmp转换程序.rar”主要是把dicom文件中的像素信息转换成bmp文件。

第二个程序是一个pacs论坛上的一个网友wakyrei所写(由于服务器数据库文件以外遭到破坏这个人在pacs论坛上的所有信息都已经消失的无影无踪了),“dcm”此程序相当粗燥读起来需要一定耐心,作者好像根本不懂怎样使用mfc,不过其中的dicom类还是值得推敲的

原创粉丝点击