Estimación de ruido gaussiano en imagen ruidosa usando MATLAB

El ruido es algo que no se desea y dificulta la observación de los detalles de la imagen. El ruido de imagen es una variación aleatoria de la información de brillo o color en las imágenes y suele ser un aspecto del ruido electrónico. Puede ser producido por el sensor de imagen y el circuito de un escáner o una cámara digital.

 Una fluctuación eléctrica indeseable también se denomina «ruido».

Un tipo común de ruidos:

  • Ruido de Ricen: El ruido de Ricen es un tipo de artefacto inherente al proceso de adquisición de la imagen de resonancia magnética de magnitud, lo que dificulta el diagnóstico.
  • Ruido periódico: una fuente común de ruido periódico en una imagen es la interferencia eléctrica o electromecánica en algún punto del proceso de captura de la imagen. Una fotografía afectada por ruido periódico parecerá que se ha introducido una muestra repetitiva encima de la imagen original. En el dominio de la frecuencia, este tipo de ruido puede verse como picos discretos. La reducción significativa de este ruido puede lograrse mediante el uso de filtros de muesca en el dominio de la frecuencia.
  • Ruido de sal y pimienta: Este es el resultado de la creación aleatoria de píxeles blancos puros o negros (alto/bajo) 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.
  • Ruido gaussiano:  En este caso, la variante aleatoria de la señal de la imagen en torno a su valor esperado sigue la distribución gaussiana o normal. Este es el modelo de ruido máximo generalmente utilizado en el procesamiento de imágenes y describe con éxito la mayoría de los ruidos aleatorios que se encuentran dentro de la tubería de procesamiento de imágenes. Este tipo de ruido también se denomina ruido aditivo.

Ruido de sal y pimienta

Ruido periódico

ruido gaussiano

El ruido gaussiano es un ruido estadístico que tiene una función de densidad de probabilidad (PDF) igual a la de la distribución normal, que también se conoce como distribución gaussiana. En otras palabras, los valores que puede tomar el ruido tienen una distribución gaussiana. La media de este ruido es de aprox. cero. A veces se le llama ruido gaussiano de media cero.

Ejemplo:

Matlab

% MATLAB code for gaussian noise
% Reading the color image.
image=imread("img2.jfif");
 
% converting into gray.
image=rgb2gray(image);
 
% create the random gaussian noise of std=25
gaussian_noise=25*randn(size(image));
 
% display the noise
imtool(gaussian_noise,[]);
 
% display the gray image.
imtool(image,[]);

Producción: 

Ejemplo:

Matlab

% MATLAB code for demonstration of gaussian
% noisy image
% Reading the color image.
image=imread("k1.jfif");
 
% converting into gray.
image=rgb2gray(image);
 
% create the random gaussian noise of std=25
gaussian_noise=25*randn(size(image));
 
% display the gray image.
imtool(image,[]);
 
% add noise to the original image
noisy_image=double(image)+gaussian_noise;
 
% display the noisy image
imtool(noisy_image,[]);

Producción: 

 

Ahora vemos cómo estimar manualmente el nivel de ruido gaussiano en la imagen dada. Para ello en primer lugar generamos la imagen ruidosa. 

Ejemplo I: 

Matlab

% MATLAB code for estimate the level of Gaussian
% noise in the given image manually
% Reading the color image.
image=imread("cameraman.jpg");
 
% converting into gray.
image=rgb2gray(image);
 
% create the random gaussian noise of std=25
gaussian_noise=25*randn(size(image));
 
% add noise to the original image
noisy_image=double(image)+gaussian_noise;
 
% display the noisy image
imtool(noisy_image,[]);

Producción: 

El ruido gaussiano es de naturaleza aditiva. Eso significa que para crear la imagen ruidosa, simplemente agregue el ruido en la imagen original. 

Luego, recortamos la parte homogénea de la imagen y la guardamos. Ahora encuentre la desviación estándar de esa parte, nos dará la estimación del ruido gaussiano en la imagen ruidosa. 

Ejemplo II:

Matlab

% MATLAB code for homogeneous part of the image
% and find the standard deviation of that part,
% it will give us the estimation of gaussian
% noise in the noisy image.
image=imread("cameraman.jpg");
 
% create the random gaussian noise of std=25
gaussian_noise=25*randn(size(image));
 
% display the gray image.
imtool(image,[]);
 
% add noise to the original image
noisy_image=double(image)+gaussian_noise;
 
% display the noisy image
imtool(noisy_image,[]);
 
% crop the homogeneous part of the noisy image.
% display the cropped part.
imtool(cropped_image,[]);
 
% standard deviation of the noise.
std(noise(:))
 
% standard deviation of cropped homogeneous part.
std(cropped_image(:))

Producción: 

Ahora verifica el resultado. Relaciona la desviación estándar del ruido con el resultado obtenido. Si es aproximadamente igual, significa que la parte homogénea recortada fue correcta; de lo contrario, elija la parte homogénea diferente. Se requiere experiencia para encontrar la parte homogénea perfecta en la imagen. 

Es por eso que la estimación manual es un proceso que requiere mucho tiempo. A continuación, veremos cómo automatizar esto.

¿Cómo automatizar la estimación de ruido gaussiano en la imagen?

Recortaremos las partes homogéneas de la imagen y calcularemos sus desviaciones estándar. La parte homogénea de la imagen siempre dará la misma desviación estándar. Entonces, en la lista de muchas desviaciones estándar, la que ocurre con más frecuencia pertenecerá a la parte homogénea o podemos decir ruido.

Así, la idea es tomar la moda de las desviaciones estándar obtenidas por la ventana deslizante. Este es el enfoque automático.

Paso 1: crea una ventana deslizante. Deslízalo sobre la imagen y encuentra la desviación estándar de ellos.

Paso 2: Encuentra la moda.

Nota: Elija el tamaño de la ventana deslizante con cuidado. Debe elegirse con respecto al tamaño de la imagen ruidosa original. Por lo general, la ventana [5, 5] es la mejor opción.

Ejemplo:

Matlab

% MATLAB code for automate the estimation
% of gaussian noise in the image
image=imread("cameraman.jpg");
 
% create the random gaussian noise of std=25
gaussian_noise=25*randn(size(image));
 
% add noise to the original image
noisy_image=double(image)+gaussian_noise;
 
% std of noise.
std(noise(:)) %output=25.1444
 
% list of std by using a sliding filter of [5 5].
list_of_std=uint8(colfilt(noisy_image, [5 5], 'sliding', @std));
 
% print the mode of this std list.
mode(list_of_std(:))

Producción:

Aquí, la desviación estándar de la imagen ruidosa se estima en 26. 

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 *