我使用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,这就是出现问题的时候。有关我可能出错的地方的任何指示?
答案 0 :(得分:1)
在进行任何处理之前,您应该检查图像像素类型。您正在测试的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了解有关像素类型的详情。