Хранить массивы в индексе во вложенном цикле for в matlab
У меня есть 50 изображений, хранящихся в виде массивов в индексе ячейки 1x50, который называется AllImages. По сути, я хочу создать новый индекс с массивами, которые содержат элементы в той же позиции, что и 50 массивов.
Я хочу видеть, как каждый пиксель в одном и том же месте 50 изображений изменяется в 50 изображениях.
Теоретически, я бы получил индекс массивов по 50 элементов в каждом, потому что мне нужен первый элемент каждого из 50 массивов в его собственном массиве, второй элемент каждого из 50 массивов в своем собственном массиве и т. Д. И т. Д.,
Итак, вот мой код:
for m = 1:5000 % number of pixels per image
for n = 1:50 % for the 50 images, all the same size
pixels(n) = allImages{n}(m)
end
allpixels{m} = pixels
end
Я получаю индекс ячеек 1x50 для всех пикселей, хотя я хочу 5000. Я не уверен, что я сделал не так.
Есть ли более простой способ сделать это или исправить код? Спасибо!
1 ответ
Изображения одинакового размера? в этом случае сначала измените их на матрицу, используя cell2mat
[i,j] = size(allImages{1})
n = numel(allImages)
allImages = cell2mat(allImages);
allImages = reshape(allImages,[i,j,n]);
потому что теперь вы можете просто выбрать свой пиксель. например:
pixel = squeeze(allImages(1,1,:))
Чтобы получить их все в новой ячейке, вы можете переставить и изменить форму матрицы.
allImages = permute(allImages ,[3 1 2]);
allImages = reshape(allImages ,[n,i*j]);
pixels = mat2cell(allImages,n,ones([1,i*j]));
Но для большинства математических операций проще всего хранить их как одну матрицу.
Как два практических правила в Matlab, вы хотите максимально использовать матрицы и избегать циклов for.