MATLAB:Лапласиан гауссовского фильтра для обнаружения краев
Фильтр Гаусса — это линейный фильтр, используемый при обработке изображений для размытия или сглаживания изображений. Он назван в честь функции Гаусса, которая используется для определения формы фильтра. Фильтр Гаусса обычно используется для уменьшения шума и детализации изображения, что делает его более подходящим для дальнейшей обработки или анализа.
Фильтр Лапласа Гаусса (LoG) — популярный фильтр улучшения изображений и обнаружения краев, используемый при обработке изображений. Это комбинация двух фильтров:фильтра Гаусса и фильтра Лапласа. Фильтр Гаусса используется для сглаживания изображения и уменьшения шума, а фильтр Лапласа — для обнаружения краев.
Фильтр Лапласа или Гаусса полезен для обнаружения краев изображения в разных масштабах. Изменяя стандартное отклонение фильтра Гаусса, вы можете контролировать масштаб обнаружения краев. Меньшие стандартные отклонения позволяют выявить более мелкие детали, а большие стандартные отклонения позволяют обнаружить более широкие характеристики.
Давайте посмотрим несколько примеров лапласиана гауссовского фильтра.
Пример 1:Использование функции fspecial()
Функция fspecial() используется для создания фильтра Гаусса, а затем вычисляется лапласиан этого гаусса для создания фильтра LoG. Однако фильтр Лапласа ожидает, что фильтр Гаусса будет иметь тип double.
У нас есть код —
% 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');
Давайте разберемся в коде подробно –
img = imread('peppers.jpg');
Здесь он считывает изображение «peppers.jpg» из текущего каталога и сохраняет его в переменной img.
if size(img, 3) == 3 img_gray = rgb2gray(img); else img_gray = img; end
Если изображение цветное (формат RGB), оно преобразуется в оттенки серого с помощью функции rgb2gray. Изображение в оттенках серого хранится в переменной img_gray. Если изображение уже в оттенках серого, оно сохраняется как есть.
sigma = 2; % Standard deviation of the Gaussian filter
hsize = 2 * ceil(3 * sigma) + 1; % Filter size
gaussian_filter = fspecial('gaussian', hsize, sigma);
Приведенный выше код создает фильтр Гаусса. Здесь мы определяем сигму стандартного отклонения фильтра Гаусса и вычисляем размер фильтра hsize на основе стандартного отклонения. Затем мы создаем фильтр Гаусса, используя функцию fspecial с типом фильтра «gaussian».
log_filter = fspecial('log', hsize, sigma);
Мы создаем фильтр Лапласа или Гаусса, используя функцию fspecial с типом фильтра «log». Этот фильтр представляет собой лапласиан фильтра Гаусса, который используется для обнаружения границ.
filtered_img = imfilter(double(img_gray), log_filter, 'conv', 'replicate');
Здесь лапласиан или гауссов фильтр для изображения в оттенках серого img_gray с использованием функции imfilter. Параметр «conv» указывает, что фильтр должен применяться с использованием свертки, а параметр «реплицировать» указывает, как следует обрабатывать границы изображения во время фильтрации.
subplot(1, 2, 1);
imshow(img_gray);
title('Original Image');
subplot(1, 2, 2);
imshow(uint8(filtered_img));
title('Laplacian of Gaussian Filtered Image');
Наконец, мы показываем исходное изображение в оттенках серого и отфильтрованное изображение рядом, используя функции subplot, imshow и title. Отфильтрованное изображение перед отображением преобразуется в формат uint8.
Когда код выполняется, мы получаем следующий результат:
Пример 2:Фильтрация изображений с помощью фильтров Лапласа и LoG
В этом примере показано применение двух разных фильтров:фильтра Лапласа и фильтра Лапласа или Гаусса (LoG) к входному изображению «peppers.jpg»
У нас есть код —
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');
В приведенном выше примере —
x = imread('peppers.jpg');
figure;
imshow(x);
title('Input Image');
Этот код считывает изображение «peppers.jpg» и отображает его с помощью функции imshow. Функция title добавляет заголовок к изображению.
h = fspecial('laplacian');
filtered_image = imfilter(x, h);
Здесь фильтр Лапласа создается с использованием функции fspecial с типом фильтра «лапласиан». Затем функция imfilter применяется для применения этого фильтра к входному изображению x, в результате чего получается отфильтрованное изображение filtered_image.
figure;
imshow(filtered_image);
title('Output of Laplacian Filter');
Этот код отображает отфильтрованное изображение, полученное с помощью фильтра Лапласа. Функция title добавляет заголовок к изображению.
h = fspecial('log');
filtered_image = imfilter(x, h);
Подобно фильтру Лапласа, фильтр LoG создается с использованием функции fspecial с типом фильтра log. Затем функция imfilter используется для применения этого фильтра к входному изображению x, в результате чего получается отфильтрованное изображение filtered_image.
imshow(filtered_image);
title('Laplacian of Gaussian Filter');
Этот код отображает отфильтрованное изображение, полученное из фильтра LoG. Функция title добавляет заголовок к изображению.
Когда код выполняется, мы получаем результат —
MATLAB
- MATLAB — основной синтаксис
- МАТЛАБ — Команды
- MATLAB — исчисление
- MATLAB — M-файлы
- Визуализация математических выражений в MATLAB:руководство по построению 2D и 3D графиков
- MATLAB — Интеграция
- MATLAB — Полиномы
- MATLAB — Обзор
- MATLAB — Алгебра
- Руководство MATLAB:эффективное вычисление полиномиальных производных