フィルターのタイプと帯域幅の決定


7

次のような方程式として与えられた場合、フィルターが与えられます。

fバツy=2バツ2+2y2expバツ2+y2σ2

またはカーネル内のような: 私はどのくらいの缶フィルターについて調べます。具体的には、それがハイパス/ローパス/バンドパスフィルターであるかどうかを確認できます(そうであればどうですか?)、フィルターの帯域幅を確認できますか?

[010141010]

それが役立つ場合、コンテキストは画像処理です。

ありがとう


2
カーネルを使用して画像をフィルタリングするには、畳み込みを使用するため、カーネルは一種のインパルス応答関数です。フィルターの周波数応答を確認するには、インパルス応答のFFTを実行します。この場合、カーネルは3x3だけなので、より高い解像度の応答スペクトルを確認するには、最初にカーネルをゼロで埋めると思います。次に、/を見て種類や帯域幅などを参照してスペクトルを測定することができます
endolith

回答:


6

他の人が述べたように、カーネルで2D FFTを実行すると、フィルターの周波数応答が得られます。ただし、2DフィルターはZ変換を使用して分析できるので、フィルター(および知りたいこと)に応じて、より深い洞察が得られる場合と得られない場合があります。

たとえば、指定したカーネルの場合、対応する差分方程式次のようになります。

y12=バツ1+12+バツ12+1+バツ112+バツ1214バツ12

そのZ変換は

Yz1z2=z1バツz1z2+z2バツz1z2+z11バツz1z2+z21バツz1z24バツz1z2

これにより、並べ替えた後、次のフィルターの伝達関数が得られます。

H(z1,z2)=Y(z1,z2)X(z1,z2)=z1+z2+z11+z214.

振幅応答を決定するには、次のように、1組の複素指数を接続して単純化します。

H(eiw1,eiw2)=eiw1+eiw2+eiw1+eiw24=(eiw1+eiw1)+(eiw2+eiw2)4=2cosw1+2cosw24|H(eiw1,eiw2)|=2(cosw1+cosw22)2.

Evaluating the magnitude response at extreme frequencies will give you a sense of highpass vs. lowpass for the filter. For example,

|H(ei0,ei0)|=2(cos0+cos02)2=2(1+12)2=0,
and
|Heπeπ|=2cosπ+cosπ22=21122=8。

もちろん、伝達関数を直接評価して、フィルターの振幅応答をプロットすることもできます。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手法を使用する場合、結果の等級は上記のプロットのように必ずしもゼロを中心とするわけではないことに注意してください。


3

あなたが説明したように、ガウシアンカーネルの2次導関数のネガティブは、いわゆる「メキシカンハット」であることがわかります。カーネル。あなたはウィキでその使用法のいくつかを見ることができます。

現状では、このようなフィルターを使用してエッジを検出できます。提供されたカーネルも同じ容量で使用できます。

フィルターがロー/バンド/ハイパスであるかどうかを確認できる最良の方法は、周波数領域でフィルターを観察することです。これにより、抑制されているバンドや、放置されているバンドがわかります。2次元DFTを実行し、結果の大きさを取得すると、この情報が得られます。


2

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()
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.