Быстро локальная Лапласова фильтрация изображений
пары "имя-значение" использования, чтобы управлять усовершенствованными аспектами фильтра.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.1783
Теперь обработайте изображение и отобразите его.
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.8246
Обработайте изображение с 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.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')
Импортируйте изображение, измените размер его и отобразите его
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')
I
— Отобразите, чтобы отфильтроватьОтобразите, чтобы отфильтровать в виде 2D полутонового изображения или 2D изображения истинного цвета.
Типы данных: single
| int8
| int16
| uint8
| uint16
sigma
— Амплитуда реберАмплитуда ребер в виде неотрицательного номера. sigma
должен быть в области значений [0, 1] для целочисленных изображений и для одного изображений, заданных в области значений [0, 1]. Для одного изображений, заданных в различной области значений [a
B
\sigma
должен также быть в области значений [a
B
].
Типы данных: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
alpha
— Сглаживание деталейСглаживание деталей в виде положительного числа. Типичные значения alpha
находятся в области значений [0.01, 10].
Значение | Описание |
---|---|
alpha меньше, чем 1 | Увеличивает детали входного изображения, эффективно улучшая локальный контраст изображения, не влияя на ребра или вводя ореолы. |
alpha больше, чем 1 | Сглаживает детали во входном изображении при сохранении четких ребер |
alpha равняйтесь 1 | Детали входного изображения оставлены без изменений. |
Типы данных: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
beta
— Динамический диапазон
(значение по умолчанию) | неотрицательный номерДинамический диапазон в виде неотрицательного номера. Типичные значения беты находятся в области значений [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'
ColorMode
— Метод раньше фильтровал изображения RGB'luminance'
(значение по умолчанию) | 'separate'
Метод раньше фильтровал изображения RGB в виде одного из следующих значений. Этот параметр не оказывает влияния на полутоновые изображения.
Значение | Описание |
---|---|
'luminance' | locallapfilt преобразует изображение входа RGB в шкалу полутонов прежде, чем отфильтровать и повторно вводит цвет после фильтрации, которая изменяет контраст входного изображения, не влияя на цвета. |
'separate' | locallapfilt фильтры каждый цветовой канал независимо. |
Типы данных: char |
string
NumIntensityLevels
— Количество выборок интенсивности'auto'
(значение по умолчанию) | положительное целое числоКоличество выборок интенсивности в динамическом диапазоне входа отображает в виде 'auto'
или положительное целое число. Более высокое количество отсчетов дает результаты ближе, чтобы потребовать локальную Лапласовую фильтрацию. Более низкий номер увеличивает скорость выполнения. Типичные значения находятся в области значений [10, 100]
. Если установлено в 'auto'
, locallapfilt
выбирает количество уровней яркости автоматически, чтобы сбалансировать качество и скорость на основе других параметров фильтра.
Типы данных: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| char
| string
B
— Фильтрованное изображениеФильтрованное изображение, возвращенное как числовой массив тот же размер и тип данных как входное изображение, A
.
[1] Париж, Сильвен, Сэмюэль В. Хэзинофф и Ян Коц. Локальные Лапласовы фильтры: осведомленная о ребре обработка изображений с Лапласовой пирамидой, Графиком Сделки ACM. 30.4 (2011): 68.
[2] Обри, Мэтью, и др. Быстрые локальные лапласовы фильтры: Теория и приложения. Транзакции на графике (TOG) ACM 33.5 (2014): 167.
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.