lev1's picture
Initial commit
8fd2f2f
raw
history blame
1.6 kB
from .iimage import IImage
import math
import numpy as np
import warnings
# ========= STATIC FUNCTIONS =============
def find_max_h(images):
return max([x.size[1] for x in images])
def find_max_w(images):
return max([x.size[0] for x in images])
def find_max_size(images):
return find_max_w(images), find_max_h(images)
def stack(images, axis = 0):
return IImage(np.concatenate([x.data for x in images], axis))
def tstack(images):
w,h = find_max_size(images)
images = [x.pad2wh(w,h) for x in images]
return IImage(np.concatenate([x.data for x in images], 0))
def hstack(images):
h = find_max_h(images)
images = [x.pad2wh(h = h) for x in images]
return IImage(np.concatenate([x.data for x in images], 2))
def vstack(images):
w = find_max_w(images)
images = [x.pad2wh(w = w) for x in images]
return IImage(np.concatenate([x.data for x in images], 1))
def grid(images, nrows = None, ncols = None):
combined = stack(images)
if nrows is not None:
ncols = math.ceil(combined.data.shape[0] / nrows)
elif ncols is not None:
nrows = math.ceil(combined.data.shape[0] / ncols)
else:
warnings.warn("No dimensions specified, creating a grid with 5 columns (default)")
ncols = 5
nrows = math.ceil(combined.data.shape[0] / ncols)
pad = nrows * ncols - combined.data.shape[0]
data = np.pad(combined.data, ((0,pad),(0,0),(0,0),(0,0)))
rows = [np.concatenate(x,1,dtype=np.uint8) for x in np.array_split(data, nrows)]
return IImage(np.concatenate(rows, 0, dtype = np.uint8)[None])