imdiffusefilt

Анизотропная диффузионная фильтрация изображений

Описание

пример

J = imdiffusefilt(I) применяет анизотропную диффузионную фильтрацию к изображению I и возвращает результат в J.

пример

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

Примеры

свернуть все

Прочтите изображение в рабочую область и отобразите его.

I = imread('cameraman.tif');
imshow(I)
title('Original Image')

Figure contains an axes. The axes with title Original Image contains an object of type image.

Сглаживайте изображение с помощью анизотропной диффузии. Для сравнения также сглаживайте изображение с помощью Гауссова размытия. Отрегулируйте стандартное отклонение sigma из Гауссова сглаживающего ядра так, что текстурированные области, такие как трава, сглаживаются одинаковым количеством для обоих методов.

Idiffusion = imdiffusefilt(I);
sigma = 1.2;
Igaussian = imgaussfilt(I,sigma);

Отображение результатов.

montage({Idiffusion,Igaussian},'ThumbnailSize',[])
title('Smoothing Using Anisotropic Diffusion (Left) vs. Gaussian Blurring (Right)')

Figure contains an axes. The axes with title Smoothing Using Anisotropic Diffusion (Left) vs. Gaussian Blurring (Right) contains an object of type image.

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

Прочтите полутоновое изображение, затем примените к нему сильный Гауссов шум. Отобразите шумное изображение.

I = imread('pout.tif');
noisyImage = imnoise(I,'gaussian',0,0.005);
imshow(noisyImage)
title('Noisy Image')

Figure contains an axes. The axes with title Noisy Image contains an object of type image.

Вычислите индекс структурного подобия (SSIM), чтобы измерить качество шумного изображения. Чем ближе значение SSIM к 1, тем лучше изображение согласуется с бесшумным эталонным изображением.

n = ssim(I,noisyImage);
disp(['The SSIM value of the noisy image is ',num2str(n),'.'])
The SSIM value of the noisy image is 0.26556.

Уменьшите шум с помощью анизотропной диффузии. Сначала попробуйте параметры по умолчанию для анизотропного диффузионного фильтра и отобразите результат.

B = imdiffusefilt(noisyImage);
imshow(B)
title('Anisotropic Diffusion with Default Parameters')

Figure contains an axes. The axes with title Anisotropic Diffusion with Default Parameters contains an object of type image.

nB = ssim(I,B);
disp(['The SSIM value using default anisotropic diffusion is ',num2str(nB),'.'])
The SSIM value using default anisotropic diffusion is 0.65665.

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

[gradThresh,numIter] = imdiffuseest(noisyImage,'ConductionMethod','quadratic');
C = imdiffusefilt(noisyImage,'ConductionMethod','quadratic', ...
    'GradientThreshold',gradThresh,'NumberOfIterations',numIter);
imshow(C)
title('Anisotropic Diffusion with Estimated Parameters')

Figure contains an axes. The axes with title Anisotropic Diffusion with Estimated Parameters contains an object of type image.

nC = ssim(I,C);
disp(['The SSIM value using quadratic anisotropic diffusion is ',num2str(nC),'.'])
The SSIM value using quadratic anisotropic diffusion is 0.88135.

Шум менее очевиден в полученном изображении. Значение SSIM, которое ближе к 1, подтверждает, что качество изображения улучшилось.

Загрузите шумный 3-D полутоновый объем МРТ.

load mristack

Выполните краевое шумоподавление по объему с помощью анизотропной диффузии. Чтобы предотвратить чрезмерное сглаживание низкоконтрастных функций в мозге, уменьшите количество итераций от числа по умолчанию 5. Компромисс заключается в том, что меньше шума удаляется.

diffusedImage = imdiffusefilt(mristack,'NumberOfIterations',3);

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

imshowpair(mristack(:,:,10),diffusedImage(:,:,10),'montage')
title('Noisy Image (Left) vs. Anisotropic-Diffusion-Filtered Image (Right)')

Figure contains an axes. The axes with title Noisy Image (Left) vs. Anisotropic-Diffusion-Filtered Image (Right) contains an object of type image.

Вычислите счет Naturalness Image Evaluator (NIQE) по всем срезам объема. NIQE- счета обеспечивает количественную меру качества изображения, которая не требует ссылки изображения. Более низкие счета NIQE отражают лучшее качество восприятия изображения.

nframes = size(mristack,3);
m = 0;
d = 0;
for i = 1:nframes
    m = m + niqe(mristack(:,:,i));
    d = d + niqe(diffusedImage(:,:,i));
end
mAvg = m/nframes;
dAvg = d/nframes;
disp(['The NIQE score of the noisy volume is ',num2str(mAvg),'.'])
The NIQE score of the noisy volume is 5.7794.
disp(['The NIQE score using anisotropic diffusion is ',num2str(dAvg),'.'])
The NIQE score using anisotropic diffusion is 4.1391.

Счет NIQE согласуется с наблюдением уменьшенного шума в фильтрованном изображении.

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

свернуть все

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

Примечание

Чтобы применить анизотропную диффузионную фильтрацию к цветному изображению, используйте imdiffusefilt на каждом цветовом канале независимо.

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

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

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

Пример: imdiffusefilt(I,'NumberOfIterations',4,'Connectivity','minimal') выполняет анизотропную диффузию на изображении I, с использованием 4 итераций и минимальной связности.

Порог градиента, заданное как разделенная разделенными запятой парами, состоящая из 'GradientThreshold' и числовой скаляр или числовой вектор длины NumberOfIterations. Значение GradientThreshold управляет процессом проводимости путем классификации значений градиента как фактического ребра или как шума. Увеличение значения GradientThreshold сглаживает изображение больше. Значение по умолчанию является 10% от динамической области значений изображения. Вы можете использовать imdiffuseest функция для оценки подходящего значения GradientThreshold.

Количество итераций для использования в процессе диффузии, заданное как разделенная разделенными запятой парами, состоящая из 'NumberOfIterations' и положительное целое число. Вы можете использовать imdiffuseest функция для оценки подходящего значения NumberOfIterations.

Связь пикселя с его соседями, заданная как разделенная разделенными запятой парами, состоящая из 'Connectivity' и одно из следующих значений:

  • 'maximal' - Рассматривает 8 ближайших соседей для 2-D изображений и 26 ближайших соседей для 3-D изображений

  • 'minimal' - Рассматривает 4 ближайших соседа для 2-D изображений и 6 ближайших соседей для 3-D изображений

Метод проводимости, заданный как разделенная разделенными запятой парами, состоящая из 'ConductionMethod' и 'exponential' или 'quadratic'. Экспоненциальная диффузия благоприятствует высококонтрастным ребрам по сравнению с низкоконтрастными ребрами. Квадратичная диффузия благоприятствует широким областям по сравнению с небольшими областями.

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

свернуть все

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

Ссылки

[1] Перона, П. и Й. Малик. «Масштабное пространство и краевое обнаружение с помощью анизотропной диффузии». IEEE® Транзакции по анализу шаблонов и машинному анализу. Том 12, № 7, июль 1990, стр. 629-639.

[2] Gerig, G., O. Kubler, R. Kikinis, and F. A. Jolesz. Нелинейная анизотропная фильтрация данных МРТ. Транзакции IEEE по медицинской визуализации. Том 11, № 2, июнь 1992, стр. 221-232.

Введенный в R2018a