我正在尝试叠加两幅图像。第一个是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还是个新手。
4条答案
按热度按时间chhkpiq41#
为什么不改用
imshow
呢?您可以通过执行以下操作来打印2D图像:
然后,您可以通过执行以下操作轻松覆盖分段:
更改Alpha将更改覆盖的不透明度。
另外,你为什么要制作两个面具?只有一个就足够了,你可以这样做:
实际示例:
bzzcjhmw2#
我可以给你我的函数两个重叠一张图片和一个数据集掩码:
更改图片中每个像素的颜色的函数:
nkcskrwz3#
虽然不是直接使用matplotlib,但一种替代方法是使用构建在matplotlib之上的nilearn。如果使用Nifti文件(神经成像中的典型扩展名),可以使用函数
plot_roi
或add_overlay
。例如,按照this thread中的建议,您可以这样写:
如果您只对某些平面/视图感兴趣,可以使用参数
display_mode
和cut_coords
最终结果将类似于:
6psbrbz94#
完成Imanol Luengo的回答:掩蔽图像可以直接在imshow Alpha选项中处理,只需放置一个AL解放军图像即可。