MATLAB: Laplacian of Gaussian Filter voor Kante Detectie
Een Gaussiaans filter is een lineair filter gebruikt in beeldverwerking om afbeeldingen te vervagen of glad te maken. Het is vernoemd naar de Gaussiaanse functie, die wordt gebruikt om de vorm van het filter te definiëren. Het Gaussiaans filter wordt veel gebruikt om ruis en details in een afbeelding te verminderen, wat het geschikter maakt voor verdere verwerking of analyse.
De Laplacian of Gaussian (LoG) filter is een populaire beeldverbetering en kantedetectie filter gebruikt in beeldverwerking. Het is een combinatie van twee filters: het Gaussiaans filter en het Laplaciaans filter. Het Gaussiaans filter wordt gebruikt om de afbeelding glad te maken en ruis te verminderen, terwijl het Laplaciaans filter wordt gebruikt om kanten te detecteren.
De Laplacian of Gaussian filter is nuttig voor het detecteren van kanten op verschillende schalen in een afbeelding. Door de standaarddeviatie van het Gaussiaans filter te variëren, kunt u de schaal controleren waarop kanten worden gedetecteerd. Kleinere standaarddeviaties detecteren fijne details, terwijl grotere standaarddeviaties bredere kenmerken detecteren.
Laten we een paar voorbeelden zien voor de laplacian of gaussian filter.
Voorbeeld 1: fspecial() Functie Gebruiken
De fspecial() functie wordt gebruikt om een Gaussiaans filter te maken, en vervolgens wordt de Laplacian van deze Gaussiaans berekend om de LoG filter te maken. Echter, het Laplaciaans filter verwacht dat het Gaussiaans filter van type double is.
De code is:
% Lees de afbeelding
img = imread('peppers.jpg');
% Converteer de afbeelding naar grijswaarden
if size(img, 3) == 3
img_gray = rgb2gray(img);
else
img_gray = img;
end
% Maak een Gaussiaans filter
sigma = 2; % Standaarddeviatie van het Gaussiaans filter
hsize = 2 * ceil(3 * sigma) + 1; % Filtergrootte
gaussian_filter = fspecial('gaussian', hsize, sigma);
% Maak een Laplacian of Gaussian filter
log_filter = fspecial('log', hsize, sigma);
% Pas de LoG filter toe op de afbeelding
filtered_img = imfilter(double(img_gray), log_filter, 'conv', 'replicate');
% Toon de originele en gefilterde afbeeldingen
subplot(1, 2, 1); imshow(img_gray); title('Originele Afbeelding');
subplot(1, 2, 2); imshow(uint8(filtered_img)); title('Laplacian of Gaussian Gefilterde Afbeelding');
Laten we de code in detail begrijpen:
img = imread('peppers.jpg');
Hier leest het de afbeelding 'peppers.jpg' uit de huidige directory en slaat het 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 omgezet naar grijswaarden met de rgb2gray functie. De grijswaardenafbeelding wordt opgeslagen in de variabele img_gray. Als de afbeelding al in grijswaarden is, wordt deze als-is opgeslagen.
sigma = 2; % Standaarddeviatie van het Gaussiaans filter
hsize = 2 * ceil(3 * sigma) + 1; % Filtergrootte
gaussian_filter = fspecial('gaussian', hsize, sigma);
log_filter = fspecial('log', hsize, sigma);
We maken de Laplacian of Gaussian filter met de fspecial functie met 'log' als filtertype. Deze filter vertegenwoordigt de Laplacian van het Gaussiaans filter, welke gebruikt wordt voor kantedetectie.
filtered_img = imfilter(double(img_gray), log_filter, 'conv', 'replicate');
Hier wordt de Laplacian of Gaussian filter toegepast op de grijswaardenafbeelding img_gray met de imfilter functie. De 'conv' optie specificeert dat de filter moet worden toegepast met convolutie, en de 'replicate' optie specificeert hoe de afbeeldingsgrenzen tijdens het filteren moeten worden behandeld.
subplot(1, 2, 1); imshow(img_gray); title('Originele Afbeelding');
subplot(1, 2, 2); imshow(uint8(filtered_img)); title('Laplacian of Gaussian Gefilterde Afbeelding');
Ten slotte tonen we de originele grijswaardenafbeelding en de gefilterde afbeelding naast elkaar met de subplot, imshow en title functies. De gefilterde afbeelding wordt geconverteerd naar uint8 formaat voor weergave.
Wanneer de code wordt uitgevoerd, is de uitvoer als volgt:
(originele en gefilterde afbeelding naast elkaar)
Voorbeeld 2: Beeldfiltering met Laplacian en LoG Filters
Dit voorbeeld toont de toepassing van twee verschillende filters, het Laplaciaans filter en het Laplacian of Gaussian (LoG) filter, op een invoerafbeelding 'peppers.jpg'.
De code is:
x = imread('peppers.jpg');
figure; imshow(x); title('Invoerafbeelding');
figure; h = fspecial('laplacian'); filtered_image = imfilter(x, h); imshow(filtered_image); title('Uitvoer van 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('Invoerafbeelding');
Deze code leest de afbeelding 'peppers.jpg' en toont het met de imshow functie. De title functie voegt een titel toe aan de afbeeldingsfiguur.
h = fspecial('laplacian');
filtered_image = imfilter(x, h);
Hier wordt het Laplaciaans filter gemaakt met de fspecial functie met 'laplacian' als filtertype. De imfilter functie wordt vervolgens gebruikt om deze filter toe te passen op de invoerafbeelding x, resulterend in de gefilterde afbeelding filtered_image.
figure; imshow(filtered_image); title('Uitvoer van Laplacian Filter');
Deze code toont de gefilterde afbeelding verkregen uit het Laplaciaans filter. De title functie voegt een titel toe aan de afbeeldingsfiguur.
h = fspecial('log');
filtered_image = imfilter(x, h);
Vergelijkbaar met het Laplaciaans filter, wordt de LoG filter gemaakt met de fspecial functie met 'log' als filtertype. De imfilter functie wordt vervolgens gebruikt om deze filter toe te passen op de invoerafbeelding x, resulterend in de gefilterde afbeelding filtered_image.
imshow(filtered_image); title('Laplacian of Gaussian Filter');
Deze code toont de gefilterde afbeelding verkregen uit de LoG filter. De title functie voegt een titel toe aan de afbeeldingsfiguur.
Wanneer de code wordt uitgevoerd, is de uitvoer:
(vergelijking van Laplacian en LoG filter resultaten)
MATLAB
- MATLAB: Laplacian of Gaussian Filter voor Kante Detectie
- Data Exporteren uit MATLAB: Bestandsformaten & Technieken
- Algebraïsche Vergelijkingen in MATLAB: Oplossen, Vereenvoudigen & Ontbinden
- Snelle Gids voor het Instellen van je MATLAB Omgeving
- Polynomen in MATLAB: Representatie, Evaluatie & Curve Fitting
- MATLAB M-Bestanden: Scripts en Functies voor Krachtig Programmeren
- Wiskundige Uitdrukkingen Visualiseren in MATLAB: 2D & 3D Plot Handleiding
- Essentiële MATLAB Commando's voor Efficiënte Berekening
- MATLAB Integratie: Van Onbepaalde Integralen tot Riemann Sommen
- Symbolische Afgeleiden Berekenen in MATLAB met diff
- GNU Octave: Complete MATLAB-Compatible Tutorial