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

Локальная Лапласова фильтрация является в вычислительном отношении интенсивным алгоритмом. Ускорять обработку, 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.1372

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

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.6168

Обработайте изображение с 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.1359

Отметьте улучшение 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 полутонового изображения или 2D изображения истинного цвета.

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

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

Типы данных: 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. 30.4 (2011): 68.

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

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

|

Введенный в R2017b