imbilatfilt

Двусторонняя фильтрация изображений с Гауссовыми ядрами

Описание

J = imbilatfilt(I) применяет сохраняющий край Гауссов двусторонний фильтр к изображению в полутоновом или RGB, I.

пример

J = imbilatfilt(I,degreeOfSmoothing) задает величину сглаживания. Когда degreeOfSmoothing является маленьким значением, imbilatfilt сглаживает области с малым отклонением (равномерные области), но не сглаживает области с большим отклонением, такие как сильные ребра. Когда значение degreeOfSmoothing увеличивает, imbilatfilt сглаживает как однородные области, так и кварталы с большей отклонение.

J = imbilatfilt(I,degreeOfSmoothing,spatialSigma) также задает стандартное отклонение, spatialSigma, пространственного Гауссова сглаживающего ядра. Большие значения spatialSigma увеличение вклада более удаленных соседних пикселей, эффективно увеличивая размер окрестности.

J = imbilatfilt(___,Name,Value) использует пары "имя-значение", чтобы изменить поведение двустороннего фильтра.

Примеры

свернуть все

Чтение и отображение полутонового изображения. Наблюдайте горизонтальный программный продукт полоски в область неба.

I = imread('cameraman.tif');
imshow(I)

Figure contains an axes. The axes contains an object of type image.

Осмотрите закрашенную фигуру изображения из небесной области. Вычислите отклонение закрашенной фигуры, которая аппроксимирует отклонение шума.

patch = imcrop(I,[170, 35, 50 50]);
imshow(patch)

Figure contains an axes. The axes contains an object of type image.

patchVar = std2(patch)^2;

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

DoS = 2*patchVar;
J = imbilatfilt(I,DoS);
imshow(J)
title(['Degree of Smoothing: ',num2str(DoS)])

Figure contains an axes. The axes with title Degree of Smoothing: 51.9395 contains an object of type image.

Программный продукт стриации уменьшается, но не устраняется. Чтобы улучшить сглаживание, увеличьте значение spatialSigma на 2 так что отдаленные соседние пиксели вносят больший вклад в Гауссовское сглаживающее ядро. Это эффективно увеличивает пространственную протяженность двустороннего фильтра.

K = imbilatfilt(I,DoS,2);
imshow(K)
title(['Degree of Smoothing: ',num2str(DoS),', Spatial Sigma: 2'])

Figure contains an axes. The axes with title Degree of Smoothing: 51.9395, Spatial Sigma: 2 contains an object of type image.

Программный продукт стриации в небе успешно удаляется. Была сохранена резкость сильных ребер, таких как силуэт человека, и текстурированных областей, таких как трава на переднем плане изображения.

Чтение изображения RGB.

imRGB = imread('coloredChips.png');
imshow(imRGB)

Figure contains an axes. The axes contains an object of type image.

Преобразуйте изображение в цветовое пространство L * a * b, так что двусторонний фильтр сглаживает восприимчиво похожие цвета.

imLAB = rgb2lab(imRGB);

Извлеките закрашенную фигуру L * a * b, который не содержит острых ребер. Вычислите отклонение евклидова расстояния от источника в пространстве L * a * b.

patch = imcrop(imLAB,[34,71,60,55]);
patchSq = patch.^2;
edist = sqrt(sum(patchSq,3));
patchVar = std2(edist).^2;

Фильтрация изображения в цветовом пространстве L * a * b * осуществляется с помощью двусторонней фильтрации. Установите DegreeOfSmoothing значение, которое должно быть выше, чем отклонение закрашенной фигуры.

DoS = 2*patchVar;
smoothedLAB = imbilatfilt(imLAB,DoS);

Преобразуйте изображение назад в цветовое пространство RGB и отобразите сглаженное изображение.

smoothedRBG = lab2rgb(smoothedLAB,'Out','uint8');
montage({imRGB,smoothedRBG})
title(['Original Image vs. Filtered Image with Degree of Smoothing: ',num2str(DoS)])

Figure contains an axes. The axes with title Original Image vs. Filtered Image with Degree of Smoothing: 7.9771 contains an object of type image.

