exponenta event banner

locallapfilt

Быстрая локальная лапласианская фильтрация изображений

Описание

пример

B = locallapfilt(I,sigma,alpha) фильтрация изображения в градациях серого или RGB I с граничным, быстрым локальным фильтром Лапласа. sigma характеризует амплитуду кромок в I. alpha управляет сглаживанием деталей.

B = locallapfilt(I,sigma,alpha,beta) фильтрует изображение с помощью beta для управления динамическим диапазоном A.

пример

B = locallapfilt(___,Name,Value) использует пары имя-значение для управления расширенными аспектами фильтра.

Примеры

свернуть все

Импорт образа RGB

A = imread('peppers.png');

Установите параметры фильтра для увеличения деталей менее 0,4.

sigma = 0.4;
alpha = 0.5;

Использовать быструю локальную фильтрацию лапласа

B = locallapfilt(A, sigma, alpha);

Отображение исходных и отфильтрованных изображений рядом.

imshowpair(A, B, 'montage')

Figure contains an axes. The axes contains an object of type image.

Локальная лапласовская фильтрация - вычислительно интенсивный алгоритм. Чтобы ускорить обработку, locallapfilt аппроксимирует алгоритм путем дискретизации диапазона интенсивности в несколько выборок, определенных 'NumIntensityLevels«параметр». Этот параметр может использоваться для выравнивания скорости и качества.

Импортируйте изображение RGB и просмотрите его.

A = imread('peppers.png');
figure
imshow(A)
title('Original Image')

Figure contains an axes. The axes with title Original Image contains an object of type image.

Использовать sigma значение для обработки подробных данных и alpha значение для увеличения контрастности, эффективно увеличивая локальную контрастность изображения.

sigma = 0.2;
alpha = 0.3;

Использование меньшего количества выборок увеличивает скорость выполнения, но может создавать видимые артефакты, особенно в областях плоского контраста. Время выполнения функции с использованием только 20 уровней интенсивности.

t_speed = timeit(@() locallapfilt(A, sigma, alpha, 'NumIntensityLevels', 20))  
t_speed = 0.1464

Теперь обработайте изображение и отобразите его.

B_speed = locallapfilt(A, sigma, alpha, 'NumIntensityLevels', 20);
figure
imshow(B_speed)
title(['Enhanced with 20 intensity levels in ' num2str(t_speed) ' sec'])

Figure contains an axes. The axes with title Enhanced with 20 intensity levels in 0.14637 sec contains an object of type image.

Большее количество образцов дает лучшие результаты анализа за счет большего времени обработки. Время выполнения функции с использованием 100 уровней интенсивности.

t_quality = timeit(@() locallapfilt(A, sigma, alpha, 'NumIntensityLevels', 100))
t_quality = 0.6676

Обработать изображение с 100 уровнями интенсивности и отобразить его:

B_quality = locallapfilt(A, sigma, alpha, 'NumIntensityLevels', 100);
figure
imshow(B_quality)
title(['Enhancement with 100 intensity levels in ' num2str(t_quality) ' sec'])

Figure contains an axes. The axes with title Enhancement with 100 intensity levels in 0.66764 sec contains an object of type image.

Попробуйте изменить количество уровней интенсивности на собственных изображениях. Попробуйте также выровнять контраст (с alpha > 1). Вы увидите, что оптимальное количество уровней интенсивности различно для каждого изображения и зависит от alpha. По умолчанию locallapfilt использует эвристику, чтобы сбалансировать скорость и качество, но она не может предсказать наилучшее значение для каждого изображения.

Импорт цветного изображения, уменьшение его размера и отображение.

A = imread('car2.jpg');
A = imresize(A, 0.25);
figure
imshow(A)
title('Original Image')

Figure contains an axes. The axes with title Original Image contains an object of type image.

Задайте параметры фильтра, чтобы резко увеличить детали меньше 0,3 (из нормализованного диапазона от 0 до 1).

sigma = 0.3;
alpha = 0.1;

Давайте сравним два разных режима цветовой фильтрации. Обработка изображения путем фильтрации его интенсивности и фильтрации каждого цветового канала по отдельности:

B_luminance = locallapfilt(A, sigma, alpha);
B_separate  = locallapfilt(A, sigma, alpha, 'ColorMode', 'separate');

Отображение отфильтрованных изображений.

figure
imshow(B_luminance)
title('Enhanced by boosting the local luminance contrast')

Figure contains an axes. The axes with title Enhanced by boosting the local luminance contrast contains an object of type image.

figure
imshow(B_separate)
title('Enhanced by boosting the local color contrast')

Figure contains an axes. The axes with title Enhanced by boosting the local color contrast contains an object of type image.

К каждому изображению применено одинаковое увеличение контрастности, но цвета более насыщены при установке 'ColorModeКомуseparate'.

Импорт изображения. Преобразуйте изображение в плавающую точку, чтобы упростить добавление искусственного шума.

A = imread('pout.tif');
A = im2single(A);

Добавьте шум Гаусса с нулевым средним и 0,001 дисперсией.

A_noisy = imnoise(A, 'gaussian', 0, 0.001);
psnr_noisy = psnr(A_noisy, A);
fprintf('The peak signal-to-noise ratio of the noisy image is %0.4f\n', psnr_noisy);        
The peak signal-to-noise ratio of the noisy image is 30.0234

