¿Cómo eliminar el ruido de la imagen digital en el dominio de la frecuencia usando MATLAB?

El ruido se define como píxeles aberrantes. En otras palabras, el ruido se compone de píxeles que no representan correctamente el color o la exposición de la escena. En este artículo, veremos cómo eliminar el ruido de las imágenes digitales en el dominio de la frecuencia.

Hay dos tipos de fuentes de ruido.

  • Adquisición de imágen
  • Transmisión de imágenes

En el procesamiento de imágenes digitales, se encuentran disponibles diferentes tipos de modelos de ruido, a saber:

  • Modelos de ruido espacialmente independientes
    • ruido gaussiano
    • Ruido Rayleigh
    • Ruido Erlang (Gamma)
    • ruido exponencial
    • Ruido de impulso (sal y pimienta)
  • Un modelo de ruido espacialmente dependiente
    • Ruido periódico

Ahora vemos la eliminación del ruido gaussiano de las imágenes.  

Pasos:

  • Lea la imagen sin ruido.
  • Cree el ruido gaussiano blanco y agréguelo a la imagen.
  • Calcule la Transformada de Fourier de la imagen ruidosa.
  • Cree el filtro de paso bajo Butterworth.
  • Tome la multiplicación por elementos de BLPF y FT de una imagen ruidosa.
  • Calcule el FT inverso del resultado anterior.
  • Muestre la imagen sin ruido junto con las imágenes intermedias.

Función utilizada:

  • 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 rgb2gray( ) se utiliza para convertir una imagen RGB en una imagen en escala de grises.
  • La función incorporada randn() se usa para crear ruido aleatorio de desviación estándar especificada.
  • La función incorporada double() se usa para convertir un valor entero al formato doble.
  • La función incorporada fft2() se utiliza para realizar la Transformación de Fourier 2-D.
  • La función incorporada fftshift() se usa para mover las esquinas hacia el centro.
  • La función integrada meshgrid() se utiliza para crear la cuadrícula 2-D que contiene las coordenadas de los vectores.
  • La función incorporada ifft2() se utiliza para realizar la transformación inversa de Fourier.
  • La función incorporada sqrt() se usa para calcular la raíz cuadrada de las entradas dadas.

Ejemplo:

Matlab

%MATLAB CODE For
% REMOVAL OF GAUSSIAN
% NOISE IN FREQUENCY DOMAIN.
 
function RemoveGaussianNoise(img)
 
%convert into grayscale if not.
[M,N,D]=size(img)
if(D==3)
    k=rgb2gray(img);
end
 
%display image.
imtool(k, []);
 
%define noise.
n=15*randn(size(k));
kn=double(k)+n;
 
%display noised image.
imtool(kn,[]);
 
%Convert into Frequency domain.
ft=fft2(kn);
 
%display centered FT spectrum.
imtool(abs(log(fftshift(ft))),[]);
 
% MATLAB Code | Butterworth Low Pass Filter    
% Assign the order value
n = 2; % one can change this value accordingly 
 
% Assign Cut-off Frequency
D0 = 20; % one can change this value accordingly
   
% Designing filter
u = 0:(M-1);
v = 0:(N-1);
idx = find(u > M/2);
u(idx) = u(idx) - M;
idy = find(v > N/2);
v(idy) = v(idy) - N;
   
% MATLAB library function meshgrid(v, u) returns
% 2D grid which contains the coordinates of vectors
% v and u. Matrix V with each row is a copy of v
% and matrix U with each column is a copy of u
[V, U] = meshgrid(v, u);
   
% Calculating Euclidean Distance
D = sqrt(U.^2 + V.^2);
   
% determining the filtering mask
H = 1./(1 + (D./D0).^(2*n));
 
%Display BLPF.
imtool(fftshift(H),[]);
 
%Perform element wise multiplication.
res=H.*ft;
 
%take inverse FT.
dn=ifft2(res);
 
%Display denoised image.
imtool(dn,[]);
end
 
%%%%%UTILITY CODE%%%%
img=imread("cameraman.png");
RemoveGaussianNoise(img);

