School of Engineering and Physical Sciences
Electrical Electronic and Computer Engineering
B31SE Image Processing
Fundamentals of Image Processing with Matlab
Matlab scripts a01images.m and b01neighbours.m demonstrate how to load and
image, get some image information, display an image, and perform some simple manipulations
with an image. Run these scripts on various images. Use matlab help if necessary.
If you feel yourself comfortable with these simple image processing manipulations and matlab
programming in general, you can start working on the following programming assignment.
This assignment consists of four parts (tasks).
Task 1a (4 points): Nonlinear image filtering. Given a grey-scale image (, ), consider
the following non-linear iterative process:
where K is a positive constant. Note that the weights {} depend on the pixel positions (, )
and the iteration number n. After a certain number of iterations, you should get results similar
to those shown in the picture below: small-scale image details are removed while salient image
edges are sharpened.
Your first task is to implement the above non-linear iterative procedure, perform a number of
experiments (with different images, different numbers of iterations, and various values of
parameter k).
A matlab script simple_averaging.m implements the above iterative scheme in the
simplest case when all the weights are equal to one: = 1.
Task 1b (4 points): Low-light image enhancement. The above filtering scheme can be used
for enhancing low-light images. Given a colour (RGB) image
Let (, ) be obtained from (, ) by applying the image filtering scheme from Part 1
described above. An enhanced version of the original colour (, ) is generated by
where is a small positive parameter used to avoid division by zero. You are expected to get
results similar to those shown below:
original enhanced
Task 2 (4 points): Image filtering in frequency domain.
This part is independent of Parts 1 and 2 and devoted to using the Fourier transform for image
filtering purposes.
Matlab function fftshift shifts the zero frequency component of an image to the centre of
spectrum
Try Fourier4ip.m matlab script and see how the Fourier transform can be used for image
processing and filtering purposes.
Your task is as follows. Image eye-hand.png is corrupted by periodic noise. Find the Fourier
transform of the image, visualise it by using log(abs(fftshift(.))), as seen below.
An image corrupted by periodic ripples The image in the frequency domain
The four small crosses in the frequency domain correspond to the frequencies behind the
periodic noise. Use impixelinfo to locate the frequencies. Construct a notch filter (a band-stop
filter, you can use small-size rectangles or circles to kill the unwanted frequencies) and use it
to remove/suppress the periodic noise while preserving the image quality. The Part 3 of your
report must include the reconstructed image and the filter used in the frequency domain.
Task 3a (5 points): Image deblurring by the Wiener filter.
Given a grey-scale image (, ), consider the following non-linear iterative process:
(, ) = ?(, ) ? (, ) + (, )
,
where f (x,y) is the latent (unblurred) image, g(x,y) is the degraded image, h(x,y) is a known
blurring kernel, ? denotes the convolution operation, and n(x,y) stands for an additive noise.
Applying the Fourier transform to both sides of the above equation yields
(, ) = (, )(, ) + (, )
.
The Wiener filter consists of approximating the solution to this equation by
(, ) = [
1
(, )
|(, )|2
|(, )|2 +
] (, ) =
?(, )
|(, )|2 +
(, ) (1)
,
where ?(, ) is the complex conjugate of (, ). Implement Weiner filter restoration
scheme (1) and test it for different types of blur kernels (motion blur and Gaussian blur). In
your implementation of the Wiener filter restoration scheme (1) you may need to use
H = psf2otf(h,size(g));
See https://uk.mathworks.com/help/images/ref/psf2otf.html for details. See also deblur.m.
Task 3b (5 points): Image deblurring by ISRA. The matlab script deblur.m contains
simple implementations of two popular image deblurring schemes, the Landweber method
and the Richardson-Lucy method (in addition, the matlab built-in implementation of the
Wiener filter is presented in deblur.m). In particular, the Richardson-Lucy method consists
of the following iterative process
0(, ) = (, ), +1(, ) = (, ) ? (?(?, ?) ?
(, )
(, ) ? ?(, )
)
where ? stand for the pixel-wise multiplication and the pixel-wise division is also used. Let us
consider the so-called ISRA (Image Space Reconstruction Algorithm) method
0(, ) = (, ), +1(, ) = (, ) ? (
?(?, ?) ? (, )
?(?, ?) ? ?(, ) ? (, )
)
.
Your task is to implement ISRA and use PSNR graphs (see again deblur.m) to compare
ISRA against the Wiener, Landweber, and Richarson-Lucy methods for the two types of
motion blur and Gaussian blur considered in deblur.m.
Remark. In this particular example of additive gaussian noise, advantages of the Richardson-
Lucy and ISRA methods are not revealed.
Task 4 (3 points): Image filtering in frequency domain.
Matlab script handwritten_digit_recognition_simple.m provides you with a simple
application of ANN for handwritten digit recognition. Your task is to modify the hidden layers
of the network in order to achieve the accuracy higher than 93%. You are not allowed to use
CNN layers. You are not allowed to use more than 100 neurons in total for all your hidden
layers. You are not allowed to modify the training options.
You can observe that a higher accuracy can be easily achieved if convolutional layers are used:
handwritten_digit_recognition.m. You can get more information about various layers used
in ANN from https://uk.mathworks.com/help/deeplearning/ug/create-simple-deep-
learning-network-for-classification.html
Please submit a single report describing briefly your results achieved for Tasks 1, 2,
3, and 4 of the assignment. Together with the report, please submit your matlab scripts
implementing your solutions to Tasks 1, 2, 3, and 4.