我有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.我不确定我做错了什么。
有更简单的方法来执行此操作或修复代码吗?非常感谢!
答案 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循环。