Contenido principal

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

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.

ejemplo

Ejemplos

contraer todo

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

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

Figure contains an axes object. The hidden 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. Tenga en cuenta que imfilter es más eficiente que algunas otras funciones de filtrado, ya que devuelve como salida un arreglo del mismo tipo de datos 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 hidden axes object contains an object of type image.

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

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

Figure contains an axes object. The hidden 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 datos diferente antes de llamar a imfilter. Por ejemplo, cuando el tipo de datos de entrada es uint8, imfilter trunca los valores de salida a 0. Puede ser también apropiado convertir la imagen a un tipo de datos 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 = 5×5 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 un arreglo multidimensional.

Tipos de datos: double

Opciones que controlan la operación de filtrado, especificadas como vector de caracteres, escalar de cadena o escalar numérico. Para especificar varias opciones, separe los valores con comas. En las tablas siguientes, se enumeran las opciones admitidas para el relleno, el tamaño de salida y el uso de correlación o convolución.

Opciones de relleno

Valor

Descripción

Ejemplo

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.

[314159265][2222222222222222314222215922222652222222222222222]

"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.

[314159265][5115995133144113314415115995622655662265565115995]

"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.

[314159265][3331444333144433314441115999222655522265552226555]

"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.

[314159265][5915915652652614314315915915652652614314315915915]

Opciones de tamaño de salida

Valor

Descripción

"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

Valor

Descripció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 tipo de datos 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 rango del tipo de datos, imfilter trunca el resultado hasta el rango que permite el tipo de datos. Si el tipo de datos 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

expandir todo

Historial de versiones

Introducido antes de R2006a

expandir todo