imfilter
Filtrado multidimensional de imágenes multidimensionales
Descripción
Ejemplos
Crear un filtro y aplicarlo
Lea una imagen a color en el espacio de trabajo y muéstrela en pantalla.
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. Note 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)
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)
Filtrar imágenes utilizando imfilter con convolución
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
Convertir la clase de la imagen para evitar valores de salida negativos
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 = 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
A
— Imagen que se desea filtrar
Arreglo numérico
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
h
— Filtro multidimensional
Arreglo multidimensional del tipo de datos double
Filtro multidimensional, especificado como arreglo multidimensional del tipo de datos double
.
Tipos de datos: double
options
— Opciones que controlan la operación de filtrado
vector de caracteres | escalar de cadena | Escalar numérico
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 límites
Opción | Descripción |
---|---|
Opciones de relleno | |
Escalar numérico, | A los valores del arreglo de entrada que se encuentran fuera de los límites del arreglo se les asigna el valor |
| 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. |
| 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. |
| 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 | |
| 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. |
| 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 | |
|
|
|
|
Argumentos de salida
B
— Imagen filtrada
Arreglo numérico
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
ydouble
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 esfloor((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
Generación de código C/C++
Genere código C y C++ mediante MATLAB® Coder™.
Notas y limitaciones de uso:
imfilter
es compatible con la generación de código C (requiere MATLAB® Coder™). Tenga en cuenta que, si selecciona la plataforma objetivo genéricaMATLAB Host Computer
,imfilter
genera código que utiliza una biblioteca compartida precompilada específica de la plataforma. El uso de una biblioteca compartida mantiene las optimizaciones de rendimiento, pero limita las plataformas objetivo para las que se puede generar código. Para obtener más información, consulte Types of Code Generation Support in Image Processing Toolbox.Cuando se genera código, la imagen de entrada,
A
, debe ser 2D o 3D. El valor del argumento de entrada,options
, debe ser una constante en tiempo de compilación.Si especifica un núcleo grande
h
, un núcleo que contiene valores grandes o una imagen que contiene valores grandes, se pueden ver distintos resultados entre MATLAB y el código generado en caso de usar tipos de datos en punto flotante. Esto sucede debido a la acumulación de errores a causa de las diferentes aplicaciones de los algoritmos.
Generación de código de GPU
Genere código CUDA® para GPU NVIDIA® mediante GPU Coder™.
Notas y limitaciones de uso:
Cuando se genera código, la imagen de entrada,
A
, debe ser 2D o 3D. El valor del argumento de entrada,options
, debe ser una constante en tiempo de compilación.Si especifica un núcleo grande
h
, un núcleo que contiene valores grandes o una imagen que contiene valores grandes, se pueden ver distintos resultados entre MATLAB y el código generado en caso de usar tipos de datos en punto flotante. Esto sucede debido a la acumulación de errores a causa de las diferentes aplicaciones de los algoritmos.Con CUDA® toolkit v9.0, un bug en la optimización de NVIDIA® causa una discrepancia numérica entre los resultados del código generado y MATLAB. Como solución alternativa, desactive la optimización pasando las siguientes banderas en el objeto de configuración (
cfg
) antes de generar el código.cfg.GpuConfig.CompilerFlags = ‘-Xptxas -O0’
Se espera que NVIDIA arregle este bug en CUDA toolkit v9.1.
Entorno basado en subprocesos
Ejecute código en segundo plano con MATLAB® backgroundPool
o acelere código con Parallel Computing Toolbox™ ThreadPool
.
Esta función es totalmente compatible con los entornos basados en hilos. Para obtener más información, consulte Ejecutar funciones de MATLAB en un entorno basado en subprocesos.
Arreglos GPU
Acelere código mediante la ejecución en una unidad de procesamiento gráfico (GPU) mediante Parallel Computing Toolbox™.
Notas y limitaciones de uso:
El núcleo de filtrado
h
debe ser un vector o una matriz 2D del tipo de datosdouble
.Si la imagen se filtra utilizando una GPU,
imfilter
calcula el valor de cada píxel de salida utilizando precisión simple o punto flotante de doble precisión, dependiendo del tipo de datos deA
. SiA
contiene valores de doble precisión o del tipouint32
,imfilter
utiliza valores de doble precisión. En todos los demás tipos de dato,imfilter
utiliza precisión simple. SiA
es un entero o un arreglo lógico,imfilter
trunca los elementos de salida que exceden el rango del tipo de datos dado y redondea los valores fraccionales.
Para obtener más información, consulte Procesamiento de imágenes en una GPU.
Historial de versiones
Introducido antes de R2006aR2022b: Compatibilidad con entornos basados en hilos
Ahora imfilter
es compatible con los entornos basados en hilos.
Comando de MATLAB
Ha hecho clic en un enlace que corresponde a este comando de MATLAB:
Ejecute el comando introduciéndolo en la ventana de comandos de MATLAB. Los navegadores web no admiten comandos de MATLAB.
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)