Main Content

La traducción de esta página aún no se ha actualizado a la versión más reciente. Haga clic aquí para ver la última versión en inglés.

Reducir el ruido en gradientes de imagen

Este ejemplo muestra cómo reducir el ruido asociado al cálculo de gradientes de imagen. Los gradientes de imagen se utilizan para destacar características interesantes en las imágenes y se usan en varios algoritmos de detección de características como la detección de esquinas y bordes. Reducir el ruido en los cálculos de gradientes es crucial para detectar características con precisión.

Lea una imagen en el espacio de trabajo y conviértala a escala de grises.

originalImage = imread("yellowlily.jpg");
originalImage = im2gray(originalImage);

imshow(originalImage)

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

Para simular ruido para este ejemplo, añada ruido gaussiano a la imagen.

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

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

Calcule la magnitud del gradiente utilizando las funciones imgradient e imgradientxy. imgradient obtiene la magnitud y la dirección del gradiente, e imgradientxy obtiene los gradientes de imagen direccionales.

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

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

Observando la magnitud del gradiente, queda claro que el gradiente de la imagen tiene mucho ruido. El efecto del ruido se puede minimizar suavizando el cálculo del gradiente. imgradient ya ofrece esta funcionalidad para pequeñas cantidades de ruido utilizando el operador de gradiente de Sobel. Los operadores de gradiente de Sobel son filtros de 3 por 3, tal y como se muestra a continuación. Se pueden generar utilizando la función 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

El filtro hy calcula el gradiente en dirección vertical a la vez que suaviza en dirección horizontal. hx suaviza en dirección vertical y calcula el gradiente en dirección horizontal. Las opciones de método "Prewitt" y "Roberts" también permiten esta funcionalidad.

Incluso con el uso de los operadores de gradiente de Sobel, Roberts o Prewitt, el gradiente de imagen puede tener mucho ruido. Para solucionarlo, suavice la imagen utilizando un filtro de suavizado gaussiano antes de calcular los gradientes de las imágenes. Utilice la función imgaussfilt para suavizar la imagen. La desviación estándar del filtrado gaussiano varía el alcance del suavizado. Dado que el suavizado lo realiza el filtro gaussiano, se pueden utilizar operadores de gradiente de diferenciación central o intermedia.

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

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

Consulte también

| | |

Temas relacionados