¿Cómo eliminar el ruido de sal y pimienta de la imagen usando MATLAB?

Sal y pimienta El filtro mediano estándar (SMF) es uno de los filtros no lineales más populares utilizados para eliminar el ruido de sal y pimienta debido a su buen poder de eliminación de ruido y eficiencia computacional. 

Sin embargo, el principal inconveniente del SMF es que el filtro es efectivo solo para densidades de ruido bajas y, además, muestra borrosidad si el tamaño de la ventana es grande y conduce a una supresión de ruido insuficiente si el tamaño de la ventana es pequeño. Cuando el nivel de ruido es superior al 50 %, el filtro de mediana no conservará los detalles de los bordes de la imagen original. Sin embargo, es importante que durante el proceso se conserven los detalles de los bordes sin perder los componentes de alta frecuencia de los bordes de la imagen.

El enfoque ideal es aplicar la técnica de filtrado solo a los píxeles con ruido, sin cambiar los valores de los píxeles no dañados. Los filtros no lineales, como el filtro de mediana adaptable (AMF), los filtros de mediana de conmutación o basados ​​en decisiones, se pueden usar para discriminar los píxeles dañados y los no dañados, y luego aplicar la técnica de filtrado. Los píxeles ruidosos serán reemplazados por el valor medio y los píxeles no dañados se mantendrán sin cambios. AMF funciona bien con densidades de ruido bajas, ya que los píxeles corruptos que se reemplazan por los valores medios son muy pocos. A densidades de ruido más altas, se debe aumentar el tamaño de la ventana para obtener una mejor eliminación de ruido, lo que conducirá a una menor correlación entre los valores de píxeles corruptos y los valores medios de píxeles reemplazados.

¿Qué es el ruido de sal y pimienta?

Como sugiere el nombre, el color de los píxeles se vuelve completamente blanco o negro. La blanca se llama sal y la negra se llama pimienta, de ahí su nombre.

Esto es el resultado de la creación aleatoria de píxeles blancos puros o negros (altos/bajos) en la imagen. Esto es mucho menos común en los sensores de imagen de última generación, aunque la mayoría de las veces puede verse en forma de fallas en los sensores de la cámara (píxeles calientes que suelen estar en la mayor profundidad o píxeles muertos que suelen ser negros). Este tipo de ruido también se denomina ruido de impulso.

Este ruido es eliminado de manera efectiva por el filtro mediano. Los píxeles blancos o negros se comportan como valores atípicos. Se selecciona una ventana de vecindario de tamaño [mn] y se desliza sobre la imagen. Los píxeles de las imágenes que se desplazan por la ventana se ordenan en orden creciente, luego los píxeles blancos y oscuros van en el lado derecho e izquierdo de la lista ordenada respectivamente, por lo que no afecta la selección del píxel de salida. Seleccionamos el píxel mediano de la lista ordenada, por lo que la sal y la pimienta se reducen al 100% de manera efectiva, aunque se produce algo de borrosidad, lo cual está bien.

Funciones utilizadas:

  • La función incorporada imread() se usa para leer la imagen.
  • La función incorporada imtool() se usa para mostrar la imagen.
  • La función incorporada size( ) se utiliza para obtener el tamaño de la imagen.
  • La función incorporada rgb2gray( ) se utiliza para convertir RGB en una imagen en escala de grises.
  • La función incorporada imnoise() se usa para agregar ruido a la imagen.
  • La función incorporada medfilt2( ) se usa para realizar un filtro mediano en una imagen ruidosa.
  • La función incorporada pause() se usa para detener la ejecución durante segundos específicos.

Ejemplo:

Matlab

% MATLAB Code for removal of Salt and 
% Pepper noise from image.
k=imread("gfglogo.png");
RemoveSaltAndPepperNoise(k);
  
function RemoveSaltAndPepperNoise(k)
% Convert to grayscale if not.
[M,N,D]=size(k);
if(D==3)
    k=rgb2gray(k);
end
  
% Add noise to image.
kn=imnoise(k,'salt & pepper',0.03);
  
% Display original and noisy image.
imtool(k,[]);
imtool(kn,[]);
  
% Denoising.
dn=medfilt2(kn,[5,5]);
  
% Display denoised image.
imtool(dn,[]);
  
% Pause and close img windows.
pause(10);
imtool close all;
end

Producción: 

Figura 1: Imagen original

Figura 2: Imagen ruidosa

Figura 3: Imagen sin ruido

Figura 4: Imagen original

Figura 5: Imagen ruidosa

Figura 6: Imagen sin ruido

Explicación del código:

  • [M,N,D]=tamaño(k); Esta línea obtiene el tamaño de la imagen de entrada.
  • kn=imnoise(k,’sal y pimienta’,0.03); Esta línea añade un 3% de ruido en la imagen.
  • dn=medfilt2(kn,[5,5]); Esta línea aplica el filtro mediano a la imagen con ruido.
  • k=imread(“camarógrafo.png”); Esta línea lee la imagen de entrada.
  • Eliminar Ruido De Sal Y Pimienta (k); Esta línea llama a la función definida por el usuario pasándole la imagen de entrada.

Un filtro mediano es el mejor para eliminar el ruido Salt and Pepper, aunque introduce cierta borrosidad en la imagen en el área donde se captura la región no homogénea debajo de la ventana de vecindad deslizante. En ese caso, la mediana de la lista ordenada no sale exactamente del valor de píxel subyacente real. Este método reduce el ruido en un 100%.

Publicación traducida automáticamente

Artículo escrito por pintusaini y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *