DICOM图像读取
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
示的方法
【摘要】 目的 实现 Windows 环境下读取与显示多层 DICOM 格式图像,为医学图像三维 配准与重建等后处理提供数据。方法 针对 DICOM 文件格式,在 Visual C++ 6.0 下设计了简 化的图像类结构,将多层 DICOM 图像的相关数据读入到动态数组中,并转换成 BMP 位图 实现在 Windows 环境下不同层图像间的切换显示。结果 选取 CT、MR、PET 等不同模态的 DICOM 图像进行实验,均可正确读取。结论 通过解析 DICOM 图像文件存储格式,实现了 多层 DICOM 图像文件的读取与不同层间的切换显示。本程序运行于 Windows 环境,不依 赖于具体 DICOM 工作站,便于科研教学使用。 【关键词】 多层 DICOM 图像读取;图像显示;医学图像后处理;数据元素;窗宽窗位
表2bmp文件结构示意图略不同层间dicom图像切换显示的实现此时已读取的像素数据还无法显示因为dicom图像像素的灰阶可以达到216而系统的调色板只能显示28种颜色所以为了较逼真的显示医学图像的全部信息本文设计了调节窗宽窗位3的功能可根据需要调整以显示感兴趣的组织影像
Windows 平台下多层 DICOM 图像读取与显
需要注意的是,BMP 图像像素数据与 DICOM 像素数据的存储顺序[5]有所不同,在 填充数据时要将 DICOM 像素数据的最后一行赋值为 BMP 数据的第一行,倒数第二行赋值 为第二行,依此类推,才能用 BMP 格式正确地显示原 DICOM 图像。
1 4 2 不同层间切换显示 当需要在不同层图像间切换显示时,根据用户选择的待 显层数信息到存放多层 DICOM 图像数据的动态数组中查找,读取相应层图像数据信息并调 用 Windows API 函数将其显示出来。图 3 是多层 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
为 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 的数值即可。
若 VR 为显式,我们可以根据 VR 的类型使用 C++中相应的数据类型存储值域的内容。 若 VR 为隐式,则在数据元素中不包含该字段,此时可以根据该数据元素的标签通过检索数 据字典找到对应值域的数据类型。
任何存储单位大于 1 字节的数据都存在字节排序的问题。UNIX 系统通常使用大端字节 序(Big Endian byte ordering),而 Windows 系统通常使用小端字节序(Little Endian byte ordering)。VR 和字节序由标签为(0020,0010)的传输语法决定。所以在读取数据前要先 读传输语法,获得数据排列的规则。由于本文研究的是 DICOM 图像在 Windows 操作系统 下的读取及显示方法,所以若传输语法规定待读 DICOM 图像的字节序为大端序,则可能需 要进行字节交换。
length,VL)和值域(value field,VF)四部分组成(图 1)。VR 是可选的,由传输语法决 定。
其中,标签(TAG)是一对 16 位无符号整数,格式用 16 进制表示(组号,元素号)。 性质相近或相关的属性被编入同一组。表 1 列出了本文读取的数据组。元素号用于区分同一 组中不同属性的数据元素。标签是唯一的,可以根据标签找到需要的信息。 值表示(VR) 是一个 2 字节的字符串,表示该数据元素的数据域所存储数据的类型。该字段是可选字段。 一个数据集中的数据元素是否包含该字段由传输语法所决定,有显式和隐式之分。
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 本文读取的数据组(略) 对读取单层 DICБайду номын сангаасM 文件的方法多次调用即可完成多层 DICOM 文件的读取。在读取多 层 DICOM 文件时,由于用户一次选择读取的文件层数可能不同,需要根据读入的层数实时 改变存放多层 DICOM 信息的数组大小。因此,我们使用动态数组保存多层 DICOM 文件信 息并根据读取的顺序为各层图像编号。表 2 BMP 文件结构示意图(略) 1 4 不同层间 DICOM 图像切换显示的实现 此时已读取的像素数据还无法显示,因
数据长度(VL)是一个 16 位或 32 位整型数(根据 VR 种类和 VR 是显式还是隐式决 定)。VL 指定数据域的长度,该长度以字节为单位。
数据域(VF)存放真正的数据。读取 DICOM 文件时先找到感兴趣数据元的标签,再 根据数据长度和值表示读取数据域的内容。
1 2 影响 DICOM 文件读取的因素分析 在读取 DICOM 文件时,本文主要考虑两方 面的影响因素:VR 和字节序。
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.
【摘要】 目的 实现 Windows 环境下读取与显示多层 DICOM 格式图像,为医学图像三维 配准与重建等后处理提供数据。方法 针对 DICOM 文件格式,在 Visual C++ 6.0 下设计了简 化的图像类结构,将多层 DICOM 图像的相关数据读入到动态数组中,并转换成 BMP 位图 实现在 Windows 环境下不同层图像间的切换显示。结果 选取 CT、MR、PET 等不同模态的 DICOM 图像进行实验,均可正确读取。结论 通过解析 DICOM 图像文件存储格式,实现了 多层 DICOM 图像文件的读取与不同层间的切换显示。本程序运行于 Windows 环境,不依 赖于具体 DICOM 工作站,便于科研教学使用。 【关键词】 多层 DICOM 图像读取;图像显示;医学图像后处理;数据元素;窗宽窗位
表2bmp文件结构示意图略不同层间dicom图像切换显示的实现此时已读取的像素数据还无法显示因为dicom图像像素的灰阶可以达到216而系统的调色板只能显示28种颜色所以为了较逼真的显示医学图像的全部信息本文设计了调节窗宽窗位3的功能可根据需要调整以显示感兴趣的组织影像
Windows 平台下多层 DICOM 图像读取与显
需要注意的是,BMP 图像像素数据与 DICOM 像素数据的存储顺序[5]有所不同,在 填充数据时要将 DICOM 像素数据的最后一行赋值为 BMP 数据的第一行,倒数第二行赋值 为第二行,依此类推,才能用 BMP 格式正确地显示原 DICOM 图像。
1 4 2 不同层间切换显示 当需要在不同层图像间切换显示时,根据用户选择的待 显层数信息到存放多层 DICOM 图像数据的动态数组中查找,读取相应层图像数据信息并调 用 Windows API 函数将其显示出来。图 3 是多层 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
为 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 的数值即可。
若 VR 为显式,我们可以根据 VR 的类型使用 C++中相应的数据类型存储值域的内容。 若 VR 为隐式,则在数据元素中不包含该字段,此时可以根据该数据元素的标签通过检索数 据字典找到对应值域的数据类型。
任何存储单位大于 1 字节的数据都存在字节排序的问题。UNIX 系统通常使用大端字节 序(Big Endian byte ordering),而 Windows 系统通常使用小端字节序(Little Endian byte ordering)。VR 和字节序由标签为(0020,0010)的传输语法决定。所以在读取数据前要先 读传输语法,获得数据排列的规则。由于本文研究的是 DICOM 图像在 Windows 操作系统 下的读取及显示方法,所以若传输语法规定待读 DICOM 图像的字节序为大端序,则可能需 要进行字节交换。
length,VL)和值域(value field,VF)四部分组成(图 1)。VR 是可选的,由传输语法决 定。
其中,标签(TAG)是一对 16 位无符号整数,格式用 16 进制表示(组号,元素号)。 性质相近或相关的属性被编入同一组。表 1 列出了本文读取的数据组。元素号用于区分同一 组中不同属性的数据元素。标签是唯一的,可以根据标签找到需要的信息。 值表示(VR) 是一个 2 字节的字符串,表示该数据元素的数据域所存储数据的类型。该字段是可选字段。 一个数据集中的数据元素是否包含该字段由传输语法所决定,有显式和隐式之分。
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 本文读取的数据组(略) 对读取单层 DICБайду номын сангаасM 文件的方法多次调用即可完成多层 DICOM 文件的读取。在读取多 层 DICOM 文件时,由于用户一次选择读取的文件层数可能不同,需要根据读入的层数实时 改变存放多层 DICOM 信息的数组大小。因此,我们使用动态数组保存多层 DICOM 文件信 息并根据读取的顺序为各层图像编号。表 2 BMP 文件结构示意图(略) 1 4 不同层间 DICOM 图像切换显示的实现 此时已读取的像素数据还无法显示,因
数据长度(VL)是一个 16 位或 32 位整型数(根据 VR 种类和 VR 是显式还是隐式决 定)。VL 指定数据域的长度,该长度以字节为单位。
数据域(VF)存放真正的数据。读取 DICOM 文件时先找到感兴趣数据元的标签,再 根据数据长度和值表示读取数据域的内容。
1 2 影响 DICOM 文件读取的因素分析 在读取 DICOM 文件时,本文主要考虑两方 面的影响因素:VR 和字节序。
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.