使用 matshow 绘制 RGB 图像失败 - 形状无效

Plot RGB image with matshow failed - Invalid shape

我有 12 个波段的阵列:

array
(53, 44, 12)

我想从这个数组创建 RGB 图像。 为了做到这一点,我知道我需要从数组中切出 3,2 和 1 通道并从中创建图像。为了获得这些乐队,我这样做了:

red=array[:,:,3]
green=array[:,:,2]
blue=array[:,:,1]

#stack together:
rgb=np.stack((red,green,blue))

问题是,每当我想将图像显示为 rgb 时,我都会收到错误消息:

fig, ax = plt.subplots(figsize=(20,10))
ax.matshow(rgb)

TypeError: Invalid shape (3, 44, 12) for image data

我解决它的第一个想法是改变轴的顺序,因为我认为它以 3 作为行数,我使用了 np.moveaxis:

rgb=np.moveaxis(rgb, 0, -1).shape
rgb.shape
>>>
(44,12,3)

但是当我再次尝试使用 matshow 时,我又遇到了错误:

TypeError: Invalid shape (3,) for image data

我不确定我的错误在哪里,就像过去使用 matshow 一样工作一样。

我的最终目标是能够将三个波段绘制为 rgb 图像。

如果你有一张像这样有 12 个波段的图像:

image[53,44,12]

如果您想要前三个波段,只需使用:

b0b1b2 = image[..., :3]

检查您拥有的物品:

print(b0b1b2.shape)
(53, 44, 3)

这是 Numpy slicing


如果您想要频段 0、4 和 5,请使用

b0b4b5 = image[..., [0,4,5]]

您需要沿第 3 轴堆叠:

rgb = np.dstack((red,green,blue))

rgb = np.stack((red,green,blue), axis=2)

正如 已经指出的那样,您可以通过标准切片更轻松地完成同样的工作。如果 array 的 12 个波段实际上代表 4 个图像(每个 3 个通道),您还可以将阵列沿轴 2 拆分为 4 个阵列,如下所示:

a1, a2, a3, a4 = np.split(array, 4, 2)