¿Cuáles son los diferentes tipos de filtros de eliminación de ruido en MATLAB?

cámaras makea Hablaremos sobre varios filtros de reducción de ruido para eliminar estos ruidos de las imágenes digitales. 

Los tipos de filtros discutidos en este artículo se enumeran como:

  • Filtro medio
  • filtro mediano
  • filtro gaussiano  
  • filtro de salchicha

Filtro medio

  • También se denomina técnica de filtrado Box Averaging. 
  • Utiliza un núcleo y se basa en la convolución.
  • Calcula el promedio de todo un píxel y los píxeles que lo rodean y el resultado se asigna al píxel central.
  • Es una técnica muy eficaz para la eliminación del ruido de Poisson.

Sintaxis:

 k=rgb2gris(k); // Para convertir a escala de grises: 

 ruido_gaussiano = imnoise(k, ‘gaussiano’, 0, 0.01);

// Para crear la imagen corrupta con ruido gaussiano:

denoised=conv2(imagen_ruidosa, filtro_medio, ‘igual’); 

// Para realizar la convolución entre la imagen gaussian_noisy y el filtro medio:

Para mostrar la imagen: imtool( image_variable, [ ]);

Para crear la imagen corrupta con ruido poisson: poisson_noise = imnoise(k, ‘poisson’);

 salt_noise = imnoise(k, ‘sal y pimienta’, 0.05);

// Para crear la imagen corrupta con ruido de sal y pimienta:

 moteado_ruido = imnoise(k, ‘moteado’, 0.05);

// Para corromper la imagen con ruido moteado:

Ejemplo:

Matlab

% MATLAB code for Mean filter 
% read the image.
k=imread("einstein_colored.png");
  
% convert into grayscale.
k=rgb2gray(k);
  
% create image corrupted with gaussian noise.
gaussian_noise=imnoise(k,'gaussian',0,0.01);
  
% denoise the image with gaussian noise
gaussian_denoised=conv2(gaussian_noise,h,'same');
  
% display the org image.
imtool(k,[]);
  
% display the noised and denoised image.
imtool(gaussian_noise,[]);
imtool(gaussian_denoised,[]);
  
% create image corrupted with poisson noise.
poisson_noise=imnoise(k,'poisson');
  
% denoise the image with poisson noise
poisson_denoised=conv2(poisson_noise,h,'same');
  
% display the org image.
imtool(k,[]);
  
% display the noised and denoised image.
imtool(poisson_noise,[]);
imtool(poisson_denoised,[]);
  
% create image corrupted with salt & pepper noise.
salt_noise=imnoise(k,'salt & pepper', 0.05);
  
% denoise the image with salt & pepper noise
salt_denoised=conv2(salt_noise,h,'same');
  
% display the org image.
imtool(k,[]);
  
% display the noised and denoised image.
imtool(salt_noise,[]);
imtool(salt_denoised,[]);
  
% create image corrupted with speckle noise.
speckle_noise=imnoise(k,'speckle', 0.05);
  
% denoise the image with speckle noise
speckle_denoised=conv2(speckle_noise,h,'same');
  
%display the org image.
imtool(k,[]);
  
% display the noised and denoised image.
imtool(speckle_noise,[]);
imtool(speckle_denoised,[]);

Producción:

Figura: ruido gaussiano

 

Figura: ruido venenoso

 

 Figura: ruido de sal y pimienta

Figura: Ruido moteado

El filtro medio no elimina ningún ruido en particular de manera efectiva. 

