exponenta event banner

Уменьшение шума в градиентах изображения

В этом примере показано, как уменьшить шум, связанный с вычислением градиентов изображения. Градиенты изображения используются для выделения интересных признаков на изображениях и используются во многих алгоритмах обнаружения признаков, таких как обнаружение краев/углов. Уменьшение шума в градиентных вычислениях имеет решающее значение для обнаружения точных признаков.

Чтение изображения в рабочую область и преобразование его в градации серого.

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

imshow(originalImage)

Figure contains an axes. The axes contains an object of type image.

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

noisyImage = imnoise(originalImage,'gaussian');
imshow(noisyImage)

Figure contains an axes. The axes contains an object of type image.

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

sobelGradient = imgradient(noisyImage);
imshow(sobelGradient,[])
title('Sobel Gradient Magnitude')

Figure contains an axes. The axes with title Sobel Gradient Magnitude contains an object of type image.

Глядя на изображение величины градиента, ясно, что градиент изображения очень шумный. Эффект шума можно минимизировать путем сглаживания перед вычислением градиента. imgradient уже предлагает эту возможность для небольших количеств шума с помощью оператора градиента Собеля. Операторы градиента Собеля представляют собой фильтры 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' Опции метода также обеспечивают эту возможность.

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

sigma = 2;
smoothImage = imgaussfilt(noisyImage,sigma);
smoothGradient = imgradient(smoothImage,'CentralDifference');
imshow(smoothGradient,[])
title('Smoothed Gradient Magnitude')

Figure contains an axes. The axes with title Smoothed Gradient Magnitude contains an object of type image.

См. также

| | |

Связанные темы