find the average pixel value of matrix of images
15 views (last 30 days)
Show older comments
hi i was wondering how to put a group of 10 images that are 1920 x 1080 into a matrix that is size 1920x1080x10. Im doing this to keep track of values for each pixel.
i have tried
for i = 1:10
outputFileName = sprintf('bwImage%d.jpg', i);
allImages{i} = imread(outputFileName);
end
B = mean(allImages);
but this creates and matrix size 1 x 10.
This matrix will be used to calculate the average value at each pixel location
0 Comments
Answers (1)
Konrad
on 17 Dec 2021
Edited: Konrad
on 17 Dec 2021
Hi Michael,
allImages{i} = ... creates a cell-array containing the images.
If your images are all grayscale and of the same size you can use a 3-d array:
for i = 1:10
outputFileName = sprintf('bwImage%d.jpg', i);
allImages(:,:,i) = imread(outputFileName); % concatenate images in 3rd dimension
end
B = mean(allImages,3); % average across 3rd dimension
Best, K.
2 Comments
Image Analyst
on 17 Dec 2021
You left out the allocation and some other robustness
numImages = 10;
allImages = zeros(1080, 1920, numImages, 'uint8'); % HDTV resolution -- 1080 lines (rows)
counter = 1;
for k = 1 : numImages
outputFileName = sprintf('bwImage%d.jpg', k);
fprintf('Reading in %s.\n', outputFileName);
if isfile(outputFileName)
allImages(:, :, counter) = imread(outputFileName); % concatenate images in 3rd dimension
counter = counter + 1;
else
message = sprintf('File not found : ', outputFileName)
uiwait(warndlg(message));
end
end
% Crop if some images were missing.
if counter < numImages + 1
allImages = allImages(:, :, 1:counter);
end
% Compute mean over all images of those images that we were able to read in.
meanImage = mean(allImages, 3); % average across 3rd dimension
% Display the image.
imshow(meanImage, []);
See Also
Categories
Find more on Convert Image Type in Help Center and File Exchange
Products
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!