Source code for micropolarray.processing.congrid

import numpy as np
import scipy.interpolate
import scipy.ndimage
from numba import njit
from scipy.interpolate import griddata


# not working
[docs]@njit def micropolarray_jitcongrid(data, width, height, scale): new_width = int(width * scale) new_height = int(height * scale) new_data = np.zeros(shape=(new_height, new_width), dtype=float) meshgrid = np.zeros(shape=(new_height, new_width, 2)) centers = [ [np.sqrt((0.5 + i) ** 2 + (0.5 + j) ** 2) for i in range(new_height)] for j in range(new_width) ] # Fill grid with nearest points for new_i in range(new_width): for new_j in range(new_height): pass return centers
# def interpolate(x, x_0, y_0, x_1, y_1): # return (x - x_0) * ((y_1 - y_0) / (x_1 - x_0)) + y_0 # Copied from IDL congrid, arbitrary reshape
[docs]def congrid(a, newdims, kind="linear") -> np.ndarray: """Reshapes the data into any new lenght and width Args: a (np.array): data to be reshaped newdims (tuple | list): new lenght and width kind (str, optional): interpolation type. Defaults to "linear". Returns: ndarray: numpy array of congridded image """ a = np.cast[float](a) m1 = np.cast[int](True) old = np.array(a.shape) ndims = len(a.shape) newdims = np.asarray(newdims, dtype=float) dimlist = [] # Linear method, default for i in range(ndims): base = np.arange(newdims[i]) dimlist.append((old[i] - m1) / (newdims[i] - m1) * base) olddims = [np.arange(i, dtype=float) for i in list(a.shape)] mint = scipy.interpolate.interp1d( olddims[-1], a, kind=kind, fill_value="extrapolate" ) newa = mint(dimlist[-1]) trorder = [ndims - 1] + list(range(ndims - 1)) for i in range(ndims - 2, -1, -1): newa = newa.transpose(trorder) mint = scipy.interpolate.interp1d( olddims[i], newa, kind=kind, fill_value="extrapolate" ) newa = mint(dimlist[i]) if ndims > 1: newa = newa.transpose(trorder) return newa