Задайте сглаживание амплитуды деталей, а затем задайте применяемое сглаживание.

sigma = 0.1;
alpha = 4.0;

Примените фильтр с поддержкой границ.

B = locallapfilt(A_noisy, sigma, alpha);
psnr_denoised = psnr(B, A);
fprintf('The peak signal-to-noise ratio of the denoised image is %0.4f\n', psnr_denoised);
The peak signal-to-noise ratio of the denoised image is 32.2016

Обратите внимание на улучшение PSNR изображения.

Отображение всех трех изображений рядом. Обратите внимание, что детали сглажены, а резкие изменения интенсивности вдоль кромок не изменяются.

figure
subplot(1,3,1), imshow(A), title('Original')
subplot(1,3,2), imshow(A_noisy), title('Noisy')
subplot(1,3,3), imshow(B), title('Denoised')

Figure contains 3 axes. Axes 1 with title Original contains an object of type image. Axes 2 with title Noisy contains an object of type image. Axes 3 with title Denoised contains an object of type image.

Импорт изображения, изменение его размеров и отображение

A = imread('car1.jpg');
A = imresize(A, 0.25);
figure
imshow(A)
title('Original Image')

Figure contains an axes. The axes with title Original Image contains an object of type image.

Автомобиль грязный и покрыт разметкой. Попробуем стереть пыль и разметку на теле. Задайте сглаживание амплитуды деталей и задайте большое сглаживание.

sigma = 0.2;
alpha = 5.0;

При сглаживании (alpha > 1), фильтр дает высококачественные результаты с небольшим количеством уровней интенсивности. Установка небольшого количества уровней интенсивности для более быстрой обработки изображения.

numLevels = 16;

Примените фильтр.

B = locallapfilt(A, sigma, alpha, 'NumIntensityLevels', numLevels);

Выведите на экран «чистый» автомобиль.

figure
imshow(B)
title('After smoothing details')

Figure contains an axes. The axes with title After smoothing details contains an object of type image.

Входные аргументы

свернуть все

Изображение для фильтрации, указанное как 2-D изображение в оттенках серого или 2-D изображение в цветном цвете.

Типы данных: single | int8 | int16 | uint8 | uint16

Амплитуда рёбер, заданная как неотрицательное число. sigma должно находиться в диапазоне [0, 1] для целых изображений и для отдельных изображений, определенных в диапазоне [0, 1]. Для отдельных изображений, определенных в другом диапазоне [a, b], sigma также должно быть в диапазоне [a, b].

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Сглаживание деталей, указанное как положительное число. Типичные значения alpha находятся в диапазоне [0,01, 10].

СтоимостьОписание
alpha меньше, чем 1Увеличивает детализацию входного изображения, эффективно повышая локальную контрастность изображения, не влияя на края и не вводя ореолы.
alpha больше, чем 1Сглаживание деталей на входном изображении с сохранением четких краев
alpha равно 1Детали входного изображения остаются без изменений.

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Динамический диапазон, заданный как неотрицательное число. Типичные значения бета-версии находятся в диапазоне [0, 5]. beta влияет на динамический диапазон A.

СтоимостьОписание
beta меньше, чем 1Уменьшает амплитуду краев изображения, эффективно сжимая динамический диапазон без влияния на детали.
beta больше, чем 1Расширяет динамический диапазон изображения.
beta равно 1Динамический диапазон изображения остается неизменным. Это значение по умолчанию.

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Аргументы пары «имя-значение»

Укажите дополнительные пары, разделенные запятыми Name,Value аргументы. Name является именем аргумента и Value - соответствующее значение. Name должен отображаться внутри кавычек. Можно указать несколько аргументов пары имен и значений в любом порядке как Name1,Value1,...,NameN,ValueN.

Пример: 'ColorMode','separate'

Метод фильтрации изображений RGB, указанный как одно из следующих значений. Этот параметр не влияет на изображения в градациях серого.

СтоимостьОписание
'luminance'locallapfilt преобразует входное RGB-изображение в градации серого перед фильтрацией и повторно вводит цвет после фильтрации, что изменяет контраст входного изображения, не влияя на цвета.
'separate'locallapfilt фильтрует каждый цветовой канал независимо.

Типы данных: char | string

Количество выборок интенсивности в динамическом диапазоне входного изображения, указанное как 'auto' или положительное целое число. Большее число выборок дает результаты, более близкие к точной локальной лапласовской фильтрации. Меньшее число увеличивает скорость выполнения. Типовые значения находятся в диапазоне [10, 100]. Если установлено значение 'auto', locallapfilt выбирает количество уровней интенсивности автоматически, чтобы сбалансировать качество и скорость на основе других параметров фильтра.

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | char | string

Выходные аргументы

свернуть все

Отфильтрованное изображение, возвращаемое в виде числового массива того же размера и типа данных, что и входное изображение, A.

Ссылки

[1] Париж, Сильвен, Самуэль В. Хасинофф и Ян Кауц. Локальные лапласианские фильтры: обработка изображения с учетом границ с помощью лапласианской пирамиды, ACM Trans. Graph. 30.4 (2011): 68.

[2] Обри, Матье и др. Быстрые локальные лапласианские фильтры: Теория и приложения. Транзакции ACM по графике (TOG) 33.5 (2014): 167.

См. также

|

Представлен в R2016b