6

可変サイズのガボール パッチと呼ばれる 2D 画像を作成しようとしています。ガボール パッチは、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

パラメータに比例してガボール パッチのサイズを大きくしたいと考えていsizeます。つまり、バウンディング ボックスの寸法によってパッチの直径が決まります。問題は、この関数がこのように動作しないことです。代わりに、境界ボックスのサイズが大きくなりますが、パッチは同じ寸法を保持します。

例 1: サイズ = 100

ここに画像の説明を入力

例 2: サイズ = 500

ここに画像の説明を入力

私が間違っていることは私にはまったく明らかではありません。誰かが私を正しい方向に向けてもらえますか?

さらに情報を提供できるかどうかお知らせください。ありがとうございました!

4

1 に答える 1