Этот пример демонстрирует, как уменьшить шум, связанный с вычислением градиентов изображения. Градиенты изображений используются для выделения интересных функций в изображениях и используются во многих алгоритмах обнаружения функций, таких как обнаружение ребер/углов. Уменьшение шума в расчетах очень важно для обнаружения точных функций.
Прочтите изображение в рабочую область и преобразуйте его в полутоновый.
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
уже предлагает эту возможность для небольшого количества шума при помощи оператора градиента Собеля. Операторы градиента Собеля представляют собой фильтры 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
The hy
фильтр вычисляет градиент вдоль вертикального направления при сглаживании в горизонтальном направлении. hx
сглаживает в вертикальном направлении и вычисляет градиент в горизонтальном направлении. The 'Prewitt'
и 'Roberts'
опции метода также обеспечивают эту возможность.
Даже с использованием градиентных операторов Собеля, Робертса или Преуиттса, градиент изображения может быть слишком шумным. Чтобы преодолеть это, сглаживайте изображение с помощью фильтра Гауссова сглаживания перед вычислением градиентов изображения. Используйте imgaussfilt
функция для сглаживания изображения. Стандартное отклонение Гауссова фильтра изменяет степень сглаживания. Поскольку сглаживание обеспечивается Гауссовой фильтрацией, могут использоваться центральные или промежуточные операторы градиента дифференцирования.
sigma = 2; smoothImage = imgaussfilt(noisyImage,sigma); smoothGradient = imgradient(smoothImage,'CentralDifference'); imshow(smoothGradient,[]) title('Smoothed Gradient Magnitude')
fspecial
| imgaussfilt
| imgradient
| imnoise