无法将DICOM的图像数据馈送到图像数据生成器中

问题描述 投票:4回答:1

因此,我已经预处理了一些dicom图像以馈入神经网络,并且在图像增强步骤中,图像数据生成器期望输入4d,而我的数据是3d(200、420、420)]

[我试图重塑阵列并扩大尺寸,但是在两种情况下我都无法绘制阵列中的单个图像(期望图像的形状为420、420,而我的新图像的形状为420、420、1)

这是我的代码;

我具有将DICOM图像转换成具有良好对比度的图像的三个功能;

这需要房屋单位

def transform_to_hu(medical_image, image):
    intercept = medical_image.RescaleIntercept
    slope = medical_image.RescaleSlope
    hu_image = image * slope + intercept

    return hu_image

此设置窗口图像值;

def window_image(image, window_center, window_width):
    img_min = window_center - window_width // 2
    img_max = window_center + window_width // 2
    window_image = image.copy()
    window_image[window_image < img_min] = img_min
    window_image[window_image > img_max] = img_max

    return window_image

并且此函数加载图像:

def load_image(file_path):
    medical_image = dicom.read_file(file_path)
    image = medical_image.pixel_array

    hu_image = transform_to_hu(medical_image, image)
    brain_image = window_image(hu_image, 40, 80)
    return brain_image

然后我加载我的图像:

files = sorted(glob.glob('F:\CT_Data_Classifier\*.dcm'))
images = np.array([load_image(path) for path in files])

images.shape返回(200,512,512)一切都很好,例如,我可以绘制第100张图像plt.imshow(images[100])并绘制图像

然后将数据输入到图像数据生成器中

train_image_data = ImageDataGenerator(
    rescale=1./255,
    shear_range=0.,
    zoom_range=0.05,
    rotation_range=180,
    width_shift_range=0.05,
    height_shift_range=0.05,
    horizontal_flip=True,
    vertical_flip=True,
    fill_mode='constant',
    cval=0

但是,当我尝试绘制时,使用此代码:

plt.figure(figsize=(12, 12))
for X_batch, y_batch in train_image_data.flow(trainX, trainY, batch_size=9):
    for i in range(0, 9):
        plt.subplot(330 + 1 + i)
        plt.imshow(X_batch[i])
    plt.show()
    break 

它返回

(ValueError: ('Input data in "NumpyArrayIterator" should have rank 4. You passed an array with shape', (162, 420, 420)))

我尝试过expand_dims并重塑形状以在数组的末尾添加一个额外的维度来表示通道但随后返回

TypeError: Invalid shape (420, 420, 1) for image data

plt.imshow阶段

我是医生,而不是经验丰富的程序员,所以,我非常感谢您的帮助。干杯。

python arrays numpy rgb dicom
1个回答
2
投票

您添加额外的尺寸来代表渠道是正确的。那部分看起来很好。问题出在绘图上。为此,您可以使用:

© www.soinside.com 2019 - 2024. All rights reserved.