医学影像AI·医疗大数据·智慧互联医疗

使用PyDICOM包读取医学图像数据,并将其转成Numpy

2017-12-07  本文已影响105人  一入DL深如海

我将使用pydicom包读取一系列DICOM图像,并将他们转成NumPy数组.这将涉及从DICOM文件和像素数据本身读取元数据。

第一步:安装pydicom包.           

               pip  install  pydicom

我加载一系列的DICOM数据并将其转为3D NumPy数组,使用 matplotlib可视化两个切片.


第二部:导入一些包.

               import dicom

               import os

               import numpy

               from matplotlib import pyplot, cm


第三步:我们用os.path.walk遍历整个目录,收集全部.dcm文件,并收集到一个名为'lstFilesDCM'的名单:


第四步:pydicom这个包的一个值得注意的方面是读取DICOM文件。它创建了一个dicom.dataset.filedataset 的对象,不同的元数据被分配给具有相同名称的对象属性。说实在的这句话我现在我没搞明白,不过不影响我们的进程.

在第一行我们加载第一DICOM文件,我们将它命名为RefDs作为参考使用,提取元数据并将其文件名放在lstFilesDCM列表中.然后我们计算的三维NumPy数组的总尺寸,这就相当于(切片中像素行数)*(切片中像素列数)*(切片数量)沿着x,y,z轴.最后,我们使用 PixelSpacing和SliceThickness属性计算三个轴之间的像素间距。我们把数组的尺寸放在ConstPixelDims和 ConstPixelSpacing的间距中。行、列、像素间距和切片厚度都是元数据条目。

第五步:我们简单地用numpy.arange,ConstPixelDims,和ConstPixelSpacing计算该阵列轴

第六步

你可以看到,我们在这里做的是首先创建一个命名arraydicom的NumPy数组,使用之前ConstPixelDims计算的指定尺寸.该数组的dtype与我们最初用来提取元数据的参考数据集RefDs的pixel_array的dtype相同.这里感兴趣的是pixel_array对象是一个纯NumPy数组,其中包含特定DICOM slice / image的像素数据。因此,我们接下来要做的就是循环收集的DICOM文件名,并使用dicom.read_file函数将每个文件读入一个dicom.dataset.FileDataset对象。然后,我们使用该对象的pixel_array属性,并将其折叠到ArrayDicom中,沿z轴进行堆叠。


第七步:而就是这样!使用matplotlib中的pyplot模块,可视化:

上一篇下一篇

猜你喜欢

热点阅读