Técnicas de eliminación de ruido en el procesamiento de imágenes digitales utilizando MATLAB

La eliminación de ruido es el proceso de eliminar o reducir el ruido o los artefactos de la imagen. La eliminación de ruido hace que la imagen sea más clara y nos permite ver claramente los detalles más finos de la imagen. No cambia el brillo o el contraste de la imagen directamente, pero debido a la eliminación de artefactos, la imagen final puede verse más brillante.

En este proceso de eliminación de ruido, elegimos un cuadro 2-D y lo deslizamos sobre la imagen. La intensidad de todos y cada uno de los píxeles de la imagen original se recalcula utilizando el cuadro. 

Técnica de promedio de caja:

El promedio de caja se puede definir como la intensidad del píxel correspondiente que se reemplazaría con el promedio de todas las intensidades de sus píxeles vecinos abarcados por la caja. Este es un operador de punto. 

Ahora, supongamos que el tamaño de la caja es de 5 por 5. Abarcará más de 25 píxeles a la vez. El valor de intensidad del píxel central (operador de punto en el píxel central) será el promedio de intensidades de todos los 25 píxeles que cubre la caja de 5 por 5 dimensiones. 

Ejemplo:

Matlab

% MATLAB code for Box averaging
% Read the cameraman image.
k1=imread("cameraman.jpg");
 
% create the noise of standard deviation 25
n=25*randn(size(k1));
 
%add the noise to the image=noisy_image
k2=double(k1)+n;
 
%display the noisy image.
imtool(k2,[]);
 
%averaging using [5 5] sliding box.
k3=uint8(colfilt(k2,[5 5], 'sliding', @mean));
 
%display the denoised image.
imtool(k3,[]);
 
%averaging using [9 9] sliding box.
k4=uint8(colfilt(k2, [9 9], 'sliding', @mean));
 
%display the denoised image.
imtool(k4,[]);

Producción:

Pero hay algunas desventajas de esta técnica:

  • Reduce el ruido en una pequeña medida pero introduce borrosidad en la imagen.
  • Si aumentamos el tamaño del cuadro, la suavidad y la borrosidad de la imagen aumentan proporcionalmente.

 Técnicas de convolución simple y gaussiana:

La convolución hace un trabajo similar al promedio de caja. En la técnica de convolución, definimos la caja y la inicializamos con los valores. Para fines de eliminación de ruido, inicializamos el cuadro de modo que se comporte como un cuadro de promedio. La caja de convolución se llama núcleo. El núcleo se desliza sobre la imagen. El valor del píxel central se reemplaza por el promedio de todos los píxeles vecinos abarcados por el kernel. 

funcionamiento del kernel: los valores del kernel y el píxel respectivo se multiplicaron y todos esos productos se agregaron para dar el resultado final. Si nuestro kernel tiene un tamaño de [5 5], inicializamos el kernel con 1/25. Cuando todos los píxeles se multiplicaron por 1/25 y se sumaron, el resultado final es solo el promedio de todos esos 25 píxeles sobre los que se coloca el núcleo en un momento determinado.

La ventaja de la convolución sobre el promedio de caja es que a veces el filtro de convolución (núcleo) es separable y dividimos el núcleo más grande en dos o más partes. Reduce las operaciones computacionales a realizar. 

Ejemplo:

Matlab

% MATLAB code for denoised imaged using
% convolution filter technique
% Read the cameraman image.
k1=imread("cameraman.jpg");
 
% create the noise.
n=25*randn(size(k1));
 
% add the noise to the image = noisy_image
k2=double(k1)+n;
 
% create the kernel of size [5 5]
h1=ones(5,5)*1/25;
 
% convulse the image with the kernel.
k3=uint8(conv2(k2, h1,'same'));
 
% display the denoised image.
imtool(k3,[]);
 
% create the kernel of size [9 9]
h2=ones(9,9)*1/81;
 
% convulse the image with the kernel.
k4=conv2(k2,h2,'same');
 
% display the denoised image.
imtool(k4,[]);

Producción:

