Image Restoration Examples Image and Multidimensional Signal Processing Colorado School of Mines

advertisement
Image Restoration
Examples
Colorado School of Mines
Image and Multidimensional Signal Processing
Image Restoration Metrics
• RMS error is easy to compute (ie, square root of the
mean squared error).
– However, it (and similar metrics) are biased towards oversmoothed (i.e., blurry) results. Namely, an algorithm that
removes not only the noise but also part of the structure (e.g.,
edges) will have a good score.
• The structural similarity index (SSIM) takes into account
the similarity of the edges (high frequency content)
between the denoised image and the ideal one.
– To have a good SSIM measure, an algorithm needs to remove
the noise while also preserving the edges of the objects.
Colorado School of Mines
Image and Multidimensional Signal Processing
2
Other Image Restoration Metrics
Colorado School of Mines
Image and Multidimensional Signal Processing
3
Example 1 – Gaussian filter for denoising
clear all
close all
% Get an image.
Iinput = imread('liftingbody.png');
Iinput = double(Iinput);
imshow(Iinput, []); % Input image
% Add noise to the image. Let's use Gaussian noise, with sigma = sn.
sn = 20.0;
I = Iinput + sn*randn(size(Iinput));
figure, imshow(I, []); % Noisy image
sigmaGaussian = 3.0;
Iout = imfilter(I, fspecial('gaussian', 6*sigmaGaussian, sigmaGaussian));
figure, imshow(Iout, []), title('gaussian filter');
Idiff = Iout - Iinput;
rms = sqrt(mean2(Idiff.^2));
figure, imshow(Idiff, []);
title(sprintf('Errors (gaussian filter), rms = %f', rms));
Colorado School of Mines
Image and Multidimensional Signal Processing
4
Example 2 - Bilateral Filter
• The “bilateral filter” is similar to the “adaptive mean
filter” discussed in the textbook.
• It is useful to reduce image noise, but doesn’t blur
across boundaries.
• A good tutorial is available on this website:
– http://people.csail.mit.edu/sparis/bf_course/
– Matlab code available there too.
Colorado School of Mines
Image and Multidimensional Signal Processing
5
Example 2 (continued)
clear all
close all
% Get an image.
Iinput = imread('liftingbody.png');
Iinput = double(Iinput);
imshow(Iinput, []); % Input image
% Add noise to the image. Let's use Gaussian noise, with sigma = sn.
sn = 20.0;
I = Iinput + sn*randn(size(Iinput));
figure, imshow(I, []); % Noisy image
maxval = max(I(:));
minval = min(I(:));
sigmaSpatial = sigmaGaussian;
sigmaRange = (maxval-minval)/10;
% Default is (maxval-minval)/10
Iout = bilateralFilter(I, ...
[], ...
% optional edge image
minval, maxval, ...
% range of values
sigmaSpatial, sigmaRange); % sigmaSpatial, sigmaRange
figure, imshow(Iout, []), title('bilateral filter');
Idiff = Iout - Iinput;
rms = sqrt(mean2(Idiff.^2));
figure, imshow(Idiff, []);
Colorado
School of Mines
Image and Multidimensional
Processing
title(sprintf('Errors
(bilateral
filter),Signal
rms
= %f', rms));
6
Example 3 - Blur Degradation
• A blurring degradation can be modeled by a Gaussian
h ( x, y ) =
1
2πσ 2
−
e
x2 + y2
2σ 2
• If you take an image of a dot (impulse), the output
blurred image is just the Gaussian blurring function
Colorado School of Mines
Image and Multidimensional Signal Processing
7
Example 3 - Blurred image of a line
• Assume that the input image is a bright vertical line located at
x=a in the image, and zero everywhere else.
• Namely, f(x,y) = δ(x-a). What is the degraded output image
g(x,y)?
Colorado School of Mines
Image and Multidimensional Signal Processing
8
Example 3 (solution)
• Solution:
h ( x, y ) ∗ δ ( x − a ) =
∞ ∞
=
∫ ∫ h(x' , y') δ ((x − a ) − x') dx' dy'
−∞ −∞
∞
= ∫ h( x − a, y ' ) dy '
−∞
∞
= ∫ e − (( x − a )
2
+ y '2
) dy '
−∞
=e
− ( x − a )2
∞
− y'
e
∫ dy'
2
−∞
2
−𝑦𝑦
𝑒𝑒
over
• The integral of
all y is equal to the square root of pi.
The output image g(x,y) is a vertical line that is blurred in the x
direction. Namely, .
2
g ( x, y ) = π e − (( x − a ) )
Colorado School of Mines
Image and Multidimensional Signal Processing
9
Example 4 – Compare filters
• Compare the performance of these filters, on reducing added
Gaussian noise:
–
–
–
–
Gaussian low pass filter
Bilateral filter
Adaptive mean filter
Anisotropic diffusion filter
• Try on these images:
– ckt-board.tif
– Fig0222(a)(face).tif
– cameraman.tif
% Add noise to the image. Let's use Gaussian noise, with sigma = sn.
sn = 20.0;
I = Iinput + sn*randn(size(Iinput));
figure, imshow(I, []); % Noisy image
Colorado School of Mines
Image and Multidimensional Signal Processing
10
Example 4 (continued)
• For each image and each filter, display the error
image between the original (noise-free) image and
the filtered reconstructed image. Notice where
errors occur.
• For each image and each filter, give the RMS error
between the restored image and the original. See if
a low RMS error gives the “best” reconstruction in
terms of preserving edges as well as reducing noise.
Colorado School of Mines
Image and Multidimensional Signal Processing
11
Example 4 (continued)
clear all
close all
% Get an image.
%Iinput = imread('ckt-board.tif');
%Iinput = imread('Fig0222(a)(face).tif');
Iinput = imread('cameraman.tif');
Iinput = double(Iinput);
imshow(Iinput, []); % Input image
% Add noise to the image. Let's use Gaussian noise, with sigma = sn.
sn = 20.0;
I = Iinput + sn*randn(size(Iinput));
figure, imshow(I, []); % Noisy image
sigmaGaussian = 3.0;
Iout = imfilter(I, fspecial('gaussian', 6*sigmaGaussian, sigmaGaussian));
figure, imshow(Iout, []), title('gaussian filter');
Idiff = Iout - Iinput;
rms = sqrt(mean2(Idiff.^2))
figure, imshow(Idiff, []);
title(sprintf('Errors (gaussian filter), rms = %f', rms));
maxval = max(I(:));
minval = min(I(:));
sigmaSpatial = sigmaGaussian;
sigmaRange = (maxval-minval)/10;
Colorado School of Mines
% Default is (maxval-minval)/10
Image and Multidimensional Signal Processing
12
Iout = bilateralFilter(I, ...
[], ...
% optional edge image
minval, maxval, ...
% range of values
sigmaSpatial, sigmaRange); % sigmaSpatial, sigmaRange
figure, imshow(Iout, []), title('bilateral filter');
Idiff = Iout - Iinput;
rms = sqrt(mean2(Idiff.^2))
figure, imshow(Idiff, []);
title(sprintf('Errors (bilateral filter), rms = %f', rms));
Iout = wiener2(I, [3*sigmaGaussian 3*sigmaGaussian]);
figure, imshow(Iout, []), title('adaptive mean filter');
Idiff = Iout - Iinput;
rms = sqrt(mean2(Idiff.^2))
figure, imshow(Idiff, []);
title(sprintf('Errors (adaptive mean filter), rms = %f', rms));
% Parameters:
niter - number of iterations.
%
kappa - conduction coefficient 20-100 ?
%
lambda - max value of .25 for stability
%
option - 1 Perona Malik diffusion equation No 1
%
2 Perona Malik diffusion equation No 2%
Iout = anisodiff(I, ...
10, ...
% niter - number of iterations
30, ...
% conduction coefficient 20-100
0.25, ...
% max value of .25 for stability
1);
% option: Perona Malik diffusion equation No 1 or No 2
figure, imshow(Iout, []);
Idiff = Iout - Iinput;
rms = sqrt(mean2(Idiff.^2))
figure, imshow(Idiff, []);
title(sprintf('Errors (anisotropic diffusion filter), rms = %f', rms));
Colorado School of Mines
Image and Multidimensional Signal Processing
13
Example 4 (solutions)
Image
ckt-board.tif
Fig0222(a)(face).
tif
cameraman.tif
Colorado School of Mines
Gaussian low
pass
29.9
13.8
Bilateral
Adaptive mean
10.4
9.4
15.9
8.7
Anisotropic
diffusion
9.7
7.3
24.9
10.3
13.2
10.2
Image and Multidimensional Signal Processing
14
Download