Producción:

Figura 1: imagen de entrada original

Figura 2: Imagen ruidosa

Figura 3: espectro centrado en la transformada de Fourier de la imagen ruidosa.

Figura 5: Imagen sin ruido

Figura 6: Imagen sin ruido

El ruido gaussiano se elimina mejor en el dominio espacial utilizando el filtro gaussiano y el filtro NLM. Podemos intentar reducir el ruido gaussiano en el dominio de la frecuencia usando Butterworth LPF pero el resultado no es muy efectivo. Reduce el ruido hasta cierto punto, pero a costa de la borrosidad. La imagen resultante no tiene ruido, pero se presenta borrosa en la imagen, lo que dificulta la observación de detalles más finos en la imagen.

Ahora vemos la eliminación del ruido periódico de Image en el dominio de la frecuencia. Entonces, el ruido que está presente en el patrón repetitivo se llama ruido periódico. Se ve como líneas en la imagen. La fuente de ruido periódico es la interferencia eléctrica o electromecánica durante la captura de la imagen. El ruido periódico después de convertirlo al dominio de la frecuencia se ve como picos discretos en la imagen. Para eliminar este tipo de ruido, tenemos que usar filtros de muesca en el dominio de la frecuencia. Después de aplicar filtros de muesca, aún queda algo de ruido en las esquinas.

Pasos:

  • Lee la imagen.
  • Calcule la transformada de Fourier de la imagen.
  • Obtenga el espectro FT centrado y la pantalla.
  • Detecte el patrón de ruido periódico en la imagen FT.
  • Bloquee el patrón de ruido periódico en la imagen FT.
  • Convierta la imagen de nuevo al dominio espacial desde el dominio de frecuencia.
  • Calcule la transformada inversa de Fourier de la imagen.
  • Muestre la imagen.

Sintaxis:

  • 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 fft2() se utiliza para realizar la transformada de Fourier de la imagen en 2D.
  • La función incorporada fftshift() se utiliza para obtener un espectro FT centrado.
  • La función incorporada ifft2() se utiliza para realizar la transformada inversa de Fourier.
  • La función incorporada ifftshift() se usa para descentrar el espectro FT.
  • abs() función incorporada se utiliza para el valor absoluto.
  • La función incorporada log() se usa para obtener el logaritmo del valor.

Ejemplo:

Matlab

% MATLAB CODE
%REMOVAL OF PERIODIC NOISE FROM IMAGE.
 
function RemovePeriodicNoise(img)
% take FT of image and
% shift corners to center.
Fourier_transform=fft2(img);
Centered_shifted=fftshift(Fourier_transform);
 
% Block the noise spectrum.
Centered_shifted(1:125,110:130)=0;%for man
Centered_shifted(190:320,110:130)=0;%diagonals
 
Centered_shifted(120:x,1:100)=0;%for lady with hat.
Centered_shifted(1:100,120:y)=0;%diagonals.
 
% inverse shift center to
% cornter and take Inverse FT.
Inverse_shifted=ifftshift(Centered_shifted);
Output_image=ifft2(Inverse_shifted);
 
% display input image.
original_input_image=img;
imtool(original_input_image,[]);
 
% display FT spectrum.
Centered_shifted_spectrum=abs(log(fftshift(Fourier_transform)));
imtool(Centered_shifted_spectrum,[]);
 
% display denoised FT.
Noise_free_FT=log(Centered_shifted);
imtool(Noise_free_FT,[]);
 
% display output image.
imtool(abs(Output_image),[]);
end
 
%%%UTILITY CODE%%%
k=imread("periodic_noise1.png");
RemovePeriodicNoise(k);

Producción:

Figura 7: Imagen de entrada y salida 

El ruido periódico no se puede eliminar de las imágenes digitales en el dominio espacial. Esta es la única forma de eliminar el ruido periódico convirtiendo la imagen al dominio de la frecuencia. La única condición es que necesitamos detectar el patrón de ruido en la transformada de Fourier para obtener una imagen de calidad.

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 *