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!