使用IDL显示DICOM文件的信息

it2025-05-17  15

目录

零、前言一、DICOM文件简介二、IDL实现读取DICOM文件信息三、结果展示

零、前言

这篇博客主要是通过IDL语言显示医学图像DICOM文件的一些信息,例如病人名字,医院,图片分辨率等信息。需要用的ENVI平台来编写IDL语言和显示结果,ENVI软件的下载和破解可以参考我之前写的一篇博客。

安装IDL/ENVI并显示DCM文件图像

一、DICOM文件简介

DICOM(Digital Imaging and Communications in Medicine)即医学数字成像和通信,是医学图像和相关信息的国际标准(ISO 12052)。它定义了质量能满足临床需要的可用于数据交换的医学图像格式。

头信息(Header)和图片数据(image data)存储在同一文件中。同时还存储有关患者,机器和数据采集的数百条数据。

DICOM文件的数据集和数据元素如下所示: 数据集中包含很多数据元素,而每一个数据元素中又包含了四个值,分别是标记、值表示法、数据长度和数据值。这里我们只用关心标记和数据值就可以了。

标记是我们用来获取DICOM文件数据的一个索引号,类似于数组的下标。它是由两个部分组成,组号(Group)和元素号(Element),每个部分又是由两个字节组成。例如:0010 0010 就是一个标记,前四个数字组成两个字节表示组号,后四个数字组成两个字节表示元素号,每个数字都是十六进制的(4比特)。0010 0010这个标记所对应的数据值就是病人的名字。

而数据值就是标记所对应一些关于病人或者图片的信息。

标记可以通过软件Sante DICOM Viewer来获得。获得方式也很简单,打开软件,点击View File Header按钮即可。

Sante DICOM Viewer 8 存放在我的百度网盘,大家可以随意取用。

链接:https://pan.baidu.com/s/1blElVhF5SxflEPhDNaK9mQ Sante DICOM Viewer 8 提取码:3fk3

二、IDL实现读取DICOM文件信息

接下来我们通过IDL编程,借助标记来实现读取DICOM文件的信息。代码如下所示,我都写了详细注释,代码也比较简单,所以不再过多解释。

;函数:获取dicom文件信息 输入:DICOM文件名 输出:信息数组 FUNCTION getDicomInfo, filename info = file_info(filename) fsize = info.size ;得到文件大小(字节) obj = OBJ_NEW('IDLffDICOM', filename) rows = *(obj->GetValue('0028'x,'0010'x,/NO_COPY))[0] ;读取图像的行数 cols = *(obj->GetValue('0028'x,'0011'x,/NO_COPY))[0] ;读取图像的列数 bits = *(obj->GetValue('0028'x,'0100'x,/NO_COPY))[0] ;读取每个像素值的位数 datasize = rows * cols * bits /8. ;计算图像的大小(字节) patientName = *(obj->GetValue('0010'x,'0010'x,/NO_COPY))[0] ;读取病人的名字 patientAge = *(obj->GetValue('0010'x,'1010'x,/NO_COPY))[0] ;读取病人的年龄 hospital = *(obj->GetValue('0008'x,'0080'x,/NO_COPY))[0] ;读取医院的名字 headersize = fsize - datasize ;计算DICOM文件头的大小(字节) OBJ_DESTROY, obj return, [patientName, patientAge, hospital, STRING(fsize), STRING(rows),STRING(cols),STRING(datasize), STRING(headersize)] END

然后调用该函数并显示出来读取的信息。

PRO homework2 proPath=routine_filepath('homework2') ;读取homework2.pro所在路径 proDir=file_dirname(proPath) ;得到上一级目录 print, '当前工程所在路径: ' + proDir ;打印上一级目录 filename = DIALOG_PICKFILE(PATH=proDir, $ ;从上一级目录打开对话框 TITLE='请选择一个DCM文件', $ ;对话框标题 FILTER='*.dcm') ;查找的文件后缀名 print,'所选择的文件是: ' + $ ;打印选择的dicom文件名 FILE_BASENAME(filename) ;从完整路径中提取文件名 getInfo = getDicomInfo(filename) ;通过调用函数来获得dicom文件中一些的信息 print,'病人的名字 :' + getInfo[0] ;显示读取的信息 print,'病人的年龄 :' + getInfo[1] print,'病人所在医院 :' + getInfo[2] print,'dicom文件大小 :' + getInfo[3] print,'dicom文件行数 :' + getInfo[4] print,'dicom文件列数 :' + getInfo[5] print,'dicom文件图像字节数 :' + getInfo[6] print,'dicom文件头字节数 :' + getInfo[7] END

三、结果展示

运行该程序后,首先会选择要显示的DICOM文件。

然后在控制台会输出我们读取到的信息。

完整工程存放在我的百度网盘中,大家可以随意取用 链接:https://pan.baidu.com/s/1i3UZAQ6KUnABmbWdwYeWog homework2 提取码:5hp2

最新回复(0)