Source code for imagen.transferfn.sheet_tf

"""
A family of transfer functions that are aware of sheet coordinate
systems.

The transfer functions in this file are allowed to make use of Imagen
patterns and are to be supplied with an appropriate
SheetCoordinateSystem object via the initialize method.
"""

import numpy as np

import param
import copy
from imagen import PatternGenerator, Gaussian
from imagen.transferfn import TransferFn


[docs]class Convolve(TransferFn): """ Transfer function that convolves the array data with the supplied kernel pattern. The bounds and densities of the supplied kernel pattern do not affect the convolution operation. The spatial scale of the convolution is determined by the 'size' parameter of the kernel. The resulting convolution is applied of a spatial scale relative to the overall size of the input, as expressed in sheetcoordinates. """ kernel_pattern = param.ClassSelector(PatternGenerator, default=Gaussian(size=0.05,aspect_ratio=1.0), doc=""" The kernel pattern used in the convolution. The default kernel results in an isotropic Gaussian blur.""") init_keys = param.List(default=['SCS'], constant=True) def __init__(self, **params): super(Convolve,self).__init__(**params) def initialize(self, **kwargs): super(Convolve, self).initialize(**kwargs) scs = kwargs['SCS'] pattern_copy = copy.deepcopy(self.kernel_pattern) pattern_copy.set_matrix_dimensions(self.kernel_pattern.bounds, scs.xdensity, scs.ydensity) self.kernel = pattern_copy() def __call__(self, x): if not hasattr(self, 'kernel'): raise Exception("Convolve must be initialized before being called.") fft1 = np.fft.fft2(x) fft2 = np.fft.fft2(self.kernel, s=x.shape) convolved_raw = np.fft.ifft2( fft1 * fft2).real k_rows, k_cols = self.kernel.shape # ORIGINAL rolled = np.roll(np.roll(convolved_raw, -(k_cols//2), axis=-1), -(k_rows//2), axis=-2) convolved = rolled / float(self.kernel.sum()) x.fill(0.0) x+=convolved

ImaGen

Table Of Contents

This Page