用VC++和DCMTK显示DICOM医学图像

来源:互联网 发布:大数据运维工程师待遇 编辑:程序博客网 时间:2024/05/30 13:42
 

VC++DCMTK显示DICOM医学图像

 

摘 要 DICOM是医学影像存储和传输的国际标准,它的制定为不同的医学影像设备和用户提供了统一的接口标准和交互协议。解读 DICOM 的医学图像文件格式以及利用 VC++DCMTK显示方法显示DICOM医学图像。

关键词 DICOMPACSDCMTK; 医学图像; 文件格式; 传输语法

The display of DICOM medical Image with VC++ and DCMTK

AbstractDICOM is the international standard of medical images archiving and communication. It provides the interface standard and communication protocol for different medical imaging equipments and their users. Analysis on the storage format of DICOM3.0 medical image files and displays them by using displaying methods in VC++ and DCMTK .

Keywords DICOMPACS DCMTK medical Imagefile fromattransfer syntax

 

1引言

DICOM(Digital Imaging and Communications in Medicine)NEMA(美国制造商协会)ACR(美国放射学会)联合制定的一种规定数字医学影像和相关信息的格式及其信息交换方法的国际标准,现已几乎成为世界各国都遵循的医学图像标准,是医院间以及国际间医学图像交流的基础。 PACS(Picture Archiving and Communication System)是图像存档和通讯系统,它以数字的方法来存储、管理、传送和显示医学影像和相关信息,具有图像质量高,存储、传输和复制无失真,传送迅速,影像资料可共享等突出的特点。其中,医学图像的显示和处理是直接面向临床医护人员,它显示的图像质量、使用的方便性和系统的处理速度等指标直接关系到系统的应用成败,PACS中起着重要作用。

DCMTKDICOM Tool Kit)是一套针对 DICOM 标准,由Kuratorium OFFIS e.V.Healthcare Information and Communication SystemsEscherweg 等机构联合开发的面向软件设计工程师的开源软件开发包。它用ANSI C C++混合编程,实现了医学图像的传输、存储和打印等功能实现了DICOM标准的绝大部分功能,完全以源代码的形式呈现。DCMTK 开发包可从网上轻松下载到。目前全球有很多家医院和公司在使用它。它是现在主流的DICOM的开发包,后面我们将以DCMTK为工具来显示 DICOM 图像。

2         DICOM医学图像文件格式

DICOM格式图像文件是指按照 DICOM 标准而存储的文件。DICOM文件一般由 DICOM文件头和 DICOM数据集合组成。DICOM数据集合由 DICOM数据元素(Data Element) 按一定顺序排列组成, DICOM数据元素则是 DICOM文件最基本的构成单元(图1 DICOM 文件格式)。

21 DICOM 文件头

DICOM 文件头(DICOM File Meta Information)的最开始是文件前言,他由128 B00H组成,接下来是DICOM前缀,包含了字符串“DICM,一般用这4字节判别是否是一个DICOM文档。

1 DICOM 文件格式

22 DICOM 数据元素

DICOM文件中最基本的单元是数据元素,DICOM数据集就是由DICOM数据元素按照一定的顺序排列组成的。

标识符 一个2 B无符号整数对,分别代表组号和元素号,DICOM所有的数据元素都可以用标签来惟一表示。

数据类型(VR) 2 B的字符串,指明了该数据元素中的数据是哪种类型。不同的数据类型决定了数据的不同读取方式。

数据长度 一个2 B4 B(取决于显示或隐示VR)的无符号整数,指明该数据元素的数据域中数据的长度。

数据域 指明数据的具体数值,该字段的数据类型由数据元素的VR所明确定义。

上面有关数据元素的定义,我们举一个具体的例子来说明:00 28 00 10 55 53 02 00 00 01(十六进制)。其中0x00280010是图像行数的标识符;0x5553VR数据描述,DICOM标准中代表字符串“US;0x0200是数据长度;0x0001就是图像行数的具体值。

3         VC++DCMTK显示DICOM图像

3.1环境的准备

(1)            DCMTK开发包的官方网站是 http://www.dcmtk.org,只需要下载两项:DCMTK 3.5.4 - source code and documentation (2005-12-20)DCMTK 3.5.4 - support libraries for Windows

(2)            cmake安装(编译)工具的官方网站是http://www.cmake.org,下载cmake2.4并安装。解压dcmtk开发包,用cmake使dcmtk开发包并生成工程文件。用cmake打开dcmtk开发包,需要说明的是几个WITH_*选项就是“DCMTK 3.5.4 - support libraries for Windows”解压出来的东西。点击两次configure之后就可以点ok生成工程文件了。

