blz*_*blz 6 python math 2d numpy
我正在尝试创建一个 2D 图像,称为可变大小的Gabor 补丁。Gabor 补丁最好被认为是 2D 正弦和 2D 高斯的卷积。
下面是用于生成代码的函数。代码是从本教程中移植到Matlab 的(假设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
Run Code Online (Sandbox Code Playgroud)
我希望 Gabor 补丁的大小与size参数成比例地增加。换句话说,我希望边界框的尺寸决定补丁的直径。问题是这个函数不会以这种方式运行。相反,边界框的大小增加,而补丁保留相同的尺寸。
示例 1:大小 = 100

示例 2:大小 = 500

我做错了什么对我来说一点也不明显。有人可以指出我正确的方向吗?
如果我能提供更多信息,请告诉我。谢谢!
好吧,事实证明我是愚蠢的。
实现我想要的方法是将sigma参数设置为更大的值,因为这将扩大高斯的“传播”,从而暴露更多的正弦纹理。
tl;dr:解决方案是增加 sigma
教化成就!
| 归档时间: |
|
| 查看次数: |
1278 次 |
| 最近记录: |