Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Problem with averaging corrupted images to eliminate the noise in MATLAB

I want to average some .jpg images which are corrupted by zero-mean Gaussian additive noise. After searching around, I figured out to add the image matrices and divide the sum by the number of matrices. However, the resultant image is totally black. Normally when the number of image increases then the resultant image gets better. But when I use more images it gets darker.

I am using 800x600 black and white .jpg images. Here is the script I used:

image1 = imread ('PIC1.jpg');
image2 = imread ('PIC2.jpg');
image3 = imread ('PIC3.jpg');
image4 = imread ('PIC4.jpg');

sum = image1 + image2 + image3 + image4; 
av = sum / 4; 
imshow(av);
like image 496
amertkara Avatar asked Dec 02 '22 06:12

amertkara


2 Answers

The problem is probably that the image data is all of type uint8, so adding them all up causes a saturation at the value of 255 for the pixel values, giving you a mostly white image which then ends up looking mostly black when you then divide by the number of images. You should convert your images to another data type, like double, then perform your averaging, and then convert back to uint8:

% Load your images:
image1 = imread('PIC1.jpg');
image2 = imread('PIC2.jpg');
image3 = imread('PIC3.jpg');
image4 = imread('PIC4.jpg');

% Convert the images to type double and sum them:
imageSum = double(image1) + double(image2) + double(image3) + double(image4);

% Divide by the number of images and convert back to type uint8:
averageImage = uint8(imageSum./4);

% Display the averaged image:
imshow(averageImage);

SIDE NOTE: You should avoid giving your variables the same names as any existing functions, since this could cause problems/confusion. This is why I changed the variable sum to imageSum (there is a built-in function sum).

like image 154
gnovice Avatar answered Dec 04 '22 12:12

gnovice


An alternative solution using IMLINCOMB from the image processing toolbox:

I = imlincomb(0.25,I1, 0.25,I2, 0.25,I3, 0.25,I4);
like image 40
Amro Avatar answered Dec 04 '22 13:12

Amro