Я предлагаю другое решение, которое, вероятно, будет:
- Увеличение времени выполнения
- Потребление меньше памяти
Это вариант, если ваши изображениябольшой и из-за ограничения памяти вы не можете объединить все изображения.
Вместо загрузки всех изображений в одну трехмерную матрицу я сравниваю изображения по парам.
Если я возьму ваш пример:
imgs = cell(1,5);
imgs{1} = [2,3,2;3,2,2;3,1,1];
imgs{2} = [2,3,1;4,2,3;2,2,1];
imgs{3} = [3,2,1;5,3,5;3,2,3];
imgs{4} = [4,4,2;5,3,4;4,2,2];
imgs{5} = [4,5,2;4,2,5;3,3,1];
% Only for the first image
Mmax = imgs{1};
Mind = ones(size(imgs{1}));
for ii = 2:numel(imgs)
% 2 by 2 comparison
[Mmax,ind] = max(cat(3,Mmax,imgs{ii}),[],3);
Mind(ind == 2) = ii;
end
Результаты:
Mmax =
4 5 2
5 3 5
4 3 3
Mind =
4 5 1
3 3 3
4 5 3
В конкретных терминах тот же код будет выглядеть так:
% your list of images
file = {'a.img','b.img','c.img'}
I = imread(file{1});
Mmax = I;
Mind = ones(size(I));
for ii = 2:numel(file)
I = imread(file{ii})
[Mmax,ind] = max(cat(3,Mmax,I),[],3);
Mind(ind == 2) = ii;
end