在matlab中的嵌套for循环中将数组存储在索引中

时间:2017-06-29 15:44:49

标签: arrays matlab for-loop indexing storing-data

我有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 个答案:

答案 0 :(得分:0)

是相同尺寸的图像吗? 在这种情况下,首先使用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循环。