Сокращение шума в градиентах изображений

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

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

originalImage = imread('yellowlily.jpg');
originalImage = rgb2gray(originalImage);

warning off images:initSize:adjustingMag

figure
imshow(originalImage)

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

noisyImage = imnoise(originalImage,'gaussian');

figure
imshow(noisyImage)

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

sobelGradient = imgradient(noisyImage);

figure
imshow(sobelGradient,[])
title('Sobel Gradient Magnitude')

Смотря на изображение величины градиента, ясно, что градиент изображений является очень шумным. Эффект шума может быть минимизирован путем сглаживания перед вычислением градиента. imgradient уже предлагает эту возможность небольших количеств шума при помощи оператора градиента Sobel. Операторы градиента Sobel 3x3 фильтры как показано ниже. Они могут быть сгенерированы с помощью функции fspecial.

hy = -fspecial('sobel')
hy = 3×3

    -1    -2    -1
     0     0     0
     1     2     1

hx = hy'
hx = 3×3

    -1     0     1
    -2     0     2
    -1     0     1

Фильтр hy вычисляет градиент вдоль вертикального направления при сглаживании в горизонтальном направлении. hx сглаживает в вертикальном направлении и вычисляет градиент вдоль горизонтального направления. 'Prewitt' и опции метода 'Roberts' также предусматривают эту возможность.

Даже с использованием Sobel, Робертса или операторов градиента Прюиттса, градиент изображений может быть слишком шумным. Чтобы преодолеть это, сглаживайте изображение с помощью Гауссова фильтра сглаживания прежде, чем вычислить градиенты изображений. Используйте функцию imgaussfilt, чтобы сглаживать изображение. Стандартное отклонение Гауссова фильтра отличается степень сглаживания. Поскольку сглаживание заботится о Гауссовой фильтрацией, центральные или промежуточные операторы градиента дифференцирования могут использоваться.

sigma = 2;
smoothImage = imgaussfilt(noisyImage,sigma);
smoothGradient = imgradient(smoothImage,'CentralDifference');

figure
imshow(smoothGradient,[])
title('Smoothed Gradient Magnitude')

Смотрите также

| | |

Похожие темы