你如何将numpy阵列中的图像集合重塑为一个大图像?

时间:2016-04-28 04:31:41

标签: python arrays numpy

我在将4D numpy数组重塑为2D numpy数组时遇到了一些麻烦。目前numpy数组如下(35280L,1L,32L,32L)。格式是图像数量,通道,宽度,高度。基本上,我有35280个32x32的图像块,我想组合图像块(保持索引)来创建一个大图像。

2 个答案:

答案 0 :(得分:1)

你有一个这样的数组:

images = np.random.randint(0,256,(35280, 1, 32, 32))

你需要的第一件事是弄清楚(不知何故)最终图像的宽度应该是什么。让我们说这个例子是(441 * 32, 80 * 32)

然后你可以这样做:

image = images.swapaxes(0,2).reshape((441 * 32, -1))

这几乎可以为您提供所需的内容,除了行是交错的,因此您拥有:

AAABBBCCC
DDDEEEFFF
GGGHHHIII
AAABBBCCC
DDDEEEFFF
GGGHHHIII

然后,您可以使用“花式索引”来重新排列行:

image[np.array([0,3,1,4,2,5])]

现在你有:

AAABBBCCC
AAABBBCCC
DDDEEEFFF
DDDEEEFFF
GGGHHHIII
GGGHHHIII

我将作为练习留下您生成花哨索引序列的部分。

答案 1 :(得分:1)

重塑是不够的,您必须使用swapaxes仔细重新排列数据。

示例数据:

dims=nbim,_,h,w=np.array([6,1,7,6])
data=arange(dims.prod()).reshape(dims)%256

图片:

figure()
for i in range(nbim):
    subplot(1,nbim,i+1)
    imshow(data[i,0],vmin=0,vmax=255)

enter image description here

和大图:

#number of images in each dim :
nh = 2 # a choice
nw=nbim // nh

bigim=data.reshape(nh,nw,h,w).swapaxes(1,2).reshape(nh*h,nw*w)
figure()    
imshow(bigim)

enter image description here