Deblurring Images Using the Wiener Filter (Image Processing Toolbox Deblurring Demos)

来源:百度文库 编辑:神马文学网 时间:2024/04/28 13:57:42
Deblurring Images Using the Wiener Filter
Wiener deconvolution can be used effectivelywhen the frequency characteristics of the image and additive noise areknown, to at least some degree.
Deconvolution, image recovery, PSF,auto correlation functions
Key functions
deconvwnr,imfilter,imadd
Overview of Demo
The demo includes these steps:
Step 1: Read in Images
Step 2: Simulate a Motion Blur
Step 3: Restore the Blurred Image
Step 4: Simulate Additive Noise
Step 5: Restore the Blurred and Noisy Image
Step 6: Use Autocorrelation to Improve Image Restoration
Step 1: Read in Images
The example reads in an RGB image and crops it to be 256-by-256-by-3. The deconvwnr function can handle arrays of any dimension.
I = imread(‘peppers.png‘);I = I(10+[1:256],222+[1:256],:);figure;imshow(I);title(‘Original Image‘);

Step 2: Simulate a Motion Blur
Simulate a a real-life image that could be blurred e.g., by camera motion. The example creates a point-spread function, PSF, corresponding to the linear motion across 31 pixels (LEN=31), at an angle of 11 degrees (THETA=11). To simulate the blur, the filter is convolved with the image using imfilter.
LEN = 31;THETA = 11;PSF = fspecial(‘motion‘,LEN,THETA);Blurred = imfilter(I,PSF,‘circular‘,‘conv‘);figure; imshow(Blurred);title(‘Blurred‘);

Step 3: Restore the Blurred Image
To illustrate the importance of knowing thetrue PSF in deblurring, this example performs three restorations. Thefirst restoration, wnr1, uses the true PSF, created in Step 2.
wnr1 = deconvwnr(Blurred,PSF);figure;imshow(wnr1);title(‘Restored, True PSF‘);

The second restoration, wnr2, uses an estimated PSF that simulates motion twice as long as the blur length (LEN).
wnr2 = deconvwnr(Blurred,fspecial(‘motion‘,2*LEN,THETA));figure;imshow(wnr2);title(‘Restored, "Long" PSF‘);

The third restoration, wnr3, uses an estimated PSF that simulates an angle of the motion twice as steep as the blur angle (THETA).
wnr3 = deconvwnr(Blurred,fspecial(‘motion‘,LEN,2*THETA));figure;imshow(wnr3);title(‘Restored, Steep‘);

Step 4: Simulate Additive Noise
Simulate additive noise by using normally distributed random numbers and add it to the blurred image, Blurred, created in Step 2.
noise = 0.1*randn(size(I));BlurredNoisy = imadd(Blurred,im2uint8(noise));figure;imshow(BlurredNoisy);title(‘Blurred & Noisy‘);

Step 5: Restore the Blurred and Noisy Image
Restore the blurred and noisy image using aninverse filter, assuming zero-noise, and compare this to the firstresult achieved in Step 3, wnr1. The noise present in the original data is amplified significantly.
wnr4 = deconvwnr(BlurredNoisy,PSF);figure;imshow(wnr4);title(‘Inverse Filtering of Noisy Data‘);

To control the noise amplification, provide the noise-to-signal power ratio, NSR.
NSR = sum(noise(:).^2)/sum(im2double(I(:)).^2);wnr5 = deconvwnr(BlurredNoisy,PSF,NSR);figure;imshow(wnr5);title(‘Restored with NSR‘);

Vary the NSR value to affect the restoration results. The small NSR value amplifies noise.
wnr6 = deconvwnr(BlurredNoisy,PSF,NSR/2);figure;imshow(wnr6);title(‘Restored with NSR/2‘);

Step 6: Use Autocorrelation to Improve Image Restoration
To improve the restoration of the blurred and noisy images, supply the full autocorrelation function (ACF) for the noise, NCORR, and the signal, ICORR.
NP = abs(fftn(noise)).^2;NPOW = sum(NP(:))/prod(size(noise)); % noise powerNCORR = fftshift(real(ifftn(NP))); % noise ACF, centeredIP = abs(fftn(im2double(I))).^2;IPOW = sum(IP(:))/prod(size(I)); % original image powerICORR = fftshift(real(ifftn(IP))); % image ACF, centeredwnr7 = deconvwnr(BlurredNoisy,PSF,NCORR,ICORR);figure;imshow(wnr7);title(‘Restored with ACF‘);

Explore the restoration given limited statistical information: the power of the noise, NPOW, and a 1-dimensional autocorrelation function of the true image, ICORR1.
ICORR1 = ICORR(:,ceil(size(I,1)/2));wnr8 = deconvwnr(BlurredNoisy,PSF,NPOW,ICORR1);figure;imshow(wnr8);title(‘Restored with NP & 1D-ACF‘);