Source code for monalisa.image._im_zero_fill

"""Port of src/image123/bmImZeroFill.m."""

import numpy as np

from monalisa._mat import msize, vec
from monalisa.array._block_reshape import block_reshape
from monalisa.array._zero import zero


[docs] def im_zero_fill(arg_im, N_u, n_u, argType): """Embed images of size ``n_u`` at the center of zero images of size ``N_u``.""" N_u = vec(N_u) n_u = vec(n_u) imDim = N_u.size if imDim == 1: # upstream bug kept: the 1D branch reads an undefined variable 'u' raise NameError("Unrecognized function or variable 'u'.") arg_im = block_reshape(arg_im, n_u) arg_im_size = msize(arg_im) if len(arg_im_size) == n_u.size and np.array_equal(arg_im_size, n_u): nCh = 1 else: nCh = arg_im_size[-1] out_im = zero([*N_u, nCh], argType) out_im = np.reshape(out_im, [*map(int, N_u), nCh], order="F") sl = tuple(slice(int(N / 2 - n / 2), int(N / 2 + n / 2)) for N, n in zip(N_u, n_u, strict=True)) out_im[sl] = np.reshape(arg_im, [*map(int, n_u), nCh], order="F") return block_reshape(out_im, N_u) if nCh == 1 else out_im