dicom图像在转换为numpy数组之前调整大小

时间:2017-01-18 08:42:16

标签: python image numpy dicom pydicom

我在一个文件夹中有成千上万的dicom图像。我用这样的pydicom读了它们

import numpy as np
import dicom

folder = "/images"
imgs = [dicom.read_file(folder + '/' + s) for s in os.listdir(folder)]

然后我想将所有图像堆叠成一个numpy数组,如下所示:

data = np.stack([i.pixel_array for i in imgs])

但是,图像尺寸不同,因此无法堆叠。

如何添加将所有图像大小调整为1000x1000的步骤?

1 个答案:

答案 0 :(得分:1)

如果您存储为numpy数组列表,那么它们的大小可以不同。否则使用scipy缩放功能

import numpy as np
import dicom
import scipy

xsize = 1000; ysize = 1000
folder = "/images"
data = np.zeros(xsize, ysize, len(os.listdir(folder)))
for i, s in enumerate(os.listdir(folder)):

    img = np.array(dicom.read_file(folder + '/' + s).pixel_array)
    xscale = xsize/img.shape[0]
    yscale = ysize/img.shape[1]
    data[:,:,i] = scipy.ndimage.interpolation.zoom(img, [xscale, yscale]))

您可以保存为列表和堆栈,但似乎更容易通过len(os.listdir(文件夹))预先分配1000 x 1000的numpy数组。我没有dicom或测试文件,因此无法检查您的案例,但这个想法确实有效(我之前已将它用于将图像缩放到正确的大小)。同时检查刻度是否正确。