Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Industrial programming >> MATLAB

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

  1. Матрицы в MATLAB: Создание, индексация, удаление строк/столбцов и операции
  2. Векторы в MATLAB: Строковые, столбцовые и основные операции
  3. MATLAB для математического анализа: пределы, производные, интегралы
  4. Типы данных в MATLAB: Полное руководство с примерами
  5. MATLAB M-файлы: Скрипты и функции для мощного программирования
  6. MATLAB 2-D обратное косинусное преобразование: восстановление изображений из частотных данных
  7. Мастерство MATLAB OOP: создание надежного, повторно используемого кода с классами и объектами
  8. Циклы в MATLAB: while, for, вложенные циклы и операторы управления
  9. Основные команды MATLAB для эффективных вычислений
  10. Числа в MATLAB: типы, хранение и преобразование