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 ¿En qué consiste el filtrado de imágenes en el dominio espacial?.
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)
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)
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)
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')
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');
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');
Consulte también
imfilter
| imguidedfilter
| imgaussfilt
| locallapfilt
| nlfilter
| imbilatfilt