locallapfilt

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

Описание

пример

B = locallapfilt(I,sigma,alpha) фильтрует изображение в полутоновом или RGB I с краевым, быстрым локальным Laplacian фильтром. 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;

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

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'to' 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. График. 30.4 (2011): 68.

[2] Aubry, Mathieu, et al. Быстрые локальные лапласовые фильтры: Теория и приложения. Транзакции ACM по графике (TOG) 33.5 (2014): 167.

См. также

|

Введенный в R2016b