2-D adaptive noise-removal filtering
wiener2(I,[m n],[mblock nblock],noise) has been removed.
wiener2(I,[m n],noise) syntax instead.
filters the grayscale image
J = wiener2(
I using a pixel-wise adaptive
low-pass Wiener filter.
[m n] specifies the size
n) of the neighborhood used to
estimate the local image mean and standard deviation. The additive noise (Gaussian
white noise) power is assumed to be
The input image has been degraded by constant power additive noise.
wiener2 uses a pixelwise adaptive Wiener method based on
statistics estimated from a local neighborhood of each pixel.
Remove Noise By Adaptive Filtering
This example shows how to use the
wiener2 function to apply a Wiener filter (a type of linear filter) to an image adaptively. The Wiener filter tailors itself to the local image variance. Where the variance is large,
wiener2 performs little smoothing. Where the variance is small,
wiener2 performs more smoothing.
This approach often produces better results than linear filtering. The adaptive filter is more selective than a comparable linear filter, preserving edges and other high-frequency parts of an image. In addition, there are no design tasks; the
wiener2 function handles all preliminary computations and implements the filter for an input image.
wiener2, however, does require more computation time than linear filtering.
wiener2 works best when the noise is constant-power ("white") additive noise, such as Gaussian noise. The example below applies
wiener2 to an image of Saturn with added Gaussian noise.
Read the image into the workspace.
RGB = imread('saturn.png');
Convert the image from truecolor to grayscale.
I = im2gray(RGB);
Add Gaussian noise to the image
J = imnoise(I,'gaussian',0,0.025);
Display the noisy image. Because the image is quite large, display only a portion of the image.
imshow(J(600:1000,1:600)); title('Portion of the Image with Added Gaussian Noise');
Remove the noise using the
K = wiener2(J,[5 5]);
Display the processed image. Because the image is quite large, display only a portion of the image.
figure imshow(K(600:1000,1:600)); title('Portion of the Image with Noise Removed by Wiener Filter');
I — Input image
2-D numeric array
Input image, specified as a 2-D numeric array.
[m n] — Neighborhood size
[3 3] (default) | 2-element numeric vector
Neighborhood size, specified as a 2-element vector of the form
[m n] where
m is the number of
n is the number of columns.
noise — Additive noise
Additive noise, specified as a numeric array. If you do not specify noise,
wiener2 uses the mean of the local variance,
wiener2 estimates the local mean and variance around each pixel.
where is the N-by-M local
neighborhood of each pixel in the image
wiener2 then creates a pixelwise Wiener filter using these
where ν2 is the noise variance. If the noise variance is
wiener2 uses the average of all the local estimated
 Lim, Jae S. Two-Dimensional Signal and Image Processing, Englewood Cliffs, NJ, Prentice Hall, 1990, p. 548, equations 9.44, 9.45, and 9.46.
C/C++ Code Generation
Generate C and C++ code using MATLAB® Coder™.
wiener2 supports the generation of C
code (requires MATLAB®
Coder™). For more information, see Code Generation for Image Processing.
Accelerate code by running on a graphics processing unit (GPU) using Parallel Computing Toolbox™.
This function fully supports GPU arrays. For more information, see Image Processing on a GPU.
Version HistoryIntroduced before R2006a
R2022a: Generate C code using MATLAB Coder
wiener2 now supports the generation of
C code (requires MATLAB
R2021a: Support for GPU acceleration
wiener2 now supports GPU acceleration
(requires Parallel Computing Toolbox™).