I have 4 images, each have width and height of 8. They belong inside a vector with shape [4,8,8]
. I reshape the vector of images to become a matrix of images with shape [2,2,8,8]
.
How can I concatenate the images from inside the matrix to produce a single image so that the shape becomes [16,16]
? I want the images to be concatenated so that their x,y position from the matrix are maintained - essentially just stitching separate images together into a single image.
I have a feeling this could easily be done in numpy
, maybe even tensorflow
, but I'm open to any nice solution in python.
You can use the numpy.concatenate
with different axis. Here is an example with a reduced version using 4 images with shape [2 2]
, which produces a [4 4]
resulting image:
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)
Just adapt this code to yours, instead of using a, b, c, d
concatenating images by the first dimension of your tensor, with something similar to np.concatenate((t[0], t[1]), axis=1)
being t
your tensor of shape [4 8 8]
.
Otherwise, as other answers suggested you can use twice the numpy.hstack
function twice, but I think that it's behaviour it's not that easily readable, even being less code.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With