MATLAB:filtro laplaciano de gaussiano para detección de bordes
Un filtro gaussiano es un filtro lineal que se utiliza en el procesamiento de imágenes para desenfocar o suavizar imágenes. Lleva el nombre de la función gaussiana, que se utiliza para definir la forma del filtro. El filtro gaussiano se utiliza habitualmente para reducir el ruido y los detalles de una imagen, haciéndola más adecuada para su posterior procesamiento o análisis.
El filtro Laplaciano de Gauss (LoG) es un filtro popular de mejora de imágenes y detección de bordes que se utiliza en el procesamiento de imágenes. Es una combinación de dos filtros:el filtro gaussiano y el filtro laplaciano. El filtro gaussiano se utiliza para suavizar la imagen y reducir el ruido, mientras que el filtro laplaciano se utiliza para detectar bordes.
El filtro laplaciano de gaussiano es útil para detectar bordes a diferentes escalas en una imagen. Al variar la desviación estándar del filtro gaussiano, puede controlar la escala en la que se detectan los bordes. Las desviaciones estándar más pequeñas detectan detalles más finos, mientras que las desviaciones estándar más grandes detectan características más amplias.
Veamos algunos ejemplos de filtro laplaciano gaussiano.
Ejemplo 1:uso de la función fspecial()
La función fspecial() se utiliza para crear un filtro gaussiano y luego se calcula el laplaciano de este gaussiano para crear el filtro LoG. Sin embargo, el filtro laplaciano espera que el filtro gaussiano sea de tipo doble.
El código que tenemos es −
% Read the image
img = imread('peppers.jpg');
% Convert the image to grayscale
if size(img, 3) == 3
img_gray = rgb2gray(img);
else
img_gray = img;
end
% Create a Gaussian filter
sigma = 2; % Standard deviation of the Gaussian filter
hsize = 2 * ceil(3 * sigma) + 1; % Filter size
gaussian_filter = fspecial('gaussian', hsize, sigma);
% Create a Laplacian of Gaussian filter
log_filter = fspecial('log', hsize, sigma);
% Apply the LoG filter to the image
filtered_img = imfilter(double(img_gray), log_filter, 'conv', 'replicate');
% Display the original and filtered images
subplot(1, 2, 1);
imshow(img_gray);
title('Original Image');
subplot(1, 2, 2);
imshow(uint8(filtered_img));
title('Laplacian of Gaussian Filtered Image');
Entendamos el código en detalle −
img = imread('peppers.jpg');
Aquí lee la imagen 'peppers.jpg' del directorio actual y la almacena en la variable img.
if size(img, 3) == 3 img_gray = rgb2gray(img); else img_gray = img; end
Si la imagen es en color (formato RGB), se convierte a escala de grises mediante la función rgb2gray. La imagen en escala de grises se almacena en la variable img_gray. Si la imagen ya está en escala de grises, se almacena tal cual.
sigma = 2; % Standard deviation of the Gaussian filter
hsize = 2 * ceil(3 * sigma) + 1; % Filter size
gaussian_filter = fspecial('gaussian', hsize, sigma);
El código anterior crea el filtro gaussiano. Aquí, definimos la desviación estándar sigma del filtro gaussiano y calculamos el tamaño del filtro hsize en función de la desviación estándar. Luego creamos el filtro gaussiano usando la función especial con 'gaussiano' como tipo de filtro.
log_filter = fspecial('log', hsize, sigma);
Creamos el filtro laplaciano de gaussiano usando la función fspecial con 'log' como tipo de filtro. Este filtro representa el laplaciano del filtro gaussiano, que se utiliza para la detección de bordes.
filtered_img = imfilter(double(img_gray), log_filter, 'conv', 'replicate');
Aquí el filtro laplaciano de Gauss para la imagen en escala de grises img_gray usando la función imfilter. La opción 'conv' especifica que el filtro debe aplicarse mediante convolución, y la opción 'replicar' especifica cómo se deben manejar los límites de la imagen durante el filtrado.
subplot(1, 2, 1);
imshow(img_gray);
title('Original Image');
subplot(1, 2, 2);
imshow(uint8(filtered_img));
title('Laplacian of Gaussian Filtered Image');
Finalmente, mostramos la imagen original en escala de grises y la imagen filtrada una al lado de la otra usando las funciones subtrama, imshow y título. La imagen filtrada se convierte al formato uint8 antes de mostrarse.
Cuando se ejecuta el código, el resultado que obtenemos es el siguiente:
Ejemplo 2:filtrado de imágenes con filtros laplacianos y LoG
Este ejemplo muestra la aplicación de dos filtros diferentes, el filtro laplaciano y el filtro laplaciano de gaussiano (LoG), a una imagen de entrada 'peppers.jpg'
El código que tenemos es −
x=imread('peppers.jpg');
figure;
imshow(x);
title('Input Image');
figure;
h=fspecial('laplacian');
filtered_image=imfilter(x,h);
imshow(filtered_image);
title('Output of Laplacian Filter');
figure;
h=fspecial('log');
filtered_image=imfilter(x,h);
imshow(filtered_image);
title('Laplacian Gaussian Filter');
En el ejemplo anterior:
x = imread('peppers.jpg');
figure;
imshow(x);
title('Input Image');
Este código lee la imagen 'peppers.jpg' y la muestra usando la función imshow. La función de título agrega un título a la figura de la imagen.
h = fspecial('laplacian');
filtered_image = imfilter(x, h);
Aquí, el filtro laplaciano se crea usando la función especial con 'laplaciano' como tipo de filtro. Luego, la función imfilter se usa para aplicar este filtro a la imagen de entrada x, lo que da como resultado la imagen filtrada filtered_image.
figure;
imshow(filtered_image);
title('Output of Laplacian Filter');
Este código muestra la imagen filtrada obtenida del filtro laplaciano. La función de título agrega un título a la figura de la imagen.
h = fspecial('log');
filtered_image = imfilter(x, h);
Similar al filtro laplaciano, el filtro LoG se crea utilizando la función fspecial con 'log' como tipo de filtro. Luego, la función imfilter se usa para aplicar este filtro a la imagen de entrada x, lo que da como resultado la imagen filtrada filtered_image.
imshow(filtered_image);
title('Laplacian of Gaussian Filter');
Este código muestra la imagen filtrada obtenida del filtro LoG. La función de título agrega un título a la figura de la imagen.
Cuando se ejecuta el código, el resultado que obtenemos es −
MATLAB