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

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

Прочтите изображение в рабочую область и преобразуйте его в полутоновый.

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

The hy фильтр вычисляет градиент вдоль вертикального направления при сглаживании в горизонтальном направлении. hx сглаживает в вертикальном направлении и вычисляет градиент в горизонтальном направлении. The '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.

См. также

| | |

Похожие темы

Для просмотра документации необходимо авторизоваться на сайте