MATLAB: Filtro Laplaciano de Gaussiano para detección de bordes
Un filtro gaussiano es un filtro lineal usado en procesamiento de imágenes para difuminar o suavizar imágenes. Recibe su nombre de la función gaussiana, que se usa para definir la forma del filtro. El filtro gaussiano se usa comúnmente para reducir ruido y detalle en una imagen, haciéndola más adecuada para procesamiento o análisis posterior.
El filtro Laplaciano de Gaussiano (LoG) es un filtro popular de mejora de imagen y detección de bordes usado en procesamiento de imágenes. Es una combinación de dos filtros: el filtro gaussiano y el filtro laplaciano. El filtro gaussiano se usa para suavizar la imagen y reducir ruido, mientras que el filtro laplaciano se usa 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. Desviaciones estándar más pequeñas detectan detalles más finos, mientras que desviaciones estándar más grandes detectan características más amplias.
Veamos algunos ejemplos para el filtro laplaciano de gaussiano.
Ejemplo 1: Usando la función fspecial()
La función fspecial() se usa para crear un filtro gaussiano, y luego se computa el laplaciano de este gaussiano para crear el filtro LoG. Sin embargo, el filtro laplaciano espera que el filtro gaussiano sea de tipo double.
El código que tenemos es:
% Leer la imagen img = imread('peppers.jpg'); % Convertir la imagen a escala de grises if size(img, 3) == 3 img_gray = rgb2gray(img); else img_gray = img; end % Crear un filtro gaussiano sigma = 2; % Desviación estándar del filtro gaussiano hsize = 2 * ceil(3 * sigma) + 1; % Tamaño del filtro gaussian_filter = fspecial('gaussian', hsize, sigma); % Crear un filtro Laplaciano de Gaussiano log_filter = fspecial('log', hsize, sigma); % Aplicar el filtro LoG a la imagen filtered_img = imfilter(double(img_gray), log_filter, 'conv', 'replicate'); % Mostrar la imagen original y filtrada subplot(1, 2, 1); imshow(img_gray); title('Imagen Original'); subplot(1, 2, 2); imshow(uint8(filtered_img)); title('Imagen Filtrada Laplaciano de Gaussiano'); 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 está en color (formato RGB), se convierte a escala de grises usando 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; % Desviación estándar del filtro gaussiano hsize = 2 * ceil(3 * sigma) + 1; % Tamaño del filtro 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 basado en la desviación estándar. Luego creamos el filtro gaussiano usando la función fspecial con 'gaussian' 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 usa para detección de bordes.
filtered_img = imfilter(double(img_gray), log_filter, 'conv', 'replicate');
Aquí se aplica el filtro Laplaciano de Gaussiano a la imagen en escala de grises img_gray usando la función imfilter. La opción 'conv' especifica que el filtro debe aplicarse usando convolución, y la opción 'replicate' especifica cómo deben manejarse los bordes de la imagen durante el filtrado.
subplot(1, 2, 1); imshow(img_gray); title('Imagen Original'); subplot(1, 2, 2); imshow(uint8(filtered_img)); title('Imagen Filtrada Laplaciano de Gaussiano'); Finalmente, mostramos la imagen original en escala de grises y la imagen filtrada lado a lado usando las funciones subplot, imshow y title. La imagen filtrada se convierte a formato uint8 antes de mostrarla.
Cuando se ejecuta el código, la salida que obtenemos es la siguiente:
Ejemplo 2: Filtrado de imagen con filtros Laplaciano 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('Imagen de Entrada'); figure; h=fspecial('laplacian'); filtered_image=imfilter(x,h); imshow(filtered_image); title('Salida del Filtro Laplaciano'); figure; h=fspecial('log'); filtered_image=imfilter(x,h); imshow(filtered_image); title('Filtro Laplaciano Gaussiano'); En el ejemplo anterior:
x = imread('peppers.jpg'); figure; imshow(x); title('Imagen de Entrada'); Este código lee la imagen 'peppers.jpg' y la muestra usando la función imshow. La función title 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 fspecial con 'laplacian' como tipo de filtro. La función imfilter se usa luego para aplicar este filtro a la imagen de entrada x, resultando en la imagen filtrada filtered_image.
figure; imshow(filtered_image); title('Salida del Filtro Laplaciano'); Este código muestra la imagen filtrada obtenida del filtro Laplaciano. La función title 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 usando la función fspecial con 'log' como tipo de filtro. La función imfilter se usa luego para aplicar este filtro a la imagen de entrada x, resultando en la imagen filtrada filtered_image.
imshow(filtered_image); title('Filtro Laplaciano de Gaussiano'); Este código muestra la imagen filtrada obtenida del filtro LoG. La función title agrega un título a la figura de la imagen.
Cuando se ejecuta el código, la salida que obtenemos es:
MATLAB
- Transformadas en MATLAB: Laplace, Fourier y FFT
- MATLAB: Filtro Laplaciano de Gaussiano para detección de bordes
- Operadores en MATLAB: Guía Completa de Aritméticos, Relacionales, Lógicos y Bitwise
- Integración en MATLAB: Antiderivadas, Integrales Definidas y Sumas de Riemann
- MATLAB - Números: Tipos, Almacenamiento y Conversión
- Variables en MATLAB: Conceptos Básicos y Ejemplos Prácticos
- MATLAB: Visión General del Entorno Líder en Computación Numérica
- Cálculo en MATLAB: Límites, Derivadas e Integrales
- Guía MATLAB: Cálculo eficiente de derivadas de polinomios
- Fundamentos de MATLAB: Sintaxis Esencial y Comandos Básicos
- Derivadas Simbólicas en MATLAB con el Comando diff