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.

imfilter

Filtrado N-D de imágenes multidimensionales

Descripción

ejemplo

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

Opcionalmente, puede filtrar una matriz multidimensional con un filtro 2D usar una GPU (requiere ).Parallel Computing Toolbox™

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 en color en el espacio de trabajo y muéstrala.

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

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. Tenga en cuenta que es más eficaz en memoria que algunas otras funciones de filtrado, ya que genera una matriz del mismo tipo de datos que la matriz de imágenes de entrada.imfilter En este ejemplo, la salida es una matriz de .uint8

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

Filtre la imagen de nuevo, esta vez especificando la opción de límite de réplica.

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

De forma predeterminada, utiliza la correlación porque las funciones de diseño del filtro de la caja de herramientas producen kernels de correlación.imfilter Utilice el parámetro opcional para utilizar la convolución.

Cree una matriz de ejemplo.

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];

Filtrar mediante correlación, el valor predeterminado.

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

Filtrar mediante convolución, especificando con el parámetro opcional.imfilter

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 tiene valores negativos cuando la entrada es de clase .imfilterdouble Para evitar valores negativos, convierta la imagen a un tipo de datos diferente antes de llamar a .imfilter Por ejemplo, cuando el tipo de entrada es , trunca los valores de salida a .uint8imfilter0 También podría ser adecuado convertir la imagen en un tipo 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

Filtra 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 en la imagen de salida, convierta la imagen de entrada antes de realizar el filtrado.uint8 Puesto que la entrada a es de clase , la salida también es de clase y trunca los valores negativos a .imfilteruint8uint8imfilter0

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 va a filtrar, especificada como una matriz numérica de dimensión.

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

Filtro multidimensional, especificado como una matriz N-D de tipo de datos .double

Tipos de datos: double

Opciones que controlan la operación de filtrado, especificada como vector de caracteres, escalar de cadena o escalar numérico. En la tabla siguiente se enumeran todas las opciones admitidas.

Opciones de límite

Opción

Descripción

Opciones de relleno

escalar numérico,X

A los valores de matriz de entrada fuera de los límites de la matriz se les asigna el valor .X Cuando no se especifica ninguna opción de relleno, el valor predeterminado es .0

'symmetric'

Los valores de matriz de entrada fuera de los límites de la matriz se calculan reflejando la matriz a través del borde de la matriz.

'replicate'

Se supone que los valores de matriz de entrada fuera de los límites de la matriz son iguales al valor de borde de matriz más cercano.

'circular'

Los valores de matriz de entrada fuera de los límites de la matriz se calculan suponiendo implícitamente que la matriz de entrada es periódica.

Tamaño de salida

'same'

La matriz de salida tiene el mismo tamaño que la matriz de entrada. Este es el comportamiento predeterminado cuando no se especifica ninguna opción de tamaño de salida.

'full'

La matriz de salida es el resultado filtrado completo, por lo que es mayor que la matriz de entrada.

Opciones de correlación y convolución

'corr'

realiza el filtrado multidimensional mediante la correlación, que es la misma manera que realiza el filtrado.imfilterfilter2 Cuando no se especifica ninguna opción de correlación o convolución, utiliza la correlación.imfilter

'conv'

realiza el filtrado multidimensional mediante la convolución.imfilter

Argumentos de salida

contraer todo

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

Sugerencias

  • Esta función puede aprovechar la optimización del hardware para los tipos de datos , , , , y para ejecutarse más rápido.uint8uint16int16singledouble

Algoritmos

  • La función calcula el valor de cada píxel de salida mediante la aritmética de punto flotante de doble precisión.imfilter Si el resultado supera el intervalo del tipo de datos, trunca el resultado en el intervalo permitido del tipo de datos.imfilter Si es un tipo de datos entero, redondea los valores fraccionarios.imfilter

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

    Por ejemplo, el centro del filtro de 4 elementos es el segundo elemento, .[0.25 0.75 -0.75 -0.25]0.75 Este filtro proporciona resultados idénticos al filtrado con el filtro de 5 elementos.[0 0.25 0.75 -0.75 -0.25]

Capacidades ampliadas

Introducido antes de R2006a