Explicación del código: 

  • k=imread(“einstein_colored); Esta línea lee la imagen.
  • k=rgb2gris(k); esta línea se convierte en escala de grises.
  • ruido_gaussiano = imnoise(k, ‘gaussiano’, 0, 0.01); esta línea crea la imagen corrompida con ruido gaussiano.
  • gaussian_denoised=conv2(gaussian_noise, h, ‘igual’); esta línea realiza la convolución entre la imagen ruidosa_gaussiana y el filtro medio.
  • poisson_ruido = imnoise(k, ‘poisson’); esta línea crea la imagen corrompida con ruido poisson.
  • poisson_denoised=conv2(poisson_noise, h, ‘igual’); esta línea realiza la convolución entre la imagen de poisson_noise y el filtro medio.
  • salt_noise = imnoise(k, ‘sal y pimienta’, 0.05); esta línea crea la imagen corrupta con ruido de sal y pimienta con un 5 % del total de píxeles.
  • salt_denoised=conv2(salt_noise, h, ‘igual’); esta línea realiza la convolución entre la imagen salt_noise y el filtro medio.
  • moteado_ruido = imnoise(k, ‘moteado’, 0.05); esta línea corrompe la imagen con un ruido moteado de varianza de 0,05.
  • speckle_denoised=conv2(speckle_noise, h, ‘igual’); esta línea realiza la convolución entre la imagen speckle_noise y el filtro medio.
  • imtool(k, []); esta línea muestra la imagen original.
  • imtool(imagen_ruido, []); esta línea muestra la imagen ruidosa.
  • imtool(imagen_sin ruido, []); esta línea muestra la imagen sin ruido.

Filtro mediano

Un filtro Mediano es un filtro no lineal. Ordena los píxeles cubiertos por la ventana y los ordena en orden ascendente y luego devuelve la mediana de ellos.

Para filtro de mediana en la imagen 2D. Usamos medfit(). Toma 2 parámetros. El primero es la imagen ruidosa, el segundo es el tamaño de ventana utilizado. Por defecto, el tamaño de la ventana es [3 3].

Sintaxis:

medfilt2( imagen_ruidosa, tamaño_ventana);

Para mostrar las 2 imágenes una al lado de la otra, usamos imshowpair().imshowpair() es una función sobrecargada, tiene muchas firmas en Matlab. La palabra clave de montaje dice que 2 imágenes deben mostrarse una al lado de la otra. 

Sintaxis:

imshowpair(img1, img2, ‘montaje’); 

Ejemplo:

Matlab

% MATLaB code for Median filter
% read the image.
k=imread("einstein_colored.png");
  
% Convert into grayscale image.
k=rgb2gray(k);
  
% Create the image corrupted with gaussian noise.
gaussian_noise=imnoise(k,'gaussian',0,0.01);
  
% Create the image corrupted with poisson noise.
poisson_noise=imnoise(k,'poisson');
  
% Create the image corrupted with salt
% & pepper noise.
salt_noise=imnoise(k,'salt & pepper', 0.05);
  
% Create the image corrupted
% with speckle noise.
speckle_noise=imnoise(k,'speckle', 0.05);
  
% Get the denoised image from noised
% image of: gaussian_noise
gaussian_denoised=medfilt2(gaussian_noise, [5 5]);
  
% Get the denoised image from 
% noised image of:poisson_noise
poisson_denoised=medfilt2(poisson_noise, [5 5]);
  
% Get the denoised image from noised 
% image of: salt_noise
salt_denoised=medfilt2(salt_noise, [5 5]);
  
% Get the denoised image from noised
% image of: speckle_noise
speckle_denoised=medfilt2(speckle_noise, [5 5]);
   
 % Display the noised and denoised image 
 % side by side for Gaussian noise.
imshowpair(gaussian_noise, gaussian_denoised, 'montage');
   
 % Display the noised and denoised image
 %side by side for poisson_noise.
imshowpair(poisson_noise, poisson_denoised, 'montage');
  
% Display the noised and denoised 
% image side by side for salt_noise.
imshowpair(salt_noise, salt_denoised, 'montage');
  
% Display the noised and denoised image 
% side by side for speckle_noise.
imshowpair(speckle_noise, speckle_denoised, 'montage');

Producción: 

Figura: ruido gaussiano

