在每次迭代中使用for循环的索引命名图像

时间:2015-09-14 17:49:51

标签: matlab for-loop image-processing matrix

我在MATLAB中为我的图像处理项目工作。 我使用for循环来生成某种图像数据(图像大小各不相同),每次循环迭代。我的问题是如何阻止它在下一次迭代中覆盖图像。

Img(i,j)=data

理想情况下,我希望它有

Img_1 = data (for 1st iteration)
Img_2 = data (for 2nd iteration)
Img_3 = data (for 3rd iteration)

依旧......

有什么办法,可以实现吗?

2 个答案:

答案 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_1Img_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函数。