Filtro de paso bajo de imagen MATLAB
Este tutorial analizará la creación de un filtro de paso bajo 2D para una imagen utilizando la función fspecial()
en MATLAB.
Suavizar una imagen usando un filtro de paso bajo en MATLAB
Hay dos niveles de frecuencia presentes en una imagen. Los bordes y el ruido de una imagen representan componentes de alta frecuencia y las áreas suaves representan componentes de baja frecuencia.
Los componentes de alta frecuencia tienen un nivel de alta intensidad o alto contraste, y los componentes de baja frecuencia tienen un nivel de baja intensidad o bajo contraste.
Supongamos que una imagen tiene bordes afilados o ruido y queremos suavizarla. En ese caso, tenemos que crear un filtro de paso bajo que permita que los componentes o píxeles de baja frecuencia pasen y detengan los componentes o píxeles de alta frecuencia, bajando el nivel de intensidad de los píxeles en la imagen.
Supongamos que una imagen tiene áreas suaves o de bajo contraste y queremos enfocarla. En ese caso, tenemos que crear un filtro de paso alto que permita que los componentes o píxeles de alta frecuencia pasen y detengan los componentes o píxeles de baja frecuencia, aumentando el nivel de intensidad de los píxeles en la imagen.
Hay diferentes tipos de filtros que podemos usar para hacer un filtro de paso alto o bajo.
La función fspecial()
de MATLAB se puede utilizar para hacer un filtro de paso alto o bajo 2D. Después de crear un filtro, podemos aplicarlo a la imagen dada usando la función imfilter()
o filter2()
.
La función fspecial()
tiene diferentes sintaxis dependiendo de varios filtros. Los filtros fspecial()
disponibles y sus sintaxis se muestran a continuación.
Filter_object = fspecial(type)
Filter_object = fspecial('average',hsize)
Filter_object = fspecial('disk',radius)
Filter_object = fspecial('gaussian',hsize,sigma)
Filter_object = fspecial('laplacian',alpha)
Filter_object = fspecial('log',hsize,sigma)
Filter_object = fspecial('motion',len,theta)
Filter_object = fspecial('prewitt')
Filter_object = fspecial('sobel')
La primera sintaxis es la sintaxis básica de la función fspecial()
, y los seis filtros después de la primera sintaxis son filtros de paso bajo que se usan para suavizar una imagen, y los dos últimos filtros son filtros de paso alto que se usan para agudizar los bordes presentes en la imagen dada. Tenemos que pasar el tipo del filtro o el nombre del filtro para hacer un filtro de ese tipo específico.
Algunos filtros también tienen argumentos opcionales, pero si solo pasamos el nombre del filtro, la función usará los valores predeterminados para los argumentos opcionales. También podemos establecer los argumentos opcionales de los filtros utilizando su sintaxis específica, que se muestra después de la primera sintaxis.
Por ejemplo, en el caso de un filtro promedio, podemos establecer el tamaño del filtro, que puede ser un número entero positivo o un vector de dos elementos, utilizando la segunda sintaxis mencionada anteriormente.
Si configuramos el hsize
como un entero positivo o escalador, el filtro será una matriz cuadrada. Si establecemos el hsize
como un vector de dos elementos, el primer elemento representará el número de filas y el segundo elemento representará el número de columnas de la matriz de filtro.
La tercera sintaxis se usa para crear un filtro promedio circular o un filtro de disco de acuerdo con el radio dado, que puede ser un número entero positivo y, de forma predeterminada, su valor se establece en 5. La cuarta sintaxis se usa para crear un filtro gaussiano con el size hsize
y sigma
, que representa la desviación estándar, y por defecto su valor está fijado en 0.5
.
También podemos usar las funciones imgaussfilt()
e imgaussfilt3()
en MATLAB para crear y aplicar un filtro gaussiano a una imagen determinada. La quinta sintaxis se utiliza para crear un filtro laplaciano
según alfa
, que establece la forma de Laplaciano, y su valor por defecto es 0.2
.
La sexta sintaxis se utiliza para crear un filtro laplaciano de filtro gaussiano según el tamaño del filtro hsize
y sigma
, que representan la desviación estándar.
La séptima sintaxis se usa para crear un filtro de movimiento para suavizar una imagen que contiene movimiento lineal de la cámara de acuerdo con la duración del movimiento especificado por len
, que tiene un valor predeterminado de 9, y el ángulo de movimiento está en grados. especificado por theta
. El ángulo estará en la dirección contraria a las agujas del reloj y su valor predeterminado es 0.
La octava sintaxis crea un filtro de paso alto para mejorar el nivel de intensidad de los bordes horizontales mediante un degradado vertical. Si queremos crear un filtro para mejorar los bordes verticales, podemos tomar la transposición de la matriz del filtro de salida.
La última sintaxis es la misma que la penúltima sintaxis; la única diferencia es que la última sintaxis se usa para crear un filtro usando el efecto de suavizado. Por ejemplo, usemos la función fspecial()
para crear el filtro promedio para eliminar el ruido de sal y pimienta presente en una imagen.
Vea el código a continuación.
clc
clear
Input_image = imread('eight.tif');
Noisy_image = imnoise(Input_image,'salt & pepper',0.03);
h = fspecial('average');
Smoothed_image = filter2(h, Input_image);
imshowpair(Noisy_image,Smoothed_image,'montage')
Producción:
En el código anterior, usamos la función imnoise()
para poner ruido de sal y pimienta en la imagen dada, y usamos la función filter2()
para aplicar el filtro promedio a la imagen ruidosa. Usamos la función imshowpair()
para mostrar las imágenes ruidosas y suavizadas para comparar.
Podemos ver en el resultado anterior que la imagen del lado derecho se suaviza con el filtro de promedio. Podemos aplicar diferentes filtros a una imagen para comprobar el resultado.
También podemos usar la función imfilter()
para aplicar un filtro a una imagen determinada. La diferencia entre filter2()
y imfilter()
es su algoritmo para aplicar el filtro en la imagen dada.
imfilter()
usa doble precisión y aritmética de coma flotante para calcular el valor de los píxeles de la imagen de salida, y filter2()
toma la convolución 2D de la imagen dada y la matriz de filtro, que se girará 180 grados para encontrar los valores de píxel de salida. Podemos probar ambas funciones y comparar su resultado.
También podemos establecer algunas opciones de la función imfilter()
como las opciones de relleno para la matriz de entrada, el tamaño de la matriz de salida y las opciones de convolución. También podemos configurar la forma de los datos filtrados de salida en el caso de la función filter2()
, que está configurada en igual
de forma predeterminada, pero también podemos configurarla en completo
para datos filtrados 2D completos y válido
. ` para datos que se calculan sin utilizar los bordes con relleno cero.
Consulte este enlace para obtener más detalles sobre la función filter2()
. Consulte este enlace para obtener más detalles sobre la función imfilter()
.