MATLAB :filtre laplacien de gaussien pour la détection des bords
Un filtre gaussien est un filtre linéaire utilisé dans le traitement d'images pour flouter ou lisser les images. Il doit son nom à la fonction gaussienne utilisée pour définir la forme du filtre. Le filtre gaussien est couramment utilisé pour réduire le bruit et les détails d'une image, la rendant plus adaptée à un traitement ou une analyse ultérieurs.
Le filtre Laplacien de Gauss (LoG) est un filtre d'amélioration d'image et de détection de contours utilisé dans le traitement d'images. C'est une combinaison de deux filtres :le filtre gaussien et le filtre laplacien. Le filtre gaussien est utilisé pour lisser l'image et réduire le bruit, tandis que le filtre laplacien est utilisé pour détecter les bords.
Le filtre laplacien ou gaussien est utile pour détecter les bords à différentes échelles dans une image. En faisant varier l'écart type du filtre gaussien, vous pouvez contrôler l'échelle à laquelle les bords sont détectés. Des écarts types plus petits détectent des détails plus fins, tandis que des écarts types plus grands détectent des caractéristiques plus larges.
Voyons quelques exemples de filtre laplacien ou gaussien.
Exemple 1 :Utilisation de la fonction fspecial()
La fonction fspecial() est utilisée pour créer un filtre gaussien, puis le laplacien de ce gaussien est calculé pour créer le filtre LoG. Cependant, le filtre laplacien s'attend à ce que le filtre gaussien soit de type double.
Le code que nous avons est −
% 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');
Comprenons le code en détail −
img = imread('peppers.jpg');
Ici, il lit l'image 'peppers.jpg' du répertoire courant et la stocke dans la variable img.
if size(img, 3) == 3 img_gray = rgb2gray(img); else img_gray = img; end
Si l'image est en couleur (format RVB), elle est convertie en niveaux de gris grâce à la fonction rgb2gray. L'image en niveaux de gris est stockée dans la variable img_gray. Si l'image est déjà en niveaux de gris, elle est stockée telle quelle.
sigma = 2; % Standard deviation of the Gaussian filter
hsize = 2 * ceil(3 * sigma) + 1; % Filter size
gaussian_filter = fspecial('gaussian', hsize, sigma);
Le code ci-dessus crée le filtre gaussien. Ici, nous définissons l'écart type sigma du filtre gaussien et calculons la taille du filtre hsize en fonction de l'écart type. Nous créons ensuite le filtre gaussien en utilisant la fonction fspecial avec 'gaussian' comme type de filtre.
log_filter = fspecial('log', hsize, sigma);
Nous créons le filtre laplacien de gaussien en utilisant la fonction fspecial avec 'log' comme type de filtre. Ce filtre représente le laplacien du filtre gaussien, qui est utilisé pour la détection des contours.
filtered_img = imfilter(double(img_gray), log_filter, 'conv', 'replicate');
Ici, le filtre laplacien de gaussien sur l'image en niveaux de gris img_gray en utilisant la fonction imfilter. L'option 'conv' spécifie que le filtre doit être appliqué par convolution, et l'option 'replicate' spécifie comment les limites de l'image doivent être gérées pendant le filtrage.
subplot(1, 2, 1);
imshow(img_gray);
title('Original Image');
subplot(1, 2, 2);
imshow(uint8(filtered_img));
title('Laplacian of Gaussian Filtered Image');
Enfin, nous affichons côte à côte l’image originale en niveaux de gris et l’image filtrée à l’aide des fonctions subplot, imshow et title. L'image filtrée est convertie au format uint8 avant affichage.
Lorsque le code est exécuté, le résultat que nous obtenons est le suivant −
Exemple 2 :Filtrage d'images avec des filtres laplaciens et LoG
Cet exemple montre l'application de deux filtres différents, le filtre laplacien et le filtre laplacien de gaussien (LoG), à une image d'entrée 'peppers.jpg'
Le code que nous avons est −
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');
Dans l'exemple ci-dessus−
x = imread('peppers.jpg');
figure;
imshow(x);
title('Input Image');
Ce code lit l'image 'peppers.jpg' et l'affiche à l'aide de la fonction imshow. La fonction titre ajoute un titre à la figure de l'image.
h = fspecial('laplacian');
filtered_image = imfilter(x, h);
Ici, le filtre laplacien est créé à l'aide de la fonction fspecial avec 'laplacian' comme type de filtre. La fonction imfilter est ensuite utilisée pour appliquer ce filtre à l'image d'entrée x, ce qui donne l'image filtrée filtered_image.
figure;
imshow(filtered_image);
title('Output of Laplacian Filter');
Ce code affiche l'image filtrée obtenue à partir du filtre laplacien. La fonction titre ajoute un titre à la figure de l'image.
h = fspecial('log');
filtered_image = imfilter(x, h);
Semblable au filtre laplacien, le filtre LoG est créé à l'aide de la fonction fspecial avec « log » comme type de filtre. La fonction imfilter est ensuite utilisée pour appliquer ce filtre à l'image d'entrée x, ce qui donne l'image filtrée filtered_image.
imshow(filtered_image);
title('Laplacian of Gaussian Filter');
Ce code affiche l'image filtrée obtenue à partir du filtre LoG. La fonction titre ajoute un titre à la figure de l'image.
Lorsque le code est exécuté, le résultat que nous obtenons est −
MATLAB