I'm trying to create a Gabor patch of variable size for an upcoming experiment.
Below is the python function used to generate the code. The code was ported from this tutorial for Matlab (assume
import numpy as np):
def gabor_patch(size, lambda_, theta, sigma, phase, trim=.005): """Create a Gabor Patch size : int Image size (n x n) lambda_ : int Spatial frequency (px per cycle) theta : int or float Grating orientation in degrees sigma : int or float gaussian standard deviation (in pixels) phase : float 0 to 1 inclusive """ # make linear ramp X0 = (np.linspace(1, size, size) / size) - .5 # Set wavelength and phase freq = size / float(lambda_) phaseRad = phase * 2 * np.pi # Make 2D grating Xm, Ym = np.meshgrid(X0, X0) # Change orientation by adding Xm and Ym together in different proportions thetaRad = (theta / 360.) * 2 * np.pi Xt = Xm * np.cos(thetaRad) Yt = Ym * np.sin(thetaRad) grating = np.sin(((Xt + Yt) * freq * 2 * np.pi) + phaseRad) # 2D Gaussian distribution gauss = np.exp(-((Xm ** 2) + (Ym ** 2)) / (2 * (sigma / float(size)) ** 2)) # Trim gauss[gauss < trim] = 0 return grating * gauss
I would like the size of the Gabor patch to increase proportionally to the
size parameter. In other words, I would like the dimensions of the bounding box to dictate the diameter of the patch. The problem is that this function does not behave in this way. Instead, the bounding box increases in size while the patch retains the same dimensions.
Example 1: size = 100
Example 2: size = 500
It's not at all obvious to me what I'm doing incorrectly. Could somebody please point me in the right direction?
Please let me know if I can provide further information. Thank you!