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