次のような方程式として与えられた場合、フィルターが与えられます。
またはカーネル内のような: 私はどのくらいの缶フィルターについて調べます。具体的には、それがハイパス/ローパス/バンドパスフィルターであるかどうかを確認できます(そうであればどうですか?)、フィルターの帯域幅を確認できますか?
それが役立つ場合、コンテキストは画像処理です。
ありがとう
次のような方程式として与えられた場合、フィルターが与えられます。
またはカーネル内のような: 私はどのくらいの缶フィルターについて調べます。具体的には、それがハイパス/ローパス/バンドパスフィルターであるかどうかを確認できます(そうであればどうですか?)、フィルターの帯域幅を確認できますか?
それが役立つ場合、コンテキストは画像処理です。
ありがとう
回答:
他の人が述べたように、カーネルで2D FFTを実行すると、フィルターの周波数応答が得られます。ただし、2DフィルターはZ変換を使用して分析できるので、フィルター(および知りたいこと)に応じて、より深い洞察が得られる場合と得られない場合があります。
たとえば、指定したカーネルの場合、対応する差分方程式は次のようになります。
そのZ変換は
これにより、並べ替えた後、次のフィルターの伝達関数が得られます。
振幅応答を決定するには、次のように、1組の複素指数を接続して単純化します。
Evaluating the magnitude response at extreme frequencies will give you a sense of highpass vs. lowpass for the filter. For example,
もちろん、伝達関数を直接評価して、フィルターの振幅応答をプロットすることもできます。numpyを使用した例を次に示します。
import numpy as np
import pylab as py
from mpl_toolkits.mplot3d import axes3d
def H(z1,z2):
return z1 + z2 + 1./z1 + 1./z2 - 4.0
n = 100
w1 = w2 = np.linspace(-np.pi,np.pi, n)
mag = np.zeros((n,n))
for i1 in xrange(0,n):
for i2 in xrange(0,n):
z1 = np.exp(1j*w1[i1])
z2 = np.exp(1j*w2[i2])
mag[i1,i2] = np.abs(H(z1,z2))
fig = py.figure()
ax = fig.add_subplot(111, projection='3d')
X, Y = np.meshgrid(w1,w2)
ax.plot_surface(X, Y, mag, cmap='bone', alpha=.5)
py.show()
カーネル2D FFT手法を使用する場合、結果の等級は上記のプロットのように必ずしもゼロを中心とするわけではないことに注意してください。
あなたが説明したように、ガウシアンカーネルの2次導関数のネガティブは、いわゆる「メキシカンハット」であることがわかります。カーネル。あなたはウィキでその使用法のいくつかを見ることができます。
現状では、このようなフィルターを使用してエッジを検出できます。提供されたカーネルも同じ容量で使用できます。
フィルターがロー/バンド/ハイパスであるかどうかを確認できる最良の方法は、周波数領域でフィルターを観察することです。これにより、抑制されているバンドや、放置されているバンドがわかります。2次元DFTを実行し、結果の大きさを取得すると、この情報が得られます。
MATLAB Image Processing Toolboxがある場合は、freqz2を使用できます。http: //www.mathworks.com/help/images/ref/freqz2.html
@endolithと@Mohammadで言及されている2次元DFT / FFTのScipyコード
h = array([[0,1,0],[1,-4,1],[0,1,0]])
N=32;
figure();
imshow(abs(fft2(h,s=(N,N))),interpolation='nearest');
colorbar()