I'm trying to create a 2D image known as a Gabor patch of variable size. A Gabor patch is best thought of as the convolution of a 2D sine and a 2D gaussian.
Below is the 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!
Okay, It turns out I was being silly.
The way to achieve what I want is to set the sigma
parameter to something bigger, as this will broaden the "spread" of the gaussian, thereby exposing more of the sine texture.
tl;dr: the solution is to increase the sigma
Edification achieved!
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With