首页 > 解决方案 > Python对存储在4D numpy数组中的图像进行蒙太奇

问题描述

我有一堆存储在 4D 数组中的图像,例如 [0, 0, :, :] 是位置 (0, 0) 的图像。现在我想制作图像的蒙太奇并将它们存储在 2D 数组中并对图像做一些事情,然后我想将蒙太奇转移回 4D 数组。我怎样才能用 numpy 管理这个?以下是我想要做的示意图。它以 3D 数组显示,但我认为您可以理解。

在此处输入图像描述

标签: pythonnumpy

解决方案


操作的第一部分可以使用np.block. 您需要将外部维度转换为非数组序列类型:

l = [list(x) for x in arr]
montage = np.block(l)

或者,您可以先按照自己喜欢的方式排列尺寸,然后再重新塑造。关键是要记住,后来的维度会被分解在一起。因此,如果您有一个包含元素的数组(A, B),每个元素都是一个(M, N)图像,那么结果应该是一个(A * M, B * N)图像。您希望每行的原始图像像素保持连续,但要连接行。所以像这样转置和重塑:

a, b, m, n = arr.shape
montage = arr.transpose(0, 2, 1, 3).reshape(a * m, b * n)

您可以很容易地使用逆运算重新整形:

stack = montage.reshape(a, m, b, n).transpose(0, 2, 1, 3)

推荐阅读