exponenta event banner

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.

Вычислите показатель оценки качества изображения естественности (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] Perona, P. и Дж. Малик. «Масштабно-пространственное и краевое обнаружение с использованием анизотропной диффузии». Транзакции IEEE ® по анализу шаблонов и машинному интеллекту. Том 12, № 7, июль 1990, стр. 629-639.

[2] Гериг, Г., О. Кублер, Р. Кикинис и Ф. А. Джолес. «Нелинейная анизотропная фильтрация данных МРТ». Транзакции IEEE по медицинской визуализации. Том 11, № 2, июнь 1992 г., стр. 221-232.

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