Esta página aún no se ha traducido para esta versión. Puede ver la versión más reciente de esta página en inglés.

Diseñar filtros lineales en el dominio de frecuencia

En este tema se describen las funciones que realizan el filtrado en el dominio de frecuencia. Para obtener información sobre el diseño de filtros en el dominio espacial, consulte .¿Qué es el filtrado de imágenes en el dominio espacial?

Filtros de respuesta de impulso sin finito bidimensional (FIR)

El software es compatible con una clase de filtro lineal: el filtro de respuesta de impulso finito bidimensional (FIR).Image Processing Toolbox™ Los filtros FIR tienen una extensión finita a un solo punto, o impulso. Todas las funciones de diseño de filtrodevuelven filtros FIR.Image Processing Toolbox

Los filtros FIR tienen varias características que los hacen ideales para el procesamiento de imágenes en el entorno:MATLAB®

  • Los filtros FIR son fáciles de representar como matrices de coeficientes.

  • Los filtros FIR bidimensionales son extensiones naturales de filtros FIR unidimensionales.

  • Existen varios métodos conocidos y fiables para el diseño de filtros FIR.

  • Los filtros FIR son fáciles de implementar.

  • Los filtros FIR se pueden diseñar para tener fase lineal, lo que ayuda a evitar la distorsión.

Otra clase de filtro, el filtro de respuesta de impulso infinito (IIR), no es tan adecuado para aplicaciones de procesamiento de imágenes. Carece de la estabilidad inherente y la facilidad de diseño e implementación del filtro FIR. Por lo tanto, esta caja de herramientas no proporciona compatibilidad con filtros IIR.

Nota

La mayoría de los métodos de diseño descritos en esta sección funcionan mediante la creación de un filtro bidimensional a partir de un filtro unidimensional o una ventana creada mediante funciones de cuadro de herramientas de procesamiento de señales. Aunque esta caja de herramientas no es necesaria, es posible que le resulte difícil diseñar filtros si no tiene el software Signal Processing Toolbox.

Transforme el filtro FIR 1-D en filtro FIR 2-D

En este ejemplo se muestra cómo transformar un filtro FIR unidimensional en un filtro FIR bidimensional mediante la función.ftrans2 Esta función puede ser útil porque es más fácil diseñar un filtro unidimensional con características particulares que un filtro bidimensional correspondiente. El método de transformación de frecuencia conserva la mayoría de las características del filtro unidimensional, en particular el ancho de banda de transición y las características de ondulación. La forma de la respuesta de frecuencia unidimensional es claramente evidente en la respuesta bidimensional.

Esta función utiliza un , un conjunto de elementos que define la transformación de frecuencia.matriz de transformación La matriz de transformación predeterminada de esta función produce filtros con simetría casi circular. Al definir su propia matriz de transformación, puede obtener diferentes simetrías. (Véase Jae S. Lim, , 1990, para más detalles.)Procesamiento de señales y imágenes bidimensionales

Cree un filtro FIR 1-D utilizando la función del archivo .firpmSignal Processing Toolbox™

b = firpm(10,[0 0.4 0.6 1],[1 1 0 0]) 
b =    Columns 1 through 9      0.0537   -0.0000   -0.0916   -0.0001    0.3131    0.4999    0.3131   -0.0001   -0.0916    Columns 10 through 11     -0.0000    0.0537

Transforme el filtro 1-D en un filtro 2D.

