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)

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

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

patchVar = std2(patch)^2;

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

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

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

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

Артефакт бороздчатости в небе успешно удален. Резкость сильных ребер, таких как контур человека и текстурированные области, такие как трава на переднем плане изображения, была сохранена.

Считайте изображение RGB.

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

Преобразуйте изображение в цветовое пространство 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)])

Цвета микросхем и черного пера кажутся более универсальными, но горизонтальные мелкие частицы в таблице все еще отображаются. Увеличьте пространственную степень фильтра так, чтобы эффективное окружение фильтра охватило пробел между горизонтальными мелкими частицами (это расстояние составляет приблизительно семь пикселей). Также увеличьте 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'])

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

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

свернуть все

Отобразите, чтобы отфильтровать в виде 2D полутонового изображения размера m-by-n или 2D цветное изображение размера 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 'pixels'

Пример: '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] Tomasi, C. и Р. Мандачи. "Двусторонняя Фильтрация для Серых и Цветных изображений". Продолжения Международной конференции 1998 IEEE® по вопросам Компьютерного зрения. Бомбей, Индия. Январь 1998, стр 836–846.

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

Введенный в R2018a