出现空白图像

问题描述:

我正在使用simpleITK以.mha格式处理MRI图像。随后我将它转换成一个numpy数组。我能够使用matplotlib可视化图像。但是,如果我执行任何预处理,或者我通过二进制掩码乘以图像,我所得到的只是一张空白图像。有什么我失踪了。我的简化代码如下所示。出现空白图像

import SimpleITK as sitk 
import numpy as np 
from matplotlib import pyplot as plt 
input_image = sitk.ReadImage('MRI.mha') 
input_array = sitk.GetArrayFromImage(input_image) 
plt.imshow(input_array[0,:,:],cmap = 'gray') # I get an image for this. No preprocessing has been performed. 
plt.show() 
# However, if I replace input_array after preprocessing, I get a black square. 

我认为这与数据范围有关,但我无法确定在哪里。在预处理之前可视化的图像最大值为744.预处理后,此值降至4,即出现问题时。任何指向我可能会出错的地方?

+1

尝试检查预处理后数据的最小值和最大值。另外请确保你没有创建NaN或任何会出现屏蔽的值。这是为了确保问题不是你的数据,而是情节本身。如果可能,你可以提供一个随机的例子,以便其他人可以自行测试吗? – armatita

+0

预处理后的数据落在0到4的范围内。数据中没有NaN。这是包含标签的图像(https://drive.google.com/open?id=0BwD-ZZ_dzJIgaF83aTljWUtVLVU),用于预处理MRI图像。此链接(https://drive.google.com/open?id=0BwD-ZZ_dzJIgaWpSREZPRGxFQjg)MRI图像。 – Raghuram

+0

因此,RF分类图像有7个标签。标签1是白色物质。标签4,5,6和7是肿瘤区域。 – Raghuram

你应该在任何处理之前检查你的图像像素类型。您正在测试的MRI图像量具有sitkInt32(有符号32位整数)像素类型。所以你的处理(例如你的分割操作)很可能会使你的像素值变为零,并且你会得到黑色的图像。 您可以投你的形象使用SimpleITK浮动:

input_image = sitk.ReadImage('MRI.mha') 
print(input_image.GetPixelIDTypeAsString()) 
input_image = sitk.Cast(input_image,sitk.sitkFloat32) 
input_array = sitk.GetArrayFromImage(input_image) 

或处理之前更改numpy的数组数据类型:

input_image = sitk.ReadImage('MRI.mha') 
input_array = sitk.GetArrayFromImage(input_image) 
input_array = input_array.astype(np.float32) 

了解更多关于像素类型的SimpleITK Image Basics notebook