Figura: ruido venenoso

Figura: ruido de sal y pimienta

Figura: Ruido moteado

El filtro mediano elimina por completo el ruido de sal y pimienta, pero introduce borrosidad en la imagen. No funciona bien con otros ruidos.

 Filtro gaussiano

Sintaxis: 

 B = imgaussfilt(A, sigma); // Para obtener la imagen filtrada usando filtro gaussiano:

// imgaussfilt() es la función incorporada en Matlab, que toma 2 parámetros.

Para mostrar la imagen con ruido y sin ruido una al lado de la otra en un solo cuadro: imshowpair(P{ruidoso, sin ruido}); title(ruidoso vs sin ruido’);

Ejemplo:

Matlab

% MATLAB code using Gaussian Filter
% read the image.
k=imread("einstein_colored.jpg");
  
% convert to grayscale.
k=rgb2gray(k);
  
% create the image corrupted with gaussian noise
gaussian_noise=imnoise(k,'gaussian',0,0.01);
  
% create the image corrupted with poisson noise
poisson_noise=imnoise(k,'poisson');
  
% create the image corrupted with salt & pepper noise
salt_noise=imnoise(k,'salt & pepper', 0.05);
  
% create the image corrupted with speckle noise
speckle_noise=imnoise(k,'speckle', 0.05);
  
% get the denoised image from gaussian_noise image.
gaussian_denoised=imgaussfilt(gaussian_noise,1);
  
% get the denoised image from poisson_noise image.
poisson_denoised=imgaussfilt(poisson_noise, 1);
  
% get the denoised image from salt_noise image.
salt_denoised=imgaussfilt(salt_noise, 1);
  
% get the denoised image from speckle_noise image.
speckle_denoised=imgaussfilt(speckle_noise, 1);
  
% display noised and denoised images side by side.
montage({gaussian_noise,gaussian_denoised }); 
title('Gaussian noise and denoised image using gaussian filter');
  
% display noised and denoised images side by side.
montage({poisson_noise,poisson_denoised}); 
title('poisson noise img vs poisson denoised img');
  
% display noised and denoised images side by side.
montage({salt_noise,salt_denoised}); 
title('salt&pepper noise img vs denoised img');
  
% display noised and denoised images side by side.
montage({speckle_noise,speckle_denoised}); 
title('speckle noise img vs speckle denoised img');

Producción:

Figura: ruido gaussiano

 

Figura: ruido venenoso

 

Figura: ruido de sal y pimienta

 

Figura: Ruido moteado

El filtro gaussiano funciona relativamente mejor con ruido gaussiano y venenoso. 

 Filtro Wiener

  • Es una técnica de filtrado de paso bajo adaptativo.
  • Filtra la imagen por píxeles.
  • Es un tipo de filtro lineal.

Sintaxis: 

J = wiener2(I,[mn],ruido)

I = imagen de entrada en escala de grises
[mn] = tamaño de la ventana vecina

La función wiener2 aplica un filtro Wiener a una imagen de forma adaptativa. El filtro Wiener se adhiere a la varianza de la imagen local. Wiener2 realiza poca suavización, siempre que la varianza sea grande. Wiener2 realiza más suavizado, siempre que la variación sea pequeña.

Sintaxis:

 k=imread(“einstein_colored); // Para leer la imagen:

 eliminado=wiener2(imagen_ruidosa, [5 5]);

//Para obtener la imagen filtrada usando el filtro Wiener

 imshowpair(P{ruidoso, sin ruido}); title(ruidoso vs sin ruido’);

//Para mostrar la imagen ruidosa y sin ruido una al lado de la otra en un solo cuadro

aquí, weiner2( ) es una función incorporada, toma 2 parámetros aquí. 1. Imagen ruidosa a filtrar2. Tamaño de la ventana vecina.

Ejemplo:

Matlab

