locallapfilt

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

Синтаксис

B = locallapfilt(I,sigma,alpha)
B = locallapfilt(I,sigma,alpha,beta)
B = locallapfilt(___,Name,Value)

Описание

пример

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')

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

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

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

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

sigma = 0.2;
alpha = 0.3;

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

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

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

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

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

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

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

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

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

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

A = imread('car2.jpg');
A = imresize(A, 0.25);
figure
imshow(A)
title('Original 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
imshow(B_separate)
title('Enhanced by boosting the local color contrast')

Равный объем контрастного улучшения был применен к каждому изображению, но цвета более насыщаются когда установка '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.3065

Отметьте улучшение 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')

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

A = imread('car1.jpg');
A = imresize(A, 0.25);
figure
imshow(A)
title('Original 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')

Входные параметры

свернуть все

Отобразите, чтобы отфильтровать, заданный как 2D полутоновое изображение размера m-by-n или 2D цветное изображение размера m-by-n-by-3.

Типы данных: 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 должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN.

Пример:

Метод раньше фильтровал изображения 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

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

свернуть все

Фильтрованное изображение, возвращенное как числовой массив тот же размер и класс как входное изображение.

Ссылки

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

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

Смотрите также

|

Введенный в R2017b