连接图像矩阵中的图像

时间:2019-02-16 10:10:31

标签: python numpy tensorflow

我有4个图像,每个图像的宽度和高度为8。它们属于形状为[4,8,8]的向量。我将图像的向量重塑为[2,2,8,8]形状的图像矩阵。

如何将矩阵内部的图像连接起来以生成单个图像,以使形状变为[16,16]?我希望将图像连接起来,以保持它们在矩阵中的x,y位置-本质上就是将单独的图像缝合在一起成为一个图像。

我觉得可以轻松地在numpy中甚至在tensorflow中完成此操作,但是我对使用python的任何不错的解决方案持开放态度。

visual of my problem

2 个答案:

答案 0 :(得分:2)

您可以在不同的轴上使用numpy.concatenate。这是一个缩小版本的示例,其中使用了4张形状为[2 2]的图像,它生成了[4 4]结果图像:

import numpy as np

a = np.array([[1, 2], [3, 4]])
b = np.array([[5, 6], [7, 8]])
c = np.array([[9, 10], [11, 12]])
d = np.array([[13, 14], [15, 16]])

ab = np.concatenate((a, b), axis=1)
cd = np.concatenate((c, d), axis=1)
abcd = np.concatenate((ab, cd), axis=0)

>>> print(abcd)
array([[ 1,  2,  5,  6],
       [ 3,  4,  7,  8],
       [ 9, 10, 13, 14],
       [11, 12, 15, 16]])
>>> print(abcd.shape)
(4, 4)

只需将此代码修改为适合您的代码,而不是使用a, b, c, d将图像按张量的第一维进行级联,类似于np.concatenate((t[0], t[1]), axis=1)的{​​{1}}就是形状为{{1 }}。

否则,正如其他答案所建议的,您可以两次使用两次t函数,但是我认为它的行为并不容易阅读,甚至代码更少。

答案 1 :(得分:1)

您可以使用np.hstack两次,这样(较小的数组使它们可打印):

import numpy as np

original = np.array([[np.arange(16).reshape(4,-1)]*2]*2)
combined = np.hstack(np.hstack(original))
print(combined)

夹心给出:

[[ 0  1  2  3  0  1  2  3]
 [ 4  5  6  7  4  5  6  7]
 [ 8  9 10 11  8  9 10 11]
 [12 13 14 15 12 13 14 15]
 [ 0  1  2  3  0  1  2  3]
 [ 4  5  6  7  4  5  6  7]
 [ 8  9 10 11  8  9 10 11]
 [12 13 14 15 12 13 14 15]]