Determinando o tipo e a largura de banda de um filtro


7

Dado um filtro, se for fornecido como uma equação, como:

f(x,y)=(2x2+2y2)exp(-x2+y2σ2)

Ou em um kernel como:

[0 01 10 01 1-41 10 01 10 0]
Quanto posso descobrir sobre o filtro. Especificamente, posso descobrir se é um filtro passa-alto / passa-baixo / passa-banda (se sim, como?) E posso descobrir a largura de banda do filtro?

Se ajudar, o contexto é o processamento de imagens.

obrigado


2
Para filtrar uma imagem usando um kernel, use convolução, para que o kernel seja uma espécie de função de resposta a impulso. Para ver a resposta em frequência de um filtro, você executa uma FFT da resposta ao impulso. Nesse caso, seu kernel é de apenas 3x3, então eu acho que você deveria zerá-lo primeiro para ver um espectro de resposta de maior resolução. Então você pode olhar / medir o espectro para ver o tipo e largura de banda etc.
endolith

Respostas:


6

Como outros já mencionaram, executar uma FFT 2D no kernel fornecerá a resposta de frequência do filtro. No entanto, vale ressaltar que os filtros 2D podem ser analisados ​​usando a transformação Z , que pode ou não fornecer informações mais detalhadas, dependendo do filtro (e do que você deseja saber).

Por exemplo, dado o kernel que você especificou, a equação de diferença correspondente seria

y(n1 1,n2)=x(n1 1+1 1,n2)+x(n1 1,n2+1 1)+x(n1 1-1 1,n2)+x(n1 1,n2-1 1)-4x(n1 1,n2).

Sua transformação Z é

Y(z1 1,z2)=z1 1X(z1 1,z2)+z2X(z1 1,z2)+z1 1-1 1X(z1 1,z2)+z2-1 1X(z1 1,z2)-4X(z1 1,z2),

que, após a reorganização, produz a seguinte função de transferência para o filtro:

H(z1 1,z2)=Y(z1 1,z2)X(z1 1,z2)=z1 1+z2+z1 1-1 1+z2-1 1-4)

Para determinar a resposta de magnitude, basta conectar um par de exponenciais complexas e simplificar da seguinte maneira:

H(eEuW1 1,eEuW2)=eEuW1 1+eEuW2+e-EuW1 1+e-EuW2-4=(eEuW1 1+e-EuW1 1)+(eEuW2+e-EuW2)-4=2porqueW1 1+2porqueW2-4|H(eEuW1 1,eEuW2)|=2(porqueW1 1+porqueW2-2)2.

Avaliar a resposta de magnitude em frequências extremas fornecerá uma sensação de passa-alto vs. passa-baixo para o filtro. Por exemplo,

|H(eEu0 0,eEu0 0)|=2(porque0 0+porque0 0-2)2=2(1 1+1 1-2)2=0 0,
e
|H(eEuπ,eEuπ)|=2(porqueπ+porqueπ-2)2=2(-1 1-1 1-2)2=8)

Obviamente, a função de transferência pode ser avaliada diretamente para traçar também a resposta de magnitude do filtro. Aqui está um exemplo usando 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()

Resposta de magnitude do filtro

Lembre-se de que, se você usar a técnica 2D FFT do kernel, as magnitudes resultantes não serão necessariamente centralizadas em zero, como no gráfico acima.


3

O negativo da segunda derivada de um núcleo gaussiano, como você descreveu, acaba sendo o que é chamado de 'Chapéu Mexicano' . núcleo. Você pode ver alguns de seus usos no wiki.

Tal como está, esse filtro pode ser usado para detectar arestas. O kernel que você forneceu também pode ser usado na mesma capacidade.

A melhor maneira de saber se um filtro é passa baixa / banda / passa alto é observá-lo no domínio da frequência, pois isso informa quais bandas estão sendo suprimidas ou deixadas em paz. A realização da DFT bidimensional e a magnitude do resultado devem fornecer essas informações.


2

Se você tiver a Caixa de ferramentas de processamento de imagem MATLAB, poderá usar o freqz2: http://www.mathworks.com/help/images/ref/freqz2.html

Código Scipy para uma DFT / FFT 2-d, conforme observado por @endolith e @Mohammad

h = array([[0,1,0],[1,-4,1],[0,1,0]])
N=32; 
figure(); 
imshow(abs(fft2(h,s=(N,N))),interpolation='nearest');
colorbar()
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.