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)
Para simular ruido para este ejemplo, añada ruido gaussiano a la imagen.
noisyImage = imnoise(originalImage,"gaussian");
imshow(noisyImage)
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")
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")
Consulte también
imnoise
| imgradient
| imgaussfilt
| fspecial