如何将多维数组重塑为二维图像?

pep*_*epe 2 python numpy multidimensional-array reshape python-3.x

我正在研究一个形状如下的数组

(64, 1, 64, 64)
Run Code Online (Sandbox Code Playgroud)

这实际上是一张灰度图像,被分成 64 个块,每个块的大小为 64*64px。

现在我需要将其重建为 512*512px 的图像。

我尝试过使用

np.reshape(arr, (512, 512))
Run Code Online (Sandbox Code Playgroud)

但当然,最终的图像并不符合预期。

我该如何解决这个问题?

Pau*_*zer 5

这取决于你的补丁是如何排列的。但你可以尝试的第一件事是

image.reshape(8, 8, 64, 64).swapaxes(1, 2).reshape(512, 512)
Run Code Online (Sandbox Code Playgroud)

这是假设原始第零维度逐行列出补丁,即0-7是从左到右的第一行补丁,8-15是第二行,依此类推。

在为轴 0 和 1 选择索引 i、j 后,第一次重塑重新建立了该排列,寻址第 i+1 行中的第 j+1 个补丁。

现在有趣的一点是:通过重塑合并轴时:

  • 只能组合相邻的维度
  • 每个块中除了最右边的轴之外的所有轴都将被分散

由于我们希望将每个补丁保持在一起,因此必须以当前轴 2 和 3 成为块最右边的成员的方式重新排列。这就是它swapaxes所做的。

现在形状是 (8, 64, 8, 64),轴 1 和 3 是块内坐标。( 8, 64 -> 512 8, 64 -> 512 )剩下要做的就是将两对组合起来。