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);
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
).
An alternative solution using IMLINCOMB from the image processing toolbox:
I = imlincomb(0.25,I1, 0.25,I2, 0.25,I3, 0.25,I4);
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With