MATLAB:Laplace- of Gaussiaans filter voor randdetectie
Een Gaussiaans filter is een lineair filter dat bij beeldverwerking wordt gebruikt om afbeeldingen te vervagen of vloeiender te maken. Het is genoemd naar de Gauss-functie, die wordt gebruikt om de vorm van het filter te definiëren. Het Gaussiaanse filter wordt vaak gebruikt om ruis en details in een afbeelding te verminderen, waardoor het geschikter wordt voor verdere verwerking of analyse.
Het Laplace- of Gauss-filter (LoG) is een populair filter voor beeldverbetering en randdetectie dat wordt gebruikt bij beeldverwerking. Het is een combinatie van twee filters:het Gaussiaanse filter en het Laplace-filter. Het Gaussiaanse filter wordt gebruikt om het beeld vloeiender te maken en ruis te verminderen, terwijl het Laplace-filter wordt gebruikt om randen te detecteren.
Het Laplace- of Gauss-filter is handig voor het detecteren van randen op verschillende schalen in een afbeelding. Door de standaardafwijking van het Gauss-filter te variëren, kunt u de schaal bepalen waarop randen worden gedetecteerd. Kleinere standaardafwijkingen detecteren fijnere details, terwijl grotere standaardafwijkingen bredere kenmerken detecteren.
Laten we een paar voorbeelden bekijken voor een laplaciaans of gaussisch filter.
Voorbeeld 1:De functie fspecial() gebruiken
De functie fspecial() wordt gebruikt om een Gaussiaans filter te maken, en vervolgens wordt de Laplace-waarde van deze Gaussiaans berekend om het LoG-filter te maken. Het Laplace-filter verwacht echter dat het Gauss-filter van het type double is.
De code die we hebben is −
% 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');
Laten we de code in detail begrijpen −
img = imread('peppers.jpg');
Hier leest het de afbeelding 'peppers.jpg' uit de huidige map en slaat deze op in de variabele img.
if size(img, 3) == 3 img_gray = rgb2gray(img); else img_gray = img; end
Als de afbeelding in kleur is (RGB-formaat), wordt deze geconverteerd naar grijstinten met behulp van de rgb2gray-functie. De grijswaardenafbeelding wordt opgeslagen in de variabele img_gray. Als de afbeelding al in grijstinten is, wordt deze opgeslagen zoals hij is.
sigma = 2; % Standard deviation of the Gaussian filter
hsize = 2 * ceil(3 * sigma) + 1; % Filter size
gaussian_filter = fspecial('gaussian', hsize, sigma);
Met de bovenstaande code wordt het Gauss-filter gemaakt. Hier definiëren we de standaardafwijkingssigma van het Gauss-filter en berekenen we de filtergrootte hsize op basis van de standaardafwijking. Vervolgens maken we het Gaussiaanse filter met behulp van de functie fspecial met 'gaussian' als filtertype.
log_filter = fspecial('log', hsize, sigma);
We maken het Laplace- of Gaussiaanse filter met behulp van de fspecial-functie met 'log' als filtertype. Dit filter vertegenwoordigt de Laplace-filter van het Gauss-filter, dat wordt gebruikt voor randdetectie.
filtered_img = imfilter(double(img_gray), log_filter, 'conv', 'replicate');
Hier filtert het Laplace- of Gaussiaanse filter naar de grijswaardenafbeelding img_gray met behulp van de imfilter-functie. De optie 'conv' specificeert dat het filter moet worden toegepast met behulp van convolutie, en de optie 'repliceren' specificeert hoe de afbeeldingsgrenzen moeten worden afgehandeld tijdens het filteren.
subplot(1, 2, 1);
imshow(img_gray);
title('Original Image');
subplot(1, 2, 2);
imshow(uint8(filtered_img));
title('Laplacian of Gaussian Filtered Image');
Ten slotte geven we de originele grijswaardenafbeelding en de gefilterde afbeelding naast elkaar weer met behulp van de functies subplot, imshow en titel. De gefilterde afbeelding wordt vóór weergave geconverteerd naar het uint8-formaat.
Wanneer de code wordt uitgevoerd, is de uitvoer die we krijgen als volgt −
Voorbeeld 2:beeldfiltering met Laplace- en Log-filters
Dit voorbeeld toont de toepassing van twee verschillende filters, het Laplace-filter en het Laplace-of-Gaussiaanse (LoG) filter, op een invoerafbeelding 'peppers.jpg'
De code die we hebben is −
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');
In het bovenstaande voorbeeld−
x = imread('peppers.jpg');
figure;
imshow(x);
title('Input Image');
Deze code leest de afbeelding 'peppers.jpg' en geeft deze weer met behulp van de imshow-functie. De titelfunctie voegt een titel toe aan de afbeelding.
h = fspecial('laplacian');
filtered_image = imfilter(x, h);
Hier wordt het Laplace-filter gemaakt met behulp van de fspecial-functie met 'laplacian' als filtertype. De imfilter-functie wordt vervolgens gebruikt om dit filter toe te passen op de invoerafbeelding x, wat resulteert in de gefilterde afbeelding filtered_image.
figure;
imshow(filtered_image);
title('Output of Laplacian Filter');
Deze code geeft de gefilterde afbeelding weer die is verkregen uit het Laplace-filter. De titelfunctie voegt een titel toe aan de afbeelding.
h = fspecial('log');
filtered_image = imfilter(x, h);
Net als bij het Laplace-filter wordt het LoG-filter gemaakt met behulp van de fspecial-functie met 'log' als filtertype. De imfilter-functie wordt vervolgens gebruikt om dit filter toe te passen op de invoerafbeelding x, wat resulteert in de gefilterde afbeelding filtered_image.
imshow(filtered_image);
title('Laplacian of Gaussian Filter');
Deze code geeft de gefilterde afbeelding weer die is verkregen uit het LoG-filter. De titelfunctie voegt een titel toe aan de afbeelding.
Wanneer de code wordt uitgevoerd, is de uitvoer die we krijgen −
MATLAB