MATLAB: фильтр Лапласиана Гаусса для детекции границ
Гауссов фильтр — это линейный фильтр, используемый в обработке изображений для размытия или сглаживания изображений. Он назван в честь гауссовой функции, которая используется для определения формы фильтра. Гауссов фильтр обычно используется для уменьшения шума и деталей в изображении, делая его более подходящим для дальнейшей обработки или анализа.
Фильтр Лапласиана Гаусса (LoG) — это популярный фильтр улучшения изображения и детекции границ, используемый в обработке изображений. Это комбинация двух фильтров: гауссового фильтра и фильтра Лапласиана. Гауссов фильтр используется для сглаживания изображения и уменьшения шума, в то время как фильтр Лапласиана используется для обнаружения границ.
Фильтр Лапласиана Гаусса полезен для обнаружения границ на разных масштабах в изображении. Изменяя стандартное отклонение гауссового фильтра, вы можете контролировать масштаб, на котором обнаруживаются границы. Меньшие стандартные отклонения обнаруживают более мелкие детали, в то время как большие стандартные отклонения обнаруживают более широкие признаки.
Давайте посмотрим несколько примеров для фильтра Лапласиана Гаусса.
Пример 1: Использование функции fspecial()
Функция fspecial() используется для создания гауссового фильтра, а затем вычисляется Лапласиан этого Гаусса для создания LoG-фильтра. Однако фильтр Лапласиана ожидает, что гауссов фильтр будет типа double.
Код следующий:
% Чтение изображения
img = imread('peppers.jpg');
% Преобразование изображения в оттенки серого
if size(img, 3) == 3
img_gray = rgb2gray(img);
else
img_gray = img;
end
% Создание гауссового фильтра
sigma = 2; % Стандартное отклонение гауссового фильтра
hsize = 2 * ceil(3 * sigma) + 1; % Размер фильтра
gaussian_filter = fspecial('gaussian', hsize, sigma);
% Создание фильтра Лапласиана Гаусса
log_filter = fspecial('log', hsize, sigma);
% Применение LoG фильтра к изображению
filtered_img = imfilter(double(img_gray), log_filter, 'conv', 'replicate');
% Отображение оригинального и отфильтрованного изображений
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; % Стандартное отклонение гауссового фильтра
hsize = 2 * ceil(3 * sigma) + 1; % Размер фильтра
gaussian_filter = fspecial('gaussian', hsize, sigma);
Код выше создает гауссов фильтр. Здесь мы определяем стандартное отклонение 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' указывает, что фильтр должен применяться с использованием свертки, а опция 'replicate' указывает, как границы изображения должны обрабатываться при фильтрации.
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 перед отображением.
При выполнении кода вывод получается следующим:
(оригинал и результат LoG-фильтрации рядом)
Пример 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 с 'laplacian' как типом фильтра. Функция 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 добавляет заголовок к фигуре изображения.
При выполнении кода вывод получается:
(входное изображение, результат Лапласиана, результат LoG)
MATLAB
- Матрицы в MATLAB: Создание, индексация, удаление строк/столбцов и операции
- Векторы в MATLAB: Строковые, столбцовые и основные операции
- MATLAB для математического анализа: пределы, производные, интегралы
- Типы данных в MATLAB: Полное руководство с примерами
- MATLAB M-файлы: Скрипты и функции для мощного программирования
- MATLAB 2-D обратное косинусное преобразование: восстановление изображений из частотных данных
- Мастерство MATLAB OOP: создание надежного, повторно используемого кода с классами и объектами
- Циклы в MATLAB: while, for, вложенные циклы и операторы управления
- Основные команды MATLAB для эффективных вычислений
- Числа в MATLAB: типы, хранение и преобразование