Main Content

La traducción de esta página aún no se ha actualizado a la versión más reciente. Haga clic aquí para ver la última versión en inglés.

imfilter

Filtrado multidimensional de imágenes multidimensionales

Descripción

ejemplo

B = imfilter(A,h) filtra el arreglo multidimensional A con el filtro multidimensional h y devuelve el resultado en B.

ejemplo

B = imfilter(A,h,options,...) realiza el filtrado multidimensional de acuerdo con una o más opciones especificadas.

Ejemplos

contraer todo

Lea una imagen a color en el espacio de trabajo y muéstrela en pantalla.

originalRGB = imread('peppers.png');
imshow(originalRGB)

Figure contains an axes object. The axes object contains an object of type image.

Cree un filtro de desenfoque de movimiento utilizando la función fspecial.

h = fspecial('motion', 50, 45);

Aplique el filtro a la imagen original para crear una imagen con desenfoque de movimiento. Note que imfilter es más eficiente que algunas otras funciones de filtrado, ya que devuelve como salida un arreglo del mismo tipo de dato que el arreglo de imagen de entrada. En este ejemplo, la salida es un arreglo de uint8.

filteredRGB = imfilter(originalRGB, h);
figure, imshow(filteredRGB)

Figure contains an axes object. The axes object contains an object of type image.

Filtre la imagen nuevamente, en esta ocasión especificando la opción de réplica de borde.

boundaryReplicateRGB = imfilter(originalRGB, h, 'replicate');
figure, imshow(boundaryReplicateRGB)

Figure contains an axes object. The axes object contains an object of type image.

Por defecto, imfilter utiliza correlación, debido a que las funciones de diseño de filtro de la toolbox producen núcleos de correlación. Para usar convolución, utilice el parámetro opcional.

Cree una matriz de muestra.

A = magic(5)
A = 5×5

    17    24     1     8    15
    23     5     7    14    16
     4     6    13    20    22
    10    12    19    21     3
    11    18    25     2     9

Cree un filtro.

h = [-1 0 1];

Filtre utilizando correlación, por defecto.

imfilter(A,h)
ans = 5×5

    24   -16   -16    14    -8
     5   -16     9     9   -14
     6     9    14     9   -20
    12     9     9   -16   -21
    18    14   -16   -16    -2

Filtre utilizando convolución, especificando imfilter con el parámetro opcional.

imfilter(A,h,'conv')
ans = 5×5

   -24    16    16   -14     8
    -5    16    -9    -9    14
    -6    -9   -14    -9    20
   -12    -9    -9    16    21
   -18   -14    16    16     2

En este ejemplo, la salida de imfilter tiene valores negativos cuando la entrada es de la clase double. Para evitar valores negativos, convierta la imagen a un tipo de dato diferente antes de llamar a imfilter. Por ejemplo, cuando el tipo de dato de entrada es uint8, imfilter trunca los valores de salida a 0. Puede ser también apropiado convertir la imagen a un tipo de dato de entero con signo.

A = magic(5)
A = 5×5

    17    24     1     8    15
    23     5     7    14    16
     4     6    13    20    22
    10    12    19    21     3
    11    18    25     2     9

Filtre la imagen con imfilter.

h = [-1 0 1];
imfilter(A,h)
ans = 5×5

    24   -16   -16    14    -8
     5   -16     9     9   -14
     6     9    14     9   -20
    12     9     9   -16   -21
    18    14   -16   -16    -2

Observe que el resultado tiene valores negativos. Para evitar valores negativos de la imagen de salida, convierta la imagen de entrada a uint8 antes de aplicar el filtrado. Dado que la entrada imfilter es de la clase uint8, la salida también es de la clase uint8 y imfilter trunca los valores negativos a 0.

A = uint8(magic(5));
imfilter(A,h)
ans = 5x5 uint8 matrix

   24    0    0   14    0
    5    0    9    9    0
    6    9   14    9    0
   12    9    9    0    0
   18   14    0    0    0

Argumentos de entrada

contraer todo

Imagen que se desea filtrar, especificada como arreglo numérico de dimensión.

Tipos de datos: single | double | int8 | int16 | int32 | uint8 | uint16 | uint32 | logical

Filtro multidimensional, especificado como arreglo multidimensional del tipo de dato double.

Tipos de datos: double

Opciones que controlan la operación de filtrado, especificadas como vector de caracteres, escalar de cadena o escalar numérico. La siguiente tabla enumera todas las opciones admitidas.

Opciones de bordes

Opción

Descripción

Opciones de relleno

Escalar numérico, X

A los valores del arreglo de entrada que se encuentran fuera de los límites del arreglo se les asigna el valor X. Cuando no se especifica una opción de relleno, el valor predeterminado es 0.

'symmetric'

Los valores del arreglo de entrada que se encuentran fuera de los límites del arreglo se calculan reflejando en espejo el arreglo a lo largo de su borde.

'replicate'

Los valores del arreglo de entrada que se encuentran fuera de los límites del arreglo se asumen iguales que el valor de borde más cercano del arreglo.

'circular'

Los valores del arreglo de entrada que se encuentran fuera de los límites del arreglo se calculan asumiendo implícitamente que el arreglo de entrada es periódico.

Tamaño de salida

'same'

El arreglo de salida tiene el mismo tamaño que el arreglo de entrada. Este es el comportamiento predeterminado cuando no se especifican opciones de tamaño de salida.

'full'

El arreglo de salida es el resultado totalmente filtrado y, por lo tanto, es más grande que el arreglo de entrada.

Opciones de correlación y convolución

'corr'

imfilter realiza el filtrado multidimensional utilizando correlación, que es la misma forma en que filter2 realiza el filtrado. Cuando no se especifica ninguna opción de correlación o convolución, imfilter utiliza correlación.

'conv'

imfilter realiza el filtrado multidimensional utilizando convolución.

Argumentos de salida

contraer todo

Imagen filtrada, devuelta como arreglo numérico del mismo tamaño y clase que la imagen de entrada, A.

Sugerencias

  • Esta función puede sacar ventaja de la optimización de hardware que hace que los algoritmos que usan los tipos de datos uint8, uint16, int16, single y double se ejecuten más rápido.

Algoritmos

  • La función imfilter calcula el valor de cada píxel de salida utilizando aritmética en punto flotante de doble precisión. Si el resultado sobrepasa el intervalo del tipo de dato, imfilter trunca el resultado hasta el intervalo que permite el tipo de dato. Si el tipo de dato es entero, imfilter redondea los valores fraccionarios.

  • Si especifica un núcleo de tamaño par h, el centro del núcleo es floor((size(h) + 1)/2).

    Por ejemplo, el centro del filtro de 4 elementos [0.25 0.75 -0.75 -0.25] es el segundo elemento, 0.75. El filtro proporciona los mismos resultados que el filtro de 5 elementos [0 0.25 0.75 -0.75 -0.25].

Capacidades ampliadas

Historial de versiones

Introducido antes de R2006a