wiener_filter ( Image, Psf, NoisefilteredImage : RestoredImage : : )

Image restoration by Wiener filtering.

wiener_filter produces an estimate of the original image (= image without noise and blurring) by minimizing the mean square error between estimated and original image. wiener_filter can be used to restore images corrupted by noise and/or blurring (e.g. motion blur, atmospheric turbulence or out-of-focus blur). Method and realisation of this restoration technique bases on the following model: The corrupted image is interpreted as the output of a (disturbed) linear system. Functionality of a linear system is determined by its specific impuls response. So the convolution of original image and impulse response results in the corrupted image. The specific impulse response describes image acquisition and the occured degradations. In the presence of additive noise an additional noise term must be considered. So the corrupted image can be modeled as the result of

          [convolution(impulse_response,original_image)] + noise_term
The noise term encloses two different terms describing image-dependent and image-independent noise. According to this model, two terms must be known for restoration by Wiener filtering:
          1. degradation-specific impulse response 
          2. noise term 
So wiener_filter needs a smoothed version of the input image to estimate the power spectral density of noise and original image. One can use one of the smoothing HORUS-filters (e.g. min_max_filter)to get this version. wiener_filter needs further the impulse response that describes the specific degradation. This impulse response (represented in spatial domain) must fit into an image of HORUS image type FLOAT_IMAGE. There exist two HORUS-operators for generation of an impulse response for motion blur and out-of-focus (see gen_psf_motion, gen_psf_defocus). The representation of the impulse response presumes the origin in the upper left corner. This results in the following disposition of an NxM sized image:
first rectangle ("upper left"):
(image coordinates xb = 0..(N/2)-1, yb = 0..(M/2)-1)
   - conforms to the fourth quadrant of the Cartesian coordinate system, 
     encloses values of the impulse response 
     at position x = 0..N/2 and y = 0..-M/2
second rectangle ("upper right"):
(image coordinates xb= N/2..N-1, yb = 0..(M/2)-1)
   - conforms to the third quadrant of the Cartesian coordinate system, 
     encloses values of the impulse response 
     at position x = -N/2..-1 and y = -1..-M/2
third rectangle ("lower left"):
(image coordinates xb = 0..(N/2)-1, yb = M/2..M-1)
   - conforms to the first quadrant of the Cartesian coordinate system, 
     encloses values of the impulse response 
     at position x = 1..N/2 and y = M/2..0
fourth rectangle ("lower right"):
(image coordinates xb = N/2..N-1, yb = M/2..M-1)
   - conforms to the second quadrant of the Cartesian coordinate system, 
     encloses values of the impulse response 
     at position x = -N/2..-1 und y = M/2..1
     
As the Wiener filter is realized using the Fourier transform, only images with height and width fitting a power of 2 can be processed. wiener_filter works as follows:
- estimation of the power spectrum density of the original image by using 
  the smoothed version of the corrupted image,
- estimation of the power spectrum density of each pixel by subtracting 
  smoothed version from unsmoothed version,
- building the Wiener filter kernel with the quotient of power spectrum 
  densities of noise and original image and with the impulse response,
- processing the convolution of image and Wiener filter frequency response.
The result image has got image type 'real'.


Attention

Psf must be of image type 'real' and conform to Image and NoisefilteredImage in image width and height.


Parameters

Image (input_object)
image -> object : any
Corrupted image.

Psf (input_object)
image -> object : real
impulse response (PSF) of degradation (in spatial domain).

NoisefilteredImage (input_object)
image -> object : any
Smoothed version of corrupted image.

RestoredImage (output_object)
image -> object : real
Restored image.


Example
/* Restoration of a noisy image (size=256x256), that was blurred by motion*/
ObjType object;
ObjType restored;
ObjType psf;
ObjType noisefiltered;
/* 1. Generate a Point-Spread-Function for a motion-blur with       */
/*    parameter a=10 and direction along the x-axis                 */
gen_psf(&psf,256,256,10,0,3);
/* 2. Noisefiltering of the image                                   */
median(object,&noisefiltered,"circle",2,0);
/* 3. Wiener-filtering                                              */
wiener_filter(object,psf,noisefiltered,&restored);

Result

wiener_filter returns TRUE if all parameters are correct. If the input is empty wiener_filter returns with an error message.


Possible Predecessors

gen_psf_motion, linear_motion, out_of_focus, gen_psf_defocus


Alternatives

wiener_filter_ni


See also

linear_motion, gen_psf_motion, out_of_focus, gen_psf_defocus


References

M. Lückenhaus:"Grundlagen des Wiener-Filters und seine Anwendung in der Bildanalyse"; Diplomarbeit; Technische Universität München, Institut für Informatik; Lehrstuhl Prof. Radig; 1995

Azriel Rosenfeld, Avinash C. Kak: Digital Picture Processing, Computer Science and Aplied Mathematics, Academic Press New York/San Francisco/London 1982



Copyright © 1996-1997 MVTec Software GmbH