Цвета чипов и черной ручки кажутся более равномерными, но горизонтальные зерна в таблице все же видны. Увеличьте пространственную протяженность фильтра так, чтобы эффективная окрестность фильтра охватывала пространство между горизонтальными зернами (это расстояние составляет приблизительно семь пикселей). Также увеличьте DegreeOfSmoothing сглаживать эти области более агрессивно.

DoS2 = 4*patchVar;
smoothedLAB2 = imbilatfilt(imLAB,DoS2,7);
smoothedRBG2 = lab2rgb(smoothedLAB2,'Out','uint8');
montage({imRGB,smoothedRBG2})
title(['Original Image vs. Filtered Image with Degree of Smoothing: ',num2str(DoS),' and Spatial Sigma: 7'])

Figure contains an axes. The axes with title Original Image vs. Filtered Image with Degree of Smoothing: 7.9771 and Spatial Sigma: 7 contains an object of type image.

Цвет деревянной таблицы более однороден с большей соседностью и большей степенью сглаживания. Сохранено ребро острота сколов и ручки.

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

свернуть все

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

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

Степень сглаживания, заданная как положительное число. Значение по умолчанию degreeOfSmoothing зависит от типа данных изображения I, и вычисляется как 0,01 * diff (getrangefromclass(I)). ^ 2. Для примера степенью сглаживания по умолчанию является 650.25 для изображений типа данных uint8, и по умолчанию это 0.01 для изображений типа данных double со значениями пикселей в области значений [0, 1].

Стандартное отклонение пространственного Гауссова сглаживающего ядра, заданное как положительное число.

Аргументы в виде пар имя-значение

Задайте необязательные разделенные разделенными запятой парами Name,Value аргументы. Name - имя аргумента и Value - соответствующее значение. Name должны находиться внутри кавычек. Можно задать несколько аргументов в виде пар имен и значений в любом порядке Name1,Value1,...,NameN,ValueN.

Пример: imbilatfilt(I,'NeighborhoodSize',7) выполняет двустороннюю фильтрацию на изображении I использование района 7 на 7 пикселей

Размер окрестности, заданный как разделенная разделенными запятой парами, состоящая из 'NeighborhoodSize' и нечетное положительное целое число. По умолчанию размер района равен 2 * ceil (2 * SpatialSigma)+1 пиксели

Пример: 'NeighborhoodSize',7

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Заполнение, заданное как разделенная разделенными запятой парами, состоящая из 'Padding' и одно из этих значений.

ЗначениеОписание
'replicate'Входные значения массива за пределами массива приняты равными ближайшему значению границы массива.
'symmetric'

Входные значения массива за пределами массива вычисляются зеркальным отражением массива через границу массива.

числовой скаляр, xВходным значениям изображений за пределами изображения присваивается значение x.

Пример: 'Padding','symmetric'

Пример: 'Padding',128

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | char | string

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

свернуть все

Отфильтрованное изображение, возвращенное в виде числового массива того же размера и типа данных, что и входа изображение I.

Совет

  • Значение degreeOfSmoothing соответствует отклонению Гауссова ядра области значений двустороннего фильтра [1]. Гауссова Область значений применяется на евклидовом расстоянии пиксельного значения от значений его соседей.

  • Чтобы сглаживать восприятие близких цветов изображения RGB, преобразуйте изображение в пространство CIE L * a * b с помощьюrgb2lab перед применением двустороннего фильтра. Чтобы просмотреть результаты, преобразуйте отфильтрованное изображение в RGB с помощью lab2rgb.

  • Увеличение spatialSigma увеличивает NeighborhoodSize, что увеличивает время выполнения фильтра. Можно задать меньшее NeighborhoodSize торговать точностью для более быстрого времени выполнения.

Ссылки

[1] Томази, К. и Р. Мандухи. Двусторонняя фильтрация серых и цветных изображений. Материалы IEEE 1998 года® Международная конференция по компьютерному зрению. Бомбей, Индия. Ян 1998, с. 836-846.

Расширенные возможности

.
Введенный в R2018a