我在MATLAB中为我的图像处理项目工作。 我使用for循环来生成某种图像数据(图像大小各不相同),每次循环迭代。我的问题是如何阻止它在下一次迭代中覆盖图像。
Img(i,j)=data
理想情况下,我希望它有
Img_1 = data (for 1st iteration)
Img_2 = data (for 2nd iteration)
Img_3 = data (for 3rd iteration)
依旧......
有什么办法,可以实现吗?
答案 0 :(得分:3)
是的,您可以使用dynamic field names with structures。我不建议使用单独的变量名称,因为您的工作区将变得难以处理。做这样的事情:
img_struct = struct(); %// Create empty structure
for ii = 1 : num_iterations
%// Do your processing on data
%...
%...
img_struct.(['Img_' num2str(ii)]) = data; %// After iteration
end
这将创建一个名为img_struct
的结构,其中包含名为Img_1
,Img_2
等的字段。要从迭代中访问特定数据...说..迭代1,做:
data = img_struct.Img_1;
将_1
更改为您选择的任何迭代。
或者,您可以使用cell arrays ......同样的思路:
%// Create empty cell array
img_cell = cell(num_iterations, 1);
for ii = 1 : num_iterations
%// Do your processing on data
%...
%...
img_cell{ii} = data; %// After iteration
end
单元格数组是每个元素采用任何类型的数组 - 或者它们是非同类数组。这意味着每个元素都可以是您想要的任何元素。因此,因为您的图像数据在每次迭代时大小不同,所以这样做非常好。要在任何迭代中访问数据,只需执行以下操作:
data = img_cell{ii};
ii
是您要访问的迭代的索引。
答案 1 :(得分:1)
如果你想从字面上获得你想要的东西,你可以使用eval()
函数,它将一个字符串作为输入,它将评估它就像是一行代码。例如:
for i=1:3
data=ones(i); % assign data, 'ones(i)' used as dummy for test
eval(['Img_' num2str(i) '=data;'])
end
但是,我建议使用单元格数组{}
,或者使用rayryeng建议的struct
函数。