私は、スケールスペース理論に関する彼の研究でLindebergが定義したdiscrete Gaussian kernelを実装しようとしています。Pythonで離散ガウスカーネルを実装するには?
ここで、I_nはmodified Bessel function of the first kindであり、T(n、t)= exp(-t)* I_n(t)と定義される。
私はこれをPythonでNumpyとScipyを使用して実装しようとしていますが、何らかの問題が発生しています。
def discrete_gaussian_kernel(t, n):
return math.exp(-t) * scipy.special.iv(n, t)
私はプロットしてみてください:
import math
import numpy as np
import scipy
from matplotlib import pyplot as plt
def kernel(t, n):
return math.exp(-t) * scipy.special.iv(n, t)
ns = np.linspace(-5, 5, 1000)
y0 = discrete_gaussian_kernel(0.5, ns)
y1 = discrete_gaussian_kernel(1, ns)
y2 = discrete_gaussian_kernel(2, ns)
y3 = discrete_gaussian_kernel(4, ns)
plt.plot(ns, y0, ns, y1, ns, y2, ns, y3)
plt.xlim([-4, 4])
plt.ylim([0, 0.7])
出力は次のようになります。
:Wikipediaの記事、それはのようになります。
私は本当に些細な間違いをしていると思います。 :/ 何かご意見は? ありがとう!
編集: 私が書いたのはscipy.special.ive(n, t)
に相当します。私はそれが最初の種類のベッセル関数の変更ではなく、2番目のベッセル関数であると確信していますが、誰かが確認できますか?
注文や引数をnとtと混在させていますか?それは私のように見えます。またはそうでないかもしれません。私はコーヒーが必要。 – Lagerbaer
@Lagerbaer私はそうは思わない。私は数回にわたってそれをチェックし、それも試してみましたが、役に立たなかった... – kotakotakota