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

Store arrays in index in a nested for loop in matlab

我有 50 张图像,作为数组存储在名为 AllImages 的 1x50 单元格索引中。基本上我想用包含 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。我不确定我做错了什么。

是否有更简单的方法来执行此操作或修复代码?非常感谢!

图片大小一样吗? 在这种情况下,首先使用 cell2mat

将它们更改为矩阵
[i,j] = size(allImages{1})
n = numel(allImages)
allImages = cell2mat(allImages);
allImages = reshape(allImages,[i,j,n]);

因为现在您可以 select 您的像素。例如:

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 循环。