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')
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')
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')
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')
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)')
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)')
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')
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)');
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)');
Consulte también
deconvwnr
| fspecial
| imfilter
| imnoise