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.

Eliminación de ruido

Las imágenes digitales son propensas a varios tipos de ruido. El ruido es el resultado de errores en el proceso de adquisición de la imagen que dan lugar a valores de los píxeles que no reflejan las verdaderas intensidades de la escena real. Hay varias formas en las que se puede introducir ruido en una imagen, dependiendo de cómo se cree la imagen. Por ejemplo:

  • Si la imagen se escanea a partir de una fotografía hecha en película, el grano de la película es una fuente de ruido. El ruido también puede ser el resultado de daños en la película, o que lo introduzca el propio escáner.

  • Si la imagen se adquiere directamente en formato digital, el mecanismo de recogida de datos (como un detector CCD) puede introducir ruido.

  • La transmisión electrónica de los datos de la imagen puede introducir ruido.

Para simular los efectos de algunos de los problemas enumerados anteriormente, la toolbox proporciona la función imnoise, que puede utilizar para añadir varios tipos de ruido a una imagen. Los ejemplos de esta sección utilizan esta función.

Eliminar ruido mediante el filtrado lineal

Puede utilizar el filtrado lineal para eliminar ciertos tipos de ruido. Algunos filtros, como los promediadores o los gaussianos, son apropiados para este fin. Por ejemplo, un filtro promediador es útil para eliminar el ruido de grano de una fotografía. Como cada píxel se ajusta a la media de los píxeles de su entorno, se reducen las variaciones locales causadas por el grano.

Para obtener más información sobre el filtrado lineal con imfilter, consulte What Is Image Filtering in the Spatial Domain?.

Eliminar ruido mediante un filtro promediador y un filtro de mediana

Este ejemplo muestra cómo eliminar el ruido de sal y pimienta de una imagen utilizando un filtro promediador y un filtro de mediana para poder comparar los resultados. Estos dos tipos de filtrado fijan el valor del píxel de salida en la media de los valores de los píxeles en el entorno del píxel de entrada correspondiente. Sin embargo, con el filtrado de la mediana, el valor de un píxel de salida está determinado por la mediana de los píxeles del entorno, en lugar de la media. La mediana es mucho menos sensible que la media a los valores extremos (llamados valores atípicos). Por tanto, el filtrado de mediana es más capaz de eliminar estos valores atípicos sin reducir la nitidez de la imagen.

Nota: El filtrado de mediana es un caso específico del filtrado de orden estadístico, también conocido como filtrado de rango. Para obtener información sobre el filtrado de orden estadístico, consulte la página de referencia de la función ordfilt2.

Lea una imagen en el espacio de trabajo y muéstrela.

I = imread('eight.tif');
figure
imshow(I)

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

Para este ejemplo, añada ruido de sal y pimienta a la imagen. Este tipo de ruido consiste en que píxeles aleatorios se establecen en blanco o negro (los extremos del intervalo de datos).

J = imnoise(I,'salt & pepper',0.02);
figure
imshow(J)

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

Filtre la imagen con ruido, J, con un filtro promediador y muestre los resultados. El ejemplo utiliza un entorno de 3 por 3.

Kaverage = filter2(fspecial('average',3),J)/255;
figure
imshow(Kaverage)

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

Ahora utilice un filtro de mediana para filtrar la imagen con ruido, J. El ejemplo también utiliza un entorno de 3 por 3. Muestre las dos imágenes filtradas una al lado de la otra para compararlas. Observe que medfilt2 hace un mejor trabajo de eliminación de ruido, con menos desenfoque de los bordes de las monedas.

Kmedian = medfilt2(J);
imshowpair(Kaverage,Kmedian,'montage')

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

Eliminar ruido mediante el filtrado adaptativo

Este ejemplo muestra cómo usar la función wiener2 para aplicar un filtro de Wiener (un tipo de filtro lineal) a una imagen de forma adaptativa. El filtro de Wiener se adapta a la varianza local de la imagen. Cuando la varianza es grande, wiener2 realiza poco suavizado. Cuando la varianza es pequeña, wiener2 realiza un mayor suavizado.

Este enfoque suele producir mejores resultados que el filtrado lineal. El filtro adaptativo es más selectivo que un filtro lineal comparable, al conservar los bordes y otras partes de alta frecuencia de una imagen. Además, no hay tareas de diseño; la función wiener2 se encarga de todos los cálculos preliminares e implementa el filtro para una imagen de entrada. wiener2, sin embargo, requiere más tiempo de cálculo que el filtrado lineal.

wiener2 funciona mejor cuando el ruido es un ruido aditivo de potencia constante ("blanco"), como el ruido gaussiano. En el ejemplo siguiente se aplica wiener2 a una imagen de Saturno con ruido gaussiano añadido.

Lea la imagen en el espacio de trabajo.

RGB = imread('saturn.png');

Convierta la imagen de color verdadero a escala de grises.

I = im2gray(RGB);

Añada ruido blanco gaussiano a la imagen.

J = imnoise(I,'gaussian',0,0.025);

Muestre la imagen con ruido. Dado que la imagen es bastante grande, muestre solo una parte de la misma.

imshow(J(600:1000,1:600));
title('Portion of the Image with Added Gaussian Noise');

Figure contains an axes object. The axes object with title Portion of the Image with Added Gaussian Noise contains an object of type image.

Elimine el ruido con la función wiener2.

K = wiener2(J,[5 5]);

Muestre la imagen procesada. Dado que la imagen es bastante grande, muestre solo una parte de la misma.

figure
imshow(K(600:1000,1:600));
title('Portion of the Image with Noise Removed by Wiener Filter');

Figure contains an axes object. The axes object with title Portion of the Image with Noise Removed by Wiener Filter contains an object of type image.

Consulte también

| | | | |

Temas relacionados