объединить изображения из матрицы изображений - PullRequest
0 голосов
/ 16 февраля 2019

У меня есть 4 изображения, каждое имеет ширину и высоту 8. Они принадлежат к вектору с формой [4,8,8].Я изменяю вектор изображений, чтобы он стал матрицей изображений с формой [2,2,8,8].

. Как объединить изображения внутри матрицы, чтобы получить одно изображение, чтобы форма стала [16,16]?Я хочу, чтобы изображения были объединены таким образом, чтобы их положение x, y в матрице сохранялось - по сути, просто объединяя отдельные изображения в одно изображение.

У меня такое ощущение, что это легко можно сделать в numpy, может быть, даже tensorflow, но я открыт для любого хорошего решения в Python.

visual of my problem

Ответы [ 2 ]

0 голосов
/ 16 февраля 2019

Вы можете использовать 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]]
0 голосов
/ 16 февраля 2019

Вы можете использовать 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), являющимся t вашим тензором формы [4 8 8].

В противном случае, как показывают другие ответы, вы можете дважды использовать функцию numpy.hstack дважды,но я думаю, что это поведение, которое не так легко читаемо, даже при меньшем количестве кода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...