Python 使用numpy和matplotlib覆盖图像分割

Python 使用numpy和matplotlib覆盖图像分割,python,arrays,image,numpy,matplotlib,Python,Arrays,Image,Numpy,Matplotlib,我试图覆盖两个图像。第一个是512x512 NumPy阵列(来自CT图像)。第二个也是512x512 NumPy数组,但我只对值大于0的像素感兴趣(功能图像) 为此,我尝试创建一个屏蔽数组 import numpy as np import numpy.ma as ma import matplotlib.pyplot as plt # Both images are loaded from a dicom. Both are numpy arrays of (512,512) Image

我试图覆盖两个图像。第一个是512x512 NumPy阵列(来自CT图像)。第二个也是512x512 NumPy数组,但我只对值大于0的像素感兴趣(功能图像)

为此,我尝试创建一个屏蔽数组

import numpy as np 
import numpy.ma as ma
import matplotlib.pyplot as plt

# Both images are loaded from a dicom. Both are numpy arrays of (512,512) 
Image1 = readimage(path)
Image2 = readimage(path)
# Create image 2 mask
mask = ma.masked_where(Image2>0, Image2)
Image2_mask = ma.masked_array(Image2,mask)

# Plot images
plt.figure(dpi=300)
y, x = np.mgrid[1:513,1:513]
plt.axes().set_aspect('equal', 'datalim')
plt.set_cmap(plt.gray())
plt.pcolormesh(x, y, Image1,cmap='gray')
plt.pcolormesh(x, y, Image2_mask,cmap='jet')
plt.axis([x.min(), x.max(), y.min(), y.max()])
plt.colorbar()
plt.show()

此代码不显示任何覆盖。我做错了什么?有直路吗?我来自Matlab环境,对Python非常陌生。

为什么不改用
imshow

可以通过执行以下操作打印二维图像:

plt.imshow(Image1, cmap='gray') # I would add interpolation='none'
plt.imshow(Image2_mask, cmap='jet', alpha=0.5) # interpolation='none'
之后,您可以通过执行以下操作轻松覆盖分段:

plt.imshow(Image1, cmap='gray') # I would add interpolation='none'
plt.imshow(Image2_mask, cmap='jet', alpha=0.5) # interpolation='none'
更改alpha将更改覆盖的不透明度

另外,为什么要创建两个遮罩?只有一个就足够了,你可以做到:

Image2_mask = ma.masked_array(Image2 > 0, Image2)

实例:

import numpy as np
mask = np.zeros((10,10))
mask[3:-3, 3:-3] = 1 # white square in black background
im = mask + np.random.randn(10,10) * 0.01 # random image
masked = np.ma.masked_where(mask == 0, mask)

import matplotlib.pyplot as plt
plt.figure()
plt.subplot(1,2,1)
plt.imshow(im, 'gray', interpolation='none')
plt.subplot(1,2,2)
plt.imshow(im, 'gray', interpolation='none')
plt.imshow(masked, 'jet', interpolation='none', alpha=0.7)
plt.show()

请您也提供此代码的开头,好吗<代码>例如,ma=…我将帖子的第一部分添加到代码中。这两幅图像都是从一个从CT dicom中提取的函数中加载的,我相信这并不重要。图像类型为:
image.dtype Out[33]:dtype('int16')