h = ftrans2(b); 
h =    Columns 1 through 9      0.0001    0.0005    0.0024    0.0063    0.0110    0.0132    0.0110    0.0063    0.0024     0.0005    0.0031    0.0068    0.0042   -0.0074   -0.0147   -0.0074    0.0042    0.0068     0.0024    0.0068   -0.0001   -0.0191   -0.0251   -0.0213   -0.0251   -0.0191   -0.0001     0.0063    0.0042   -0.0191   -0.0172    0.0128    0.0259    0.0128   -0.0172   -0.0191     0.0110   -0.0074   -0.0251    0.0128    0.0924    0.1457    0.0924    0.0128   -0.0251     0.0132   -0.0147   -0.0213    0.0259    0.1457    0.2021    0.1457    0.0259   -0.0213     0.0110   -0.0074   -0.0251    0.0128    0.0924    0.1457    0.0924    0.0128   -0.0251     0.0063    0.0042   -0.0191   -0.0172    0.0128    0.0259    0.0128   -0.0172   -0.0191     0.0024    0.0068   -0.0001   -0.0191   -0.0251   -0.0213   -0.0251   -0.0191   -0.0001     0.0005    0.0031    0.0068    0.0042   -0.0074   -0.0147   -0.0074    0.0042    0.0068     0.0001    0.0005    0.0024    0.0063    0.0110    0.0132    0.0110    0.0063    0.0024    Columns 10 through 11      0.0005    0.0001     0.0031    0.0005     0.0068    0.0024     0.0042    0.0063    -0.0074    0.0110    -0.0147    0.0132    -0.0074    0.0110     0.0042    0.0063     0.0068    0.0024     0.0031    0.0005     0.0005    0.0001

Vea la respuesta de frecuencia de los filtros.

[H,w] = freqz(b,1,64,'whole'); colormap(jet(64)) plot(w/pi-1,fftshift(abs(H))) figure, freqz2(h,[32 32]) 

Respuesta de frecuencia unidimensional

Respuesta de frecuencia bidimensional correspondiente

Método de muestreo de frecuencia

El método de muestreo de frecuencia crea un filtro basado en una respuesta de frecuencia deseada. Dada una matriz de puntos que definen la forma de la respuesta de frecuencia, este método crea un filtro cuya respuesta de frecuencia pasa a través de esos puntos. El muestreo de frecuencia no impone restricciones al comportamiento de la respuesta de frecuencia entre los puntos dados; por lo general, la respuesta ondula en estas áreas. (Las ondas son oscilaciones alrededor de un valor constante. La respuesta de frecuencia de un filtro práctico a menudo tiene ondas donde la respuesta de frecuencia de un filtro ideal es plana.)

La función de caja de herramientas implementa el diseño de muestreo de frecuencia para filtros FIR bidimensionales. devuelve un filtro con una respuesta de frecuencia que pasa a través de los puntos de la matriz de entrada.fsamp2fsamp2hHd En el ejemplo siguiente se crea un filtro de 11 por 11 utilizando y traza la respuesta de frecuencia del filtro resultante.fsamp2 (La función de este ejemplo calcula la respuesta de frecuencia bidimensional de un filtro.freqz2 Consulte para obtener más información.)Computar la respuesta de frecuencia de un filtro

Hd = zeros(11,11); Hd(4:8,4:8) = 1; [f1,f2] = freqspace(11,'meshgrid'); mesh(f1,f2,Hd), axis([-1 1 -1 1 0 1.2]), colormap(jet(64)) h = fsamp2(Hd); figure, freqz2(h,[32 32]), axis([-1 1 -1 1 0 1.2]) 

Respuesta de frecuencia bidimensional deseada (izquierda) y respuesta de frecuencia bidimensional real (derecha)

Observe las ondas en la respuesta de frecuencia real, en comparación con la respuesta de frecuencia deseada. Estas ondas son un problema fundamental con el método de diseño de muestreo de frecuencia. Se producen dondequiera que haya transiciones nítidas en la respuesta deseada.

Puede reducir la extensión espacial de las ondas mediante un filtro más grande. Sin embargo, un filtro más grande no reduce la altura de las ondas y requiere más tiempo de cálculo para el filtrado. Para lograr una aproximación más suave a la respuesta de frecuencia deseada, considere la posibilidad de utilizar el método de transformación de frecuencia o el método de ventanas.

Método de ventanas

El método de ventana implica multiplicar la respuesta de impulso ideal con una función de ventana para generar un filtro correspondiente, que estrecha la respuesta de impulso ideal. Al igual que el método de muestreo de frecuencia, el método de ventana produce un filtro cuya respuesta de frecuencia se aproxima a una respuesta de frecuencia deseada. El método de ventana, sin embargo, tiende a producir mejores resultados que el método de muestreo de frecuencia.

