2017-10-20 99 views
0

我正在閱讀ddsm乳房X線照片圖像。並且在標準化繪圖之後。這是灰度圖像,但我將其視爲RGB,通過複製相同的通道3次。問題是,當我使用pyplotmatplotlib標準化的形象得到飽和,而當我繪製使用scipy.misctoimage,它不inline matplotlib pyplot飽和,而scipy.misc toimage不是

這裏是我的代碼:

from scipy import misc 
%matplotlib inline 
import matplotlib 
import numpy as np 
import matplotlib.pyplot as plt 
img = misc.imread('testcolor.png') 
print(type(img)) #<type 'numpy.ndarray'> 
img.shape #(512,512,3) 

的圖像的像素值都是這樣

print(img[:,:,1]) 
#[[ 98 97 99 ..., 0 0 0] 
[ 98 98 100 ..., 0 0 0] 
[100 100 100 ..., 0 0 0] 
..., 
[ 91 95 96 ..., 0 0 0] 
[ 88 89 92 ..., 0 0 0] 
[ 95 94 97 ..., 0 0 0]] 

然後我歸一化用下面的代碼圖像:

imgn = np.where(img>0,img,np.nan) 
img_norm = (img - np.nanmean(imgn,axis=(0,1)))/np.nanstd(imgn,axis=(0,1)) 

和以前一樣歸像素像

print(img_norm[:,:,1]) 
#[[-0.71566175 -0.74025369 -0.69106981 ..., -3.1256717 -3.1256717 
    -3.1256717 ].... 

而且

print(np.min(img_norm)) #-3.12567170176 
print(np.max(img_norm))#2.80098542174 

隨着matplotlib pyplot我得到這個:

plt.figure() 
plt.imshow(img_norm) 
plt.show() 

plot with matplotlib

然後我繪製相同諾瑪與toimage爲什麼我有這種差異lized圖像從scipy.misc

from scipy.misc import toimage 
toimage(img_norm).show() 

enter image description here

順便說一句,在unormalized原始圖像是這樣的:

enter image description here

+0

是不是應該用'uint8'來顯示圖像?另外,'img_norm'中的負數呢? – Divakar

回答

1

通常它有助於閱讀the documentation

matplotlib.pyplot.imshow(X, ....)

X:array_like,形狀(N,M)或(N,M,3)或(N,M,4)

顯示中X圖像電流軸。 X可以是數組或PIL圖像。如果X是一個數組,它可以具有以下形狀和類型:

MXN - 值被映射(float或INT)
MxNx3 - RGB(float或UINT8)
MxNx4 - RGBA(float或UINT8)
MxNx3和MxNx4浮點數組的每個組件的值應該在0.0到1.0的範圍內。將MxN數組映射到基於標準(映射標量到標量)和cmap(將標量標量映射到顏色)的顏色。

您的數組是一個浮點數組,但不在0和1之間的範圍內。因此imshow的行爲未定義。

您可以使用正常的數學運算規範化爲0到1之間的範圍,或者更容易使用plt.Normalize,以防萬一需要線性映射。

norm = plt.Normalize(0,1) 
plt.imshow(norm(img_norm))