imbilatfilt

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

Синтаксис

J = imbilatfilt(I)
J = imbilatfilt(I,degreeOfSmoothing)
J = imbilatfilt(I,degreeOfSmoothing,spatialSigma)
J = imbilatfilt(___,Name,Value)

Описание

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'])

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

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

Введенный в R2018a