2016-05-16 14 views
1

私はMRI画像を.mha形式で処理するのにsimpleITKを使用しています。その後、それを数の少ない配列に変換します。私は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はありません。これは、MRI画像を前処理するためのラベルを含む画像(https://drive.google.com/open?id=0BwD-ZZ_dzJIgaF83aTljWUtVLVU)です。このリンク(https://drive.google.com/open?id=0BwD-ZZ_dzJIgaWpSREZPRGxFQjg)はMRI画像です。 – Raghuram

+0

したがって、RF分類画像には7つのラベルがあります。ラベル1はWhite Matterです。ラベル4,5,6および7は腫瘍領域である。 – Raghuram

答えて

1

処理前に画像のピクセルタイプを確認する必要があります。あなたがテストしているMRI画像ボリュームには、sitkInt32(符号付き32ビット整数)のピクセルタイプがあります。そのため、処理(除算など)によってピクセル値がゼロになり、黒い画像が得られる可能性が高くなります。

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の配列データ型を処理する前に変更します: あなたはSimpleITKを使って浮くためにあなたのイメージをキャストすることができますいずれか

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

SimpleITK Image Basics notebookの画素タイプの詳細についてはこちらをご覧ください。

関連する問題