(3)            VC++编译dcmtk工程,并生成一些静态连接库。这些静态连接库和头文件是用来在VC++下开发需要使用的,将这些文件分别都复制dcmtk_libdcmtk_include中以便引用。

(4)            运行VC ,点击tools 目录的options 命令,然后在directories 环境中作以下设置:

­ Include files 中加入E:/dcmtk-3.5.4/dcmtk_include

­ Library files 中加入E:/dcmtk-3.5.4/dcmtk_lib(假设dcmtk静态连接库和头文件都放在E:/dcmtk-3.5.4中)

 

3.2代码实现              

以上为DCMTK开发包VC做了准备开发环境之后,就可以进行代码的编写了。下面讲述VC下调用哪些类或函数进行DICOM图像的解析和显示。(将以下代码加入到view类的onDraw函数中)

(1DICOM文件的读取

     pDicomFile = new DcmFileFormat();

//DICOM文件

pDicomFile->loadFile(filename);

//得到数据集

     DcmDataset *pDataset = pDicomFile->getDataset();

(2)读和图像有关的信息

//得到传输语法

E_TransferSyntax xfer = pDataset->getOriginalXfer();

//根据传输语法构造DicomImagefstart帧开始一共fcount

DicomImage pDicomImg = new DicomImage (pDataset, xfer, 0, fstart, fcount);

//通过以下的方法得到并用BitmapHeadInformation的结构体来保存DICOM文件的信息

LPBITMAPINFOHEADER m_lpBMIH;

m_lpBMIH = (LPBITMAPINFOHEADER) new char[sizeof(BITMAPINFOHEADER) + sizeof(RGBQUAD) * 256];

    m_lpBMIH->biSize = sizeof(BITMAPINFOHEADER);

    m_lpBMIH->biWidth = pDicomImg->getWidth();

    m_lpBMIH->biHeight = pDicomImg->getHeight();

    m_lpBMIH->biPlanes = 1;

    m_lpBMIH->biBitCount = 24;

    m_lpBMIH->biCompression = BI_RGB;

    m_lpBMIH->biSizeImage = 0;

    m_lpBMIH->biXPelsPerMeter = 0;

    m_lpBMIH->biYPelsPerMeter = 0;

(3) 读出的图像数据

void* pDicomDibits;

//得到DICOM文件第frameDIB数据(假设是24位的)

pDicomImg->createWindowsDIB(pDicomDibits, 0, frame, 24, 1, 1);

(4) 调用显示API直接进行显示(2 DICOM图像显示结果)

StretchDIBits(pDC->GetSafeHdc(),0,0,m_lpBMIH->diWidth,m_lpBMIH ->diHeight,0,0,m_lpBMIH->diWidth,m_lpBMIH->diHeight,pDicomDibits, (LPBITMAPINFO) m_lpBMIH,DIB_RGB_COLORS, SRCCOPY);

 

2 DICOM图像显示结果

4         讨论

DICOM 作为医学图像存档和通信的国际标准,是所有医学影像技术的基础,DCMTK已经是比较成熟和功能齐全的开源软件,采用 DCMTK来开发DICOM图像的方法具有使得开发高效和速度快的优点。PACS在医院的应用越来越广泛,如何充分利用海量的医学影像,更好地辅助医学影像诊断和满足医师的科研和使用需求已成为越来越迫切的需求,加强医学图像后处理软件的开发和研究非常必要,这也是我们今后努力的方向。目前不能支持 DICOM 标准中所有传输语法的编解码,导致部分DCM 文件的解读存在困难,尚须改进。在此,只给出简单的DICOM图像文件的显示思路及实例,希望能对从事医学图像的工作者有所启发。

 

参 考 文 献

[1] The DICOM standard.  http://medical.nema.org/dicom/2007/Wednesday, January 10, 2007

[2] 曹玉磊.DICOM标准研究与图像处理工具的实现[D]. 西安电子科技大学,2007

[3] 高勇.基于DICOM的医学图像系统研究[D]. 西南交通大学,2006

[4] 周长发.精通 Visual C++图像编程[M].电子工业出版社,2004.

[5] 王立功,刘伟强,于甬华,王广志.DICOM的医学图像文件格式解析与应用研究[J]. 计算机工程与应用. 2006 年第 29.

[6]林春漪,尹俊勋,马丽红,陈健宇.论解读DICOM医学图像文件及其显示的VC++实施方法[J]. 现代医学仪器与应用,2005年第17卷第 1.