2017-10-20 57 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))