2016-05-16 97 views
1

我正在使用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

回答

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