Хранить массивы в индексе во вложенном цикле 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.

Другие вопросы по тегам