exponenta event banner

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 соответствует дисперсии ядра Range Gaussian двустороннего фильтра [1]. Диапазон Гаусса применяется на евклидовом расстоянии пиксельного значения от значений его соседей.

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

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

Ссылки

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

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

.
Представлен в R2018a