Этот пример демонстрирует, как уменьшать шум, сопоставленный с вычислением градиентов изображений. Отобразите градиенты, используются, чтобы подсветить интересные функции в изображениях и используются во многих алгоритмах выявления признаков как обнаружение ребра/угла. Сокращение шума в расчетах градиента крайне важно для обнаружения точных функций.
Считайте изображение в рабочую область и преобразуйте ее в шкалу полутонов.
originalImage = imread('yellowlily.jpg');
originalImage = rgb2gray(originalImage);
imshow(originalImage)
Чтобы симулировать шум для этого примера, добавьте некоторый Гауссов шум в изображение.
noisyImage = imnoise(originalImage,'gaussian');
imshow(noisyImage)
Вычислите величину градиента при помощи imgradient
и imgradientxy
функции. imgradient
находит величину градиента и направление и imgradientxy
находит направленные градиенты изображений.
sobelGradient = imgradient(noisyImage);
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'); imshow(smoothGradient,[]) title('Smoothed Gradient Magnitude')
imnoise
| imgradient
| imgaussfilt
| fspecial