Main Content

deconvreg

Deblur image using regularized filter

Description

J = deconvreg(I,psf) deconvolves image I using the regularized filter algorithm, returning deblurred image J. The assumption is that the image I was created by convolving a true image with a point-spread function (PSF), psf, and possibly by adding noise. The algorithm is a constrained optimum in the sense of least square error between the estimated and the true images under requirement of preserving image smoothness.

example

J = deconvreg(I,psf,np) specifies the additive noise power, np.

J = deconvreg(I,psf,np,lrange) specifies the range, lrange, where the search for the optimal solution is performed. The algorithm finds an optimal Lagrange multiplier lagra within the lrange range.

J = deconvreg(I,psf,np,lrange,regop) constrains the deconvolution using regularization operator regop. The default regularization operator is the Laplacian operator, to retain the image smoothness.

[J,lagra] = deconvreg(___) outputs the value of the Lagrange multiplier, lagra in addition to the restored image, J.

Examples

collapse all

Create sample image.

I = checkerboard(8);

Create PSF and use it to create a blurred and noisy version of the input image.

PSF = fspecial('gaussian',7,10);
V = .01;
BlurredNoisy = imnoise(imfilter(I,PSF),'gaussian',0,V);
NOISEPOWER = V*prod(size(I));

Deblur the image.

[J LAGRA] = deconvreg(BlurredNoisy,PSF,NOISEPOWER);

Display the various versions of the image.

subplot(221); imshow(BlurredNoisy);
title('A = Blurred and Noisy');
subplot(222); imshow(J);
title('[J LAGRA] = deconvreg(A,PSF,NP)');
subplot(223); imshow(deconvreg(BlurredNoisy,PSF,[],LAGRA/10));
title('deconvreg(A,PSF,[],0.1*LAGRA)');
subplot(224); imshow(deconvreg(BlurredNoisy,PSF,[],LAGRA*10));
title('deconvreg(A,PSF,[],10*LAGRA)');

Figure contains 4 axes objects. Hidden axes object 1 with title A = Blurred and Noisy contains an object of type image. Hidden axes object 2 with title [J LAGRA] = deconvreg(A,PSF,NP) contains an object of type image. Hidden axes object 3 with title deconvreg(A,PSF,[],0.1*LAGRA) contains an object of type image. Hidden axes object 4 with title deconvreg(A,PSF,[],10*LAGRA) contains an object of type image.

Input Arguments

collapse all

Blurry image, specified as a numeric array of any dimension.

Data Types: single | double | int16 | uint8 | uint16

PSF, specified as a numeric array. The dimensionality of psf must be less than or equal to the dimensionality of I. The size of psf must be less than or equal to the size of I in each dimension.

Data Types: double

Noise power, specified as a numeric scalar.

Data Types: double

Search range, specified as a numeric scalar or a 2-element numeric vector. If lrange is a scalar, then the algorithm assumes that lagra is equal to lrange. If you specify lagra, then the function ignores the np value

Data Types: double

Regularization operator, specified as a numeric array. The regop array dimensions must not exceed the dimensions of the image, I. Any nonsingleton dimensions must correspond to the nonsingleton dimensions of psf.

Data Types: double

Output Arguments

collapse all

Deblurred image, returned as a numeric array. J has the same data type as I.

Lagrange multiplier, returned as a numeric scalar.

Tips

  • The output image J could exhibit ringing introduced by the discrete Fourier transform used in the algorithm. To reduce the ringing, use I = edgetaper(I,psf) before calling deconvreg.

References

[1] Gonzalez, R. C., and R. E. Woods. Digital Image Processing. Addison-Wesley Publishing Company, Inc., 1992.

Version History

Introduced before R2006a