Un inconveniente de esta técnica es:

  • También introduce la borrosidad en la imagen además de reducir el ruido.
  • La imagen se vuelve borrosa en los bordes debido al resultado promedio incorrecto.

Filtro gaussiano: 

Este núcleo o filtro tiene más ponderación para el píxel central. Mientras se promedia en los bordes, se le da más peso al píxel bordeado y, por lo tanto, nos da un valor de píxel cercano al real, por lo tanto, reduce la borrosidad en los bordes. 

Ten en cuenta que si aumentamos el tamaño del filtro, aumenta el grado de eliminación de ruido y también el desenfoque. Pero la borrosidad es significativamente menor en comparación con otras técnicas de promedio.

Ejemplo:

Matlab

% MATLAB code for denoised using
% Gaussian Filter:
k1=imread("cameraman.jpg");
 
% create the noise.
n=25*randn(size(k1));
 
% add the noise to the image = noisy_image
k2=double(k1)+n;
 
%create and print the kernel of size [3 3]
h1=fspecial('gaussian',3,1);
h1
 
% convulse the image with the kernel.
k3=uint8(conv2(k2, h1,'same'));
 
% display the denoised image.
imtool(k3,[]);
 
% create and print the kernel of size [20 20]
h2=fspecial('gaussian',20,1);
h2
 
% convulse the image with the kernel.
k4=uint8(conv2(k2,h2,'same'));
 
% display the denoised image.
imtool(k4,[]);

Producción:

Eliminación de ruido promediando imágenes ruidosas:

Esta es una técnica muy simple e interesante de eliminación de ruido. El requisito para utilizar esta técnica es que:

  • Deberíamos tener 2 o más imágenes de la misma escena u objeto.
  • El ruido del dispositivo de captura de imágenes debe corregirse. Por ejemplo, la cámara tiene un ruido de una desviación estándar de 20.

Laboral:

Recoge las múltiples imágenes capturadas por el mismo dispositivo y del mismo objeto. Simplemente tome el promedio de todas las imágenes para obtener la imagen resultante. La intensidad de cada píxel será reemplazada por el promedio de las intensidades del píxel correspondiente en todas esas imágenes recopiladas. Esta técnica reducirá el ruido y también no habrá borrosidad en la imagen final. 

Digamos que tenemos n imágenes. Entonces el ruido se reducirá en el grado: (standard deviation of noise)/sqrt(n)

Cuantas más imágenes numéricas se utilicen para promediar, más clara será la imagen que obtendremos después de eliminar el ruido.

Ejemplo:

Matlab

% MATLAB code for denoising by averaging
% Read the cameraman image: original image.
I=imread("cameraman.jpg");
 
% Create noise-1 of std=40
n1=40*randn(size(I));
 
% Create first noisy_image by adding the noise to orig image.
I1=double(I)+n1;
 
% Create noise-2 of std=40
n2=40*randn(size(I));
 
% Create 2nd noisy_image by adding the noise to orig image.
I2=double(I)+n2;
 
% Create noise-3 of std=40
n3=40*randn(size(I));
 
% Create 3rd noisy_image by adding the noise to orig image.
I3=double(I)+n3;
 
% Create noise-4 of std=40
n4=40*randn(size(I));
 
% Create 4th noisy_image by adding the noise to orig image.
I4=double(I)+n4;
 
% Create noise-5 of std=40
n5=40*randn(size(I));
 
% Create 5th noisy_image by adding the noise to orig image.
I5=double(I)+n5;
 
% Now lets see denoising.
d1=(I1+I2)/2;
d2=(I1+I2+I3)/3;
d3=(I1+I2+I3+I4)/4;
d4=(I1+I2+I3+I4+I5)/5;
 
%display each denoised image with original noisy image.
imtool(I1,[]);
imtool(d1,[]);
imtool(d2,[]);
imtool(d3,[]);
imtool(d4,[]);

Producción: 

Noisy_image y Denoised-1

Noisy_image y Denoised-2

Noisy_image y Denoised-3

Noisy_image y Denoised-4

La calidad aumenta directamente si tomamos más imágenes para promediar.

 

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 *