如何使用 numpy 拼接数组?

How to mosaic arrays using numpy?

我有一个形状为 (780,256,256) 的 numpy 数组,表示图像的 780 个图块,我需要将其重新组合成原始图像,但不知道如何正确地重塑它。

780 块方块应排列成 26x30 的网格,因此最终结果的形状为 (6656, 7680)。瓷砖按图像从左到右、从上到下的顺序排列。

我可以通过在数组上使用 np.hstack 来获得一行中的图块,并且第一行正确地使用 row1 = np.hstack(array_of_tiles[0:30,:,:]),但是我随后所做的任何重塑都不会保持图块结构。

我可能可以使用 QGIS 将图块写成 tif 和马赛克,但是直接使用 numpy 的正确方法是什么?

Step-by-step:

1) 正确排列方块:

 tiles = array_of_tiles.reshape(26, 30, 256, 256)

2) 将它们拼凑在一起:为了制作一个连贯的图像,将第二个图块 (tiles[0, 1, 0, :]) 的第一行像素连接到图块的第一行像素的末尾第一个 tile (tiles[0, 0, 0, :]) 等。从中我们可以看出必须交换两个中间轴:

tiles = tiles.swapaxes(1, 2)  

3) 删除多余的维度。像素的顺序现在是正确的,但它们以 4D 结构布局。我们需要将其减少到二维:

img = tiles.reshape(6656, 7680)