Deblur image using Wiener filter

`J = deconvwnr(I,PSF,NSR)`

J = deconvwnr(I,PSF,NCORR,ICORR)

`J = deconvwnr(I,PSF,NSR)`

deconvolves
image `I`

using the Wiener filter algorithm, returning
deblurred image `J`

. Image `I`

can
be an N-dimensional array. `PSF`

is the point-spread
function with which `I`

was convolved. `NSR`

is
the noise-to-signal power ratio of the additive noise. `NSR`

can
be a scalar or a spectral-domain array of the same size as `I`

.
Specifying 0 for the `NSR`

is equivalent to creating
an ideal inverse filter.

The algorithm is optimal in a sense of least mean square error between the estimated and the true images.

`J = deconvwnr(I,PSF,NCORR,ICORR)`

deconvolves
image `I`

, where `NCORR`

is the
autocorrelation function of the noise and `ICORR`

is
the autocorrelation function of the original image. `NCORR`

and `ICORR`

can
be of any size or dimension, not exceeding the original image. If `NCORR`

or `ICORR`

are
N-dimensional arrays, the values correspond to the autocorrelation
within each dimension. If `NCORR`

or `ICORR`

are
vectors, and `PSF`

is also a vector, the values represent
the autocorrelation function in the first dimension. If `PSF`

is
an array, the 1-D autocorrelation function is extrapolated by symmetry
to all non-singleton dimensions of `PSF`

. If `NCORR`

or `ICORR`

is
a scalar, this value represents the power of the noise of the image.

I = edgetaper(I,PSF) `deconvwnr` . |

`I`

can be of class `uint8`

, `uint16`

, `int16`

, `single`

,
or `double`

. Other inputs have to be of class `double`

. `J`

has
the same class as `I`

.

Create a noisy, blurry image and then apply the `deconvwnr`

filter
to deblur it.

Display the original image.

I = im2double(imread('cameraman.tif')); imshow(I); title('Original Image (courtesy of MIT)');

Simulate a motion blur.

LEN = 21; THETA = 11; PSF = fspecial('motion', LEN, THETA); blurred = imfilter(I, PSF, 'conv', 'circular'); figure, imshow(blurred)

Simulate additive noise.

noise_mean = 0; noise_var = 0.0001; blurred_noisy = imnoise(blurred, 'gaussian', ... noise_mean, noise_var); figure, imshow(blurred_noisy) title('Simulate Blur and Noise')

Try restoration assuming no noise.

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

Try restoration using a better estimate of the noise-to-signal-power ratio.

estimated_nsr = noise_var / var(I(:)); wnr3 = deconvwnr(blurred_noisy, PSF, estimated_nsr); figure, imshow(wnr3) title('Restoration of Blurred, Noisy Image Using Estimated NSR');

"Digital Image Processing", R. C. Gonzalez & R. E. Woods, Addison-Wesley Publishing Company, Inc., 1992.

`deconvblind`

| `deconvlucy`

| `deconvreg`

| `edgetaper`

| `otf2psf`

| `padarray`

| `psf2otf`

Was this topic helpful?