Literature
首页医源资料库在线期刊中华现代影像学杂志2008年第5卷第1期

Windows平台下多层DICOM图像读取与显示的方法

来源:《中华现代影像学杂志》
摘要:【摘要】目的实现Windows环境下读取与显示多层DICOM格式图像,为医学图像三维配准与重建等后处理提供数据。方法针对DICOM文件格式,在VisualC++6。0下设计了简化的图像类结构,将多层DICOM图像的相关数据读入到动态数组中,并转换成BMP位图实现在Windows环境下不同层图像间的切换显示。结果选取CT、MR、PE......

点击显示 收起

【摘要】  目的 实现Windows环境下读取与显示多层DICOM格式图像,为医学图像三维配准与重建等后处理提供数据。方法 针对DICOM文件格式,在Visual C++ 6.0下设计了简化的图像类结构,将多层DICOM图像的相关数据读入到动态数组中,并转换成BMP位图实现在Windows环境下不同层图像间的切换显示。结果 选取CT、MR、PET等不同模态的DICOM图像进行实验,均可正确读取。结论 通过解析DICOM图像文件存储格式,实现了多层DICOM图像文件的读取与不同层间的切换显示。本程序运行于Windows环境,不依赖于具体DICOM工作站,便于科研教学使用。

【关键词】  多层DICOM图像读取;图像显示;医学图像后处理;数据元素;窗宽窗位


    A method of reading and displaying multi-slice DICOM images under Windows

    ZHU Zhi-liang,YANG Ye,WANG Bei-lei,et al.Biomedical and Multimedia Information Technology Group,Northeastern University,Shenyang 110004,China

    [Abstract]  Objective  To implement reading and displaying multi-slice DICOM images under Windows environment.Methods  According to the format of DICOM file,we designed the simplified DICOM class under Visual C++ 6.0.We read the information of multi-slices DICOM images into dynamic array and translated the DICOM file into BMP file to realize switched displaying of DICOM image under Windows environment.Results  We tested with several DICOM images from different modalities,all images could be properly read and displayed.Conclusion  The software of this article realizes the reading and switched displaying of multi-slice DICOM images.It runs under Windows that was independent on DICOM image work station and can provide data for medical image of 3-dimensional registration and reconstruction.

    [Key words]  read of multi-slice DICOM images;image display;medical image postprocess; data element; window center- window width

    医学数字成像和传输(Digital Imaging and Communications in Medicine,DICOM)[1]是用于医学图像存储和通信的国际标准,规范了医学图像及各种数字信息在异构系统和设备之间存储、传送时的文件格式和语义描述,为不同的医学影像设备提供了一个一致性的接口,以实现数字影像在各种医学影像设备间的交换传输。随着DICOM标准的不断发展,现在生产的各种医疗设备(如CT、PET、MRI等)都已采用DICOM 30标准的数字接口。

    目前,多数DICOM图像浏览软件都基于UNIX 平台且仅能读取与显示一幅图像,而在科研和教学中常需要在Windows环境下显示处理DICOM图像。另外,对医学图像进行后处理如三维配准及重建之前,首先要得到多层DICOM图像的信息,故本文对在Windows环境下读取与显示多层DICOM图像的方法进行了初步研究,现将结果阐述如下。

    1  资料与方法

    11  DICOM文件格式  DICOM文件是采用面向对象的方法来设计和编码的,每个文件有一个信息对象(IOD)与之相关联,信息对象的属性由数据元素来表示,而且对象的属性只能编码一次,用UID标识符来唯一标识[2]。DICOM文件一般可分为文件头和数据集两部分。文件头又有两部分:开头有128个字节的同步码,通常以十六进制的00填充;紧随其后4个字节的ASCII 码“DICM”是所有DICOM 数据文件的标识符。数据集是一些数据元的有序集合,其中包含诸如受检者信息、成像的技术参数、医生诊断信息、图像数据等资料。数据元一般由标签(TAG)、值表示(value representation,VR)、值长度(value length,VL)和值域(value field,VF)四部分组成(图1)。VR是可选的,由传输语法决定。

    其中,标签(TAG)是一对16位无符号整数,格式用16进制表示(组号,元素号)。性质相近或相关的属性被编入同一组。表1列出了本文读取的数据组。元素号用于区分同一组中不同属性的数据元素。标签是唯一的,可以根据标签找到需要的信息。    值表示(VR)是一个2字节的字符串,表示该数据元素的数据域所存储数据的类型。该字段是可选字段。一个数据集中的数据元素是否包含该字段由传输语法所决定,有显式和隐式之分。

    数据长度(VL)是一个16位或32位整型数(根据VR种类和VR是显式还是隐式决定)。VL指定数据域的长度,该长度以字节为单位。

    数据域(VF)存放真正的数据。读取DICOM文件时先找到感兴趣数据元的标签,再根据数据长度和值表示读取数据域的内容。

    12  影响DICOM文件读取的因素分析  在读取DICOM文件时,本文主要考虑两方面的影响因素:VR和字节序。

    若VR为显式,我们可以根据VR的类型使用C++中相应的数据类型存储值域的内容。若VR为隐式,则在数据元素中不包含该字段,此时可以根据该数据元素的标签通过检索数据字典找到对应值域的数据类型。

    任何存储单位大于1字节的数据都存在字节排序的问题。UNIX系统通常使用大端字节序(Big Endian byte ordering),而Windows系统通常使用小端字节序(Little Endian byte ordering)。VR和字节序由标签为(0020,0010)的传输语法决定。所以在读取数据前要先读传输语法,获得数据排列的规则。由于本文研究的是DICOM图像在Windows操作系统下的读取及显示方法,所以若传输语法规定待读DICOM图像的字节序为大端序,则可能需要进行字节交换。

    13  利用VC++ 6.0读取多层DICOM文件的实现  DICOM数据集包含的信息很多,有些信息很少用到或者与具体的医疗情况不符,因此去除冗余信息、保留主要信息是很有必要的。采用面向对象的思想,笔者设计了简化的DICOM图像类结构。类定义如下:

    Class DICOM: //DICOM 图像类

    {public class PatientInfo;//患者信息

    public class StudyInfo;//检查信息

    public class ImageInfo;//图像信息参数

    public class Pixel;//图像像素信息}

    其中患者信息主要获取患者的姓名、性别等信息;检查信息主要获取检查的标识、序列号等信息;图像信息参数主要获取图像的长、宽以及存储每个像素所用的比特数等信息;图像像素信息获取图像数据信息。

    读取单层DICOM文件时,通过标签匹配,首先匹配(0020,0010)标签,即传输语法。再依次匹配 DICOM图像类中定义的各数据组中的信息标签。匹配过程中要考虑VR及字节序对数据读取的影响。我们为每个感兴趣的组号设置了标识位,若该组信息读取完毕,则置标识位为TRUE。需要注意的是,为了存储各种规格的图像数据,存储单层DICOM图像数据的数组长度要根据已经读取的图像行、列、每位像素占用的比特数进行动态分配。图2是读取单层DICOM文件的流程图。图1  DICOM数据元结构表1  本文读取的数据组(略)

    对读取单层DICOM文件的方法多次调用即可完成多层DICOM文件的读取。在读取多层DICOM文件时,由于用户一次选择读取的文件层数可能不同,需要根据读入的层数实时改变存放多层DICOM信息的数组大小。因此,我们使用动态数组保存多层DICOM文件信息并根据读取的顺序为各层图像编号。表2  BMP文件结构示意图(略)

    14  不同层间DICOM图像切换显示的实现  此时已读取的像素数据还无法显示,因为DICOM图像像素的灰阶可以达到216,而系统的调色板只能显示28种颜色,所以为了较逼真的显示医学图像的全部信息,本文设计了调节窗宽、窗位[3]的功能,可根据需要调整以显示感兴趣的组织影像。在实现时,采用了一种加速方法:即将指定范围内的灰度映射到0~255并制作灰度转换表。在数据转换时就可以直接查表找到对应的显示值而不是每次都要重新计算相应的灰度映射关系,从而提高了程序的效率。

    141  转换成BMP位图显示单层DICOM图像  BMP位图是Windows操作系统最常用的图像文件格式。一般的BMP文件由文件头、文件信息、调色板和像素数据组成,见表2。关于BMP图像文件的详细内容可参考有关文献[4]。

    把单层DICOM格式图像转换成BMP文件显示时,需将已经读取到DICOM类中的数据写入BMP文件结构规定的相应位置并填充位图文件头结构,再调用Windows API绘图函数显示即可。由于显示的是256色的8位灰度图像,所以只要令tag-RGB结构中的颜色分量成员RGB Blue=RGB Green=RGB Red,并填入窗宽范围内的0~255的数值即可。

    需要注意的是,BMP图像像素数据与DICOM像素数据的存储顺序[5]有所不同,在填充数据时要将DICOM像素数据的最后一行赋值为BMP数据的第一行,倒数第二行赋值为第二行,依此类推,才能用BMP格式正确地显示原DICOM图像。

    142  不同层间切换显示  当需要在不同层图像间切换显示时,根据用户选择的待显层数信息到存放多层DICOM图像数据的动态数组中查找,读取相应层图像数据信息并调用Windows API函数将其显示出来。图3是多层DICOM图像间切换显示的流程图。

    2  结果

    本文用自编的程序读取了大量由医院提供的CT、PET、MRI数据,都可正确读入。还将本软件显示的图像效果与国外优秀软件显示的图像效果进行了比较。图4是对同一帧脑部CT DICOM文件分别用专用软件显示与用自行开发软件显示的图像效果比较。结果表明:显示的图像质量完全满足医生的诊断需要。

    3  讨论

    针对DICOM图像文件格式,本文提出了简化的DICOM图像类结构并完成了多层DICOM图像的读取及切换显示。使用几种模态的图像进行读取及显示实验,取得了较好的效果。准确显示DICOM图像对辅助医学影像诊断具有重要意义,而正确读取多层DICOM图像是实现图像后处理的重要基础,如为图像的三维配准及重建提供可靠的数据。

    同国外相关软件以及UNIX平台下的图像显示软件相比,本软件还有一些缺点和不足,还有很大的拓展空间:如本软件仅实现了对非压缩图像数据的解读,图像后处理的功能较少等,需要在以后的研究中进一步完善。

【参考文献】
  1 Digital imaging and communications in medicine (DICOM) 2003.American College Radiology & National Electrical Manufactures Association,2000,3:32.

2 谢长生,华明.DICOM图像显示的研究与实现.计算机工程与科学,2002,24 (6):38.

3 徐潘辉,林峰.DICOM医学数字图像格式与BMP通用图像格式转换软件的设计与实现.医疗设备信息,2005,21(3):1-5.

4 胡海生,李升亮.Visual C++ 6.0编程学习捷径.北京: 清华大学出版社,2003,154-162.

5 侯庆锋,李月卿,王昌元,等.WINDOWS 环境下DICOM医学图像显示方法的初步研究.医学影像学杂志,2005,15(11) :1013-1015.


作者单位:110004 辽宁沈阳,东北大学软件学院医疗信息处理技术研究室(△通讯作者)

作者: 朱志良,杨 叶,王蓓蕾,刘洪娟,李 季 2008-5-30
医学百科App—中西医基础知识学习工具
  • 相关内容
  • 近期更新
  • 热文榜
  • 医学百科App—健康测试工具