La caja de herramientas proporciona dos funciones para el diseño de filtros basado en ventanas y . Diseña un filtro bidimensional mediante una ventana bidimensional que crea a partir de una o dos ventanas unidimensionales que especifique. diseña un filtro bidimensional mediante una ventana bidimensional especificada directamente.fwind1fwind2fwind1fwind2

admite dos métodos diferentes para crear las ventanas bidimensionales que utiliza:fwind1

  • Transformar una sola ventana unidimensional para crear una ventana bidimensional que sea casi circularmente simétrica, mediante un proceso similar a la rotación

  • Crear una ventana rectangular y separable a partir de dos ventanas unidimensionales, calculando su producto exterior

El ejemplo siguiente se utiliza para crear un filtro de 11 por 11 a partir de la respuesta de frecuencia deseada.fwind1Hd En el ejemplo se utiliza la función Cuadro de herramientas de procesamiento de señales para crear una ventana unidimensional, que, a continuación, se extiende a una ventana bidimensional.hammingfwind1

Hd = zeros(11,11); Hd(4:8,4:8) = 1; [f1,f2] = freqspace(11,'meshgrid'); mesh(f1,f2,Hd), axis([-1 1 -1 1 0 1.2]), colormap(jet(64)) h = fwind1(Hd,hamming(11)); figure, freqz2(h,[32 32]), axis([-1 1 -1 1 0 1.2]) 

Respuesta de frecuencia bidimensional deseada (izquierda) y respuesta de frecuencia bidimensional real (derecha)

Creación de la matriz de respuesta de frecuencia deseada

Las funciones de diseño de filtro, , y todos crean filtros basados en una matriz de magnitud de respuesta de frecuencia deseada.fsamp2fwind1fwind2 La respuesta de frecuencia es una función matemática que describe la ganancia de un filtro en respuesta a diferentes frecuencias de entrada.

Puede crear una matriz de respuesta de frecuencia deseada adecuada utilizando la función. devuelve valores de frecuencia correctos y espaciados uniformemente para cualquier respuesta de tamaño.freqspacefreqspace Si crea una matriz de respuesta de frecuencia deseada utilizando puntos de frecuencia distintos de los devueltos por , es posible que obtenga resultados inesperados, como la fase no lineal.freqspace

Por ejemplo, para crear una respuesta de frecuencia de paso bajo ideal circular con límite de 0,5, utilice

[f1,f2] = freqspace(25,'meshgrid'); Hd = zeros(25,25); d = sqrt(f1.^2 + f2.^2) < 0.5; Hd(d) = 1; mesh(f1,f2,Hd) 

Respuesta de frecuencia circular ideal de paso bajo

Tenga en cuenta que para esta respuesta de frecuencia, los filtros producidos por , , y son reales.fsamp2fwind1fwind2 Este resultado es deseable para la mayoría de las aplicaciones de procesamiento de imágenes. Para lograr esto en general, la respuesta de frecuencia deseada debe ser simétrica sobre el origen de frecuencia ( , ).f1=0f2=0

Computar la respuesta de frecuencia de un filtro

La función calcula la respuesta de frecuencia para un filtro bidimensional.freqz2 Sin argumentos de salida, crea un trazado de malla de la respuesta de frecuencia.freqz2 Por ejemplo, considere este filtro FIR,

h =[0.1667    0.6667    0.1667     0.6667   -3.3333    0.6667     0.1667    0.6667    0.1667];

Este comando calcula y muestra la respuesta de frecuencia de 64 por 64 puntos de .h

freqz2(h)

Respuesta de frecuencia de un filtro bidimensional

Para obtener la matriz de respuesta de frecuencia y los vectores de punto de frecuencia y , utilice argumentos de salidaHf1f2

[H,f1,f2] = freqz2(h);

normaliza las frecuencias y de modo que el valor 1.0 corresponde a la mitad de la frecuencia de muestreo, o radianes.freqz2f1f2

Para una respuesta simple -por-, como se muestra arriba, utiliza la función de transformación rápida fourier bidimensional.mnfreqz2fft2 También puede especificar vectores de puntos de frecuencia arbitrarios, pero en este caso utiliza un algoritmo más lento.freqz2

Consulte para obtener más información sobre la transformación rápida de Fourier y su aplicación para el filtrado lineal y el diseño de filtros.Transformación de Fourier