Main Content

La traducción de esta página aún no se ha actualizado a la versión más reciente. Haga clic aquí para ver la última versión en inglés.

Enfocar imágenes borrosas utilizando un filtro de Wiener

Este ejemplo muestra cómo utilizar la desconvolución de Wiener para enfocar imágenes borrosas. La desconvolución de Wiener se puede utilizar de forma efectiva cuando se conocen las características de frecuencia de la imagen y el ruido aditivo, al menos hasta cierto punto.

Leer una imagen nítida

Lea y muestre una imagen nítida que no esté desenfocada ni tenga ruido.

Ioriginal = imread('cameraman.tif');
imshow(Ioriginal)
title('Original Image')

Figure contains an axes object. The axes object with title Original Image contains an object of type image.

Simular y restaurar desenfoque de movimiento sin ruido

Simule una imagen desenfocada que pueda ser resultado del movimiento de la cámara. Primero, cree una función de dispersión puntual, PSF, utilizando la función fspecial y especificando movimiento lineal en 21 píxeles en un ángulo de 11 grados. Después, convolucione la función de dispersión puntual con la imagen utilizando imfilter.

La imagen original tiene el tipo de datos uint8. Si pasa una imagen uint8 a imfilter, la función cuantificará la salida para devolver otra imagen uint8. Para reducir los errores de cuantificación, convierta la imagen a double antes de llamar a imfilter.

PSF = fspecial('motion',21,11);
Idouble = im2double(Ioriginal);
blurred = imfilter(Idouble,PSF,'conv','circular');
imshow(blurred)
title('Blurred Image')

Figure contains an axes object. The axes object with title Blurred Image contains an object of type image.

Restablezca la imagen desenfocada utilizando la función deconvwnr. La imagen desenfocada no tiene ruido, así que puede omitir el argumento de entrada señal-ruido (NSR).

wnr1 = deconvwnr(blurred,PSF);
imshow(wnr1)
title('Restored Blurred Image')

Figure contains an axes object. The axes object with title Restored Blurred Image contains an object of type image.

Simular y restaurar desenfoque de movimiento y ruido gaussiano

Añada ruido gaussiano de media cero a la imagen desenfocada utilizando la función imnoise.

noise_mean = 0;
noise_var = 0.0001;
blurred_noisy = imnoise(blurred,'gaussian',noise_mean,noise_var);
imshow(blurred_noisy)
title('Blurred and Noisy Image')

Figure contains an axes object. The axes object with title Blurred and Noisy Image contains an object of type image.

Intente restaurar la imagen con ruido desenfocada utilizando deconvwnr sin proporcionar una estimación del ruido. De forma predeterminada, el filtro de restauración de Wiener asume que el NSR es igual a 0. En este caso, el filtro de restauración de Wiener es equivalente a un filtro inverso ideal, que puede ser extremadamente sensible al ruido en la imagen de entrada.

En este ejemplo, el ruido en esta restauración se amplifica hasta el punto de que se pierde el contenido de la imagen.

wnr2 = deconvwnr(blurred_noisy,PSF);
imshow(wnr2)
title('Restoration of Blurred Noisy Image (NSR = 0)')

Figure contains an axes object. The axes object with title Restoration of Blurred Noisy Image (NSR = 0) contains an object of type image.

Intente restaurar la imagen con ruido desenfocada utilizando deconvwnr con un valor más realista del ruido estimado.

signal_var = var(Idouble(:));
NSR = noise_var / signal_var;
wnr3 = deconvwnr(blurred_noisy,PSF,NSR);
imshow(wnr3)
title('Restoration of Blurred Noisy Image (Estimated NSR)')

Figure contains an axes object. The axes object with title Restoration of Blurred Noisy Image (Estimated NSR) contains an object of type image.

Simular y restaurar desenfoque de movimiento y ruido de cuantificación de 8 bits

Incluso una cantidad de ruido visualmente imperceptible puede afectar al resultado. Una fuente de ruido son los errores de cuantificación que se deben a trabajar con imágenes en representación uint8. Antes, para evitar errores de cuantificación, este ejemplo simuló una imagen desenfocada a partir de una imagen nítida en el tipo de datos double. Ahora, para explorar el efecto de los errores de cuantificación en la restauración, simule una imagen desenfocada a partir de la imagen nítida en el tipo de datos uint8 original.

blurred_quantized = imfilter(Ioriginal,PSF,'conv','circular');
imshow(blurred_quantized)
title('Blurred Quantized Image')

Figure contains an axes object. The axes object with title Blurred Quantized Image contains an object of type image.

Intente restaurar la imagen cuantificada desenfocada utilizando deconvwnr sin proporcionar una estimación del ruido. Aunque no se ha añadido ruido adicional, esta restauración está degradada en comparación con la restauración de la imagen desenfocada en el tipo de datos double.

wnr4 = deconvwnr(blurred_quantized,PSF);
imshow(wnr4)
title('Restoration of Blurred Quantized Image (NSR = 0)');

Figure contains an axes object. The axes object with title Restoration of Blurred Quantized Image (NSR = 0) contains an object of type image.

Intente restaurar la imagen cuantificada desenfocada utilizando deconvwnr con un valor más realista del ruido estimado.

uniform_quantization_var = (1/256)^2 / 12;
signal_var = var(Idouble(:));
NSR = uniform_quantization_var / signal_var;
wnr5 = deconvwnr(blurred_quantized,PSF,NSR);
imshow(wnr5)
title('Restoration of Blurred Quantized Image (Estimated NSR)');

Figure contains an axes object. The axes object with title Restoration of Blurred Quantized Image (Estimated NSR) contains an object of type image.

Consulte también

| | |

Temas relacionados