MATLAB: Laplacian-of-Gaussian-Filter für Kantendetektion
Ein Gauß-Filter ist ein linearer Filter in der Bildverarbeitung zum Weichzeichnen oder Glätten von Bildern. Er ist nach der Gauß-Funktion benannt, die die Filterform definiert. Der Gauß-Filter wird häufig verwendet, um Rauschen und Details in einem Bild zu reduzieren, was es für weitere Verarbeitung oder Analyse geeigneter macht.
Der Laplacian-of-Gaussian (LoG) Filter ist ein beliebter Bildverbesserungs- und Kantendetektionsfilter in der Bildverarbeitung. Er kombiniert zwei Filter: den Gauß-Filter und den Laplace-Filter. Der Gauß-Filter glättet das Bild und reduziert Rauschen, während der Laplace-Filter Kanten detektiert.
Der LoG-Filter eignet sich, um Kanten auf verschiedenen Skalen in einem Bild zu detektieren. Durch Variation der Standardabweichung des Gauß-Filters lässt sich die Skala steuern, auf der Kanten erkannt werden. Kleinere Standardabweichungen erfassen feinere Details, größere erkennen breitere Merkmale.
Beispiel 1: Mit fspecial()-Funktion
Die Funktion fspecial() erstellt einen Gauß-Filter, dann wird der Laplace dieses Gauß berechnet, um den LoG-Filter zu erzeugen. Der Laplace-Filter erwartet den Gauß-Filter vom Typ double.
% Bild einlesen img = imread('peppers.jpg'); % In Graustufen konvertieren if size(img, 3) == 3 img_gray = rgb2gray(img); else img_gray = img; end % Gauß-Filter erstellen sigma = 2; % Standardabweichung hsize = 2 * ceil(3 * sigma) + 1; % Filtergröße gaussian_filter = fspecial('gaussian', hsize, sigma); % LoG-Filter erstellen log_filter = fspecial('log', hsize, sigma); % LoG-Filter auf Bild anwenden filtered_img = imfilter(double(img_gray), log_filter, 'conv', 'replicate'); % Original und gefiltertes Bild anzeigen subplot(1, 2, 1); imshow(img_gray); title('Originalbild'); subplot(1, 2, 2); imshow(uint8(filtered_img)); title('Laplacian-of-Gaussian gefiltertes Bild');
Code-Erklärung:
- imread liest 'peppers.jpg' aus dem aktuellen Verzeichnis.
- Farbprüfung: Falls RGB (3 Kanäle), Konvertierung zu Graustufen via rgb2gray.
- sigma definiert Standardabweichung, hsize berechnet Filtergröße. fspecial('gaussian', ...) erstellt Gauß-Filter.
- fspecial('log', ...) erstellt LoG-Filter für Kantendetektion.
- imfilter wendet LoG-Filter via Faltung ('conv') an, Randbehandlung 'replicate'.
- subplot/imshow/title zeigen Original und gefiltertes Bild nebeneinander.
Beispiel 2: Bildfilterung mit Laplace- und LoG-Filtern
Dieses Beispiel wendet zwei Filter auf 'peppers.jpg' an: Laplace-Filter und LoG-Filter.
x = imread('peppers.jpg'); figure; imshow(x); title('Eingangsbild'); figure; h = fspecial('laplacian'); filtered_image = imfilter(x, h); imshow(filtered_image); title('Ausgabe Laplace-Filter'); figure; h = fspecial('log'); filtered_image = imfilter(x, h); imshow(filtered_image); title('Laplacian-Gaussian-Filter');
Erklärung:
- fspecial('laplacian') erstellt Laplace-Filter, imfilter wendet ihn an.
- fspecial('log') erstellt LoG-Filter, imfilter wendet ihn an.
- Jeweils in separater Figure mit Titel angezeigt.
MATLAB
- Variablen in MATLAB verstehen: Grundlagen & Beispiele
- MATLAB OOP meistern: Robuste, wiederverwendbare Klassen & Objekte erstellen
- MATLAB Strings meistern: Einfache Erstellung & Verwendung
- MATLAB Grafik meistern: Fortgeschrittene Plotting-Techniken
- GNU Octave meistern: Ein vollständiges MATLAB-kompatibles Tutorial
- MATLAB M-Dateien: Scripts und Functions meistern
- MATLAB für Analysis: Differentialgleichungen, Integrale & Grenzwerte lösen
- MATLAB: Mehrdimensionale und spezielle Arrays meistern
- Simulink: MATLABs fortgeschrittenes Simulations- & Model-Based-Design-Tool
- MATLAB: Umfassender Überblick über die führende numerische Computing-Umgebung