【问题标题】:Naming Image using index of for loop in each iteration在每次迭代中使用 for 循环的索引命名图像
【发布时间】:2015-09-14 17:49:50
【问题描述】:

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

Img(i,j)=data

理想情况下我希望它有

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

等等……

有什么办法可以实现吗?

【问题讨论】:

    标签: matlab for-loop image-processing matrix


    【解决方案1】:

    是的,您可以使用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 是您要访问的迭代的索引。

    【讨论】:

    • 谢谢。 BTW out of sturct and cell,哪个效率更高?
    • @user11659 - 这完全取决于您的偏好。您可以将某些功能应用于每个功能以获得您想要的功能。结构很好,因为您有与数据相关联的实际变量名称,但是您需要指定每个变量的全名才能获得所需的内容。单元格很简单,因为您只需为所需的变量指定一个 index,但如果您想为每个变量分配一个有意义的名称,则不能。话虽如此,这仅取决于您对什么感到满意。在访问数据方面,它们都不是高效/低效的。顺便说一句,不客气!
    【解决方案2】:

    如果你想从字面上获得你想要的东西,你可以使用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 函数。

    【讨论】:

    • 我通常不赞成 eval 的答案,因为它的代码很糟糕,但是因为你提到这不是推荐的,并且单元格数组或 structs 更好,所以你有我的赞成票。跨度>
    猜你喜欢
    • 2020-08-07
    • 1970-01-01
    • 2018-02-13
    • 2018-02-06
    • 1970-01-01
    • 2020-02-27
    • 1970-01-01
    • 2018-05-23
    • 1970-01-01
    相关资源
    最近更新 更多