Быстро локальная Лапласова фильтрация изображений
пары "имя-значение" использования, чтобы управлять усовершенствованными аспектами фильтра. Имена аргумента могут быть сокращены.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.1404
Теперь обработайте изображение и отобразите его.
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.6732
Обработайте изображение с 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')
I
— Отобразите, чтобы отфильтроватьОтобразите, чтобы отфильтровать, заданный как 2D полутоновое изображение размера m-by-n или 2D цветное изображение размера m-by-n-by-3.
Типы данных: 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'
— Метод раньше фильтровал изображения 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
— Фильтрованное изображениеФильтрованное изображение, возвращенное как числовой массив тот же размер и класс как входное изображение.
[1] Париж, Сильвен, Сэмюэль В. Хэзинофф и Ян Коц. Локальные Лапласовы фильтры: осведомленная о ребре обработка изображений с Лапласовой пирамидой, Графиком Сделки ACM. 30.4 (2011): 68.
[2] Обри, Мэтью, и др. Быстрые локальные лапласовы фильтры: Теория и приложения. Транзакции на графике (TOG) ACM 33.5 (2014): 167.
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.