2016-05-16 1 views
1

Я использую simpleITK для обработки изображений МРТ в формате .mha. Впоследствии я преобразую его в массив 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

ответ

1

Перед обработкой вы должны проверить свой тип пикселя изображения. Объем тома MRI, который вы тестируете, имеет тип пикселя sitkInt32 (Signed 32 bit integer). Таким образом, существует высокая вероятность того, что ваша обработка (например, операции разделения) сделает ваши значения пикселей нулями и вы получите черные изображения. Вы можете отдать свой образ, чтобы плавать с помощью 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.

Смежные вопросы