在python numpy中创建一个图像映射

时间:2018-04-22 15:11:31

标签: python image numpy

我有一个numpy数组大小image_stack 64x28x28x3,它对应于64个大小为28x28x3的图像。我想要的是构建一个大小为224x224x3的图像,它将包含我在初始数组中的所有图像。怎么能在numpy中这样做?到目前为止,我有在同一行中堆叠图像的代码,但我想要8行8列代替。到目前为止我的代码:

def tile_images(image_stack):
    """Given a stacked tensor of images, reshapes them into a horizontal tiling for display.""" 
    assert len(image_stack.shape) == 4
    image_list = [image_stack[i, :, :, :] for i in range(image_stack.shape[0])]
    tiled_images = np.concatenate(image_list, axis=1)
    return tiled_images

1 个答案:

答案 0 :(得分:1)

以下重塑,转置,重塑技巧是否有效?

x.shape # (64, 28, 28, 3)
mosaic = x.reshape(8, 8, 28, 28, 3).transpose((0, 2, 1, 3, 4)).reshape(224, 224, 3)

第一次重塑将你的64分为行和列。 Transpose重新排列它们的顺序,以便我们可以以有意义的方式将它们折叠起来。

您的功能将如下所示:

def tile_images(x):
    dims = x.shape
    assert len(dims) == 4
    stack_dim = int(np.sqrt(dims[0]))
    res = x.reshape(stack_dim, stack_dim, *dims[1:]).transpose((0, 2, 1, 3, 4))
    tile_size = res.shape[0] * res.shape[1]
    return res.reshape(tile_size, tile_size, -1)