Image noise is random variation of brightness or color information in images, and is usually an aspect of electronic noise. It can be produced by the sensor and circuitry of a scanner or digital camera. It may result in highly degraded images which makes it difficult to process the Digital Images.

Images corrupted by noise result in unsatisfactory results and thus any noisy image needs to be dealt with in special way before getting started with DIP. The the example that follows, we add Gaussian noise to an Image and see how Image Averaging can be used to retrieve back noiseless image. Though the resultant images are not completely noiseless, these can be processed to get optimum result.

Program to demonstrate noise removal in Digital Images

Read ‘galaxy.jpg’ image. Add Gaussian noise with mean 0 and standard deviation 0.0625(use imnoise function). Display original image and noisy image. Perform averaging considering 8, 16,64 and 128 noisy images. Display the averaged images and calculate the standard deviation for the average images.


input=imread('galaxy.jpg'); % To read image
noise=imnoise(input,'gaussian',0,16/256); % Gaussian noise with mean=0,standard deviation=16/256=0.0625
figure;
subplot(231); imshow(input); title('Original Image'); % Display original image
subplot(232); imshow(noise); title('Noise image'); % Display the image to which noise is added.

%Image Averaging

%Averaging 8 noisy images
S8 = zeros(size(input));
for i = 1:8,
Y = imnoise(input,’gaussian’,0,64/256);
S8 = S8 + double(Y);
end;

S8 = S8./8;
standard_deviation8 = std2(S8)
subplot(2,3,3), imagesc(S8),axis off, title(‘8 images’);

%Averaging 16 noisy images
S16 = zeros(size(input));
for i = 1:16,
Y = imnoise(input,’gaussian’,0,64/256);
S16 = S16 + double(Y);
end;

S16 = S16./16;
standard_deviation16 = std2(S16)
subplot(2,3,4),imagesc(S16),axis off,title(’16 images’);

%Averaging 64 noisy images
S64 = zeros(size(input));
for i = 1:64,
Y = imnoise(input,’gaussian’,0,64/256);
S64 = S64 + double(Y);
end;

S64 = S64./64;
standard_deviation64 = std2(S64)
subplot(2,3,5),imagesc(S64),axis off, title(’64 images’);

%Averaging 128 noisy images
S128 = zeros(size(input));
for i = 1:128,
Y = imnoise(input,’gaussian’,0,64/256);
S128 = S128 + double(Y);
end;

S128 = S128./128;
standard_deviation128 = std2(S128)
subplot(2,3,6),imagesc(S128),axis off, title(‘128 images’);

 

The result of the above code is as shown in the picture below. We can thus conclude that more the number of images are averaged, better is the Noise removal.

Next we move on to some image intensity programs. Intensity Transformation of Images
Go back to Arithmetic operations on digital images