% MATLAB code for Wiener2 filter
k=imread("einstein_colored.png");
k=rgb2gray(k);
  
% different noise with their parameters
gaussian_noise=imnoise(k,'gaussian',0,0.025);
poisson_noise=imnoise(k,'poisson');
salt_noise=imnoise(k,'salt & pepper', 0.05);
speckle_noise=imnoise(k,'speckle', 0.05);
  
% wiener filter with different noise
gaussian_denoised=wiener2(gaussian_noise, [5 5]);
poisson_denoised=wiener2(gaussian_noise, [5 5]);
salt_denoised=wiener2(salt_noise, [5 5]);
speckle_denoised=wiener2(speckle_noise, [5 5]);
   
imshowpair(gaussian_noise, gaussian_denoised, 'montage');
imshowpair(poisson_noise, poisson_denoised, 'montage');
imshowpair(salt_noise, salt_denoised, 'montage');
imshowpair(speckle_noise, speckle_denoised, 'montage');

Producción:

 Figura: ruido gaussiano

 

Figura: ruido venenoso

 

Figura: ruido de sal y pimienta

 

Figura: Ruido moteado

Explicación del código:

  • k=imread(“einstein_colored); Esta línea lee la imagen.
  • k=rgb2gris(k); esta línea se convierte en escala de grises.
  • ruido_gaussiano = imnoise(k, ‘gaussiano’, 0, 0.01); esta línea crea la imagen corrompida con ruido gaussiano.
  • poisson_ruido = imnoise(k, ‘poisson’); esta línea crea la imagen corrompida con ruido poisson.
  • salt_noise = imnoise(k, ‘sal y pimienta’, 0.05); esta línea crea la imagen corrupta con ruido de sal y pimienta con un 5 % del total de píxeles.
  • moteado_ruido = imnoise(k, ‘moteado’, 0.05); esta línea corrompe la imagen con un ruido moteado de varianza de 0,05.
  • gaussian_denoised=wiener2(gaussian_noise, [5 5]); esta línea aplica el filtro en la imagen con ruido gaussiano usando el tamaño de la ventana [5 5]
  • poisson_denoised=wiener2(gaussian_noise, [5 5]); esta línea aplica el filtro a la imagen con ruido poisson usando el tamaño de la ventana [5 5]
  • salt_denoised=wiener2(salt_noise, [5 5]); esta línea aplica el filtro en la imagen de sal y pimienta gaussiana usando el tamaño de la ventana [5 5]
  • speckle_denoised=wiener2(speckle_noise, [5 5]); esta línea aplica el filtro en la imagen con ruido moteado usando el tamaño de la ventana [5 5]
  • imshowpair(gaussian_noise, gaussian_denoised, ‘montaje’); esta línea muestra la imagen con ruido gaussiano y la imagen sin ruido una al lado de la otra en el mismo cuadro.
  • imshowpair(poisson_noise, poisson_denoised, ‘montaje’); esta línea muestra la imagen con ruido de Poisson y la imagen sin ruido una al lado de la otra en el mismo marco.
  • imshowpair(salt_noise, salt_denoised, ‘montaje’); esta línea muestra la imagen con ruido de sal y pimienta y la imagen sin ruido una al lado de la otra en el mismo cuadro.
  • imshowpair(speckle_noise, speckle_denoised, ‘montaje’); esta línea muestra la imagen con ruido moteado y la imagen sin ruido una al lado de la otra en el mismo marco.

El enfoque adaptativo a menudo produce resultados satisfactorios que el filtrado lineal. La propiedad de un filtro adaptativo es que es más selectivo que un filtro lineal comparable porque conserva los bordes y otras partes de alta frecuencia de una imagen. Hay un inconveniente de esto, Wiener2 requiere más tiempo de cálculo que otro filtrado lineal.

Cuando el ruido es ruido aditivo de potencia constante, como el ruido blanco gaussiano; wiener2 da los mejores resultados. 

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 *