imdiffusefilt

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

Описание

пример

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

пример

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

Примеры

свернуть все

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

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

Figure contains an axes object. The axes object 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 object. The axes object 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 object. The axes object 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 object. The axes object 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 object. The axes object 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 полутоновый объем MRI.

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 object. The axes object with title Noisy Image (Left) vs. Anisotropic-Diffusion-Filtered Image (Right) contains an object of type image.

Вычислите счет Средства анализа качества изображения естественности (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 сопоставим с наблюдением за уменьшаемым шумом в отфильтрованном изображении.

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

свернуть все

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

Примечание

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

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

Аргументы name-value

Задайте дополнительные разделенные запятой пары 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 самых близких соседей к 2D изображениям и 26 самых близких соседей к 3-D изображениям

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

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

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

свернуть все

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

Ссылки

[1] Perona, P. и Дж. Малик. "Пробел шкалы и обнаружение ребра с помощью анизотропной диффузии". IEEE® Транзакции согласно Анализу Шаблона и Искусственному интеллекту. Издание 12, № 7, июль 1990, стр 629–639.

[2] Gerig, G., О. Каблер, Р. Кикинис и Ф. А. Джолесз. "Нелинейная анизотропная фильтрация данных MRI". Транзакции IEEE на Медицинской Обработке изображений. Издание 11, № 2, июнь 1992, стр 221–232.

Введенный в R2018a