【问题标题】:Updating a struct with new values in a for loop在 for 循环中使用新值更新结构
【发布时间】:2016-10-10 11:22:52
【问题描述】:

我的图像数组:C_filled = 256x256x3270

我想做的是计算每个图像的质心,并将与每个“切片”/图像对应的每个质心存储到一个数组中。但是,当我尝试像常规数组一样更新数组时,会出现以下错误:

"Undefined operator '+' for input arguments of type 'struct'."

我有以下代码:

for i=1:3270;

cen(i) = regionprops(C_filled(:,:,i),'centroid');

centroids = cat(1, cen.Centroid);% convert the cen struct into a regular array.

cen(i+1) = cen(i) + 1; <- this is the problem line

end

如何更新数组以存储每个新质心?

提前致谢。

【问题讨论】:

    标签: arrays image matlab loops centroid


    【解决方案1】:

    这是因为regionprops(即cen(i))的输出是一个结构,您尝试向其中添加值1。但是由于您尝试将值添加到结构而不是其字段之一,所以它失败。

    假设每个图像可以包含多个对象(因此是质心),最好(我认为)将它们的坐标存储到一个单元格数组中,其中每个单元格可以具有不同的大小,这与数字数组相反。如果每个图像中的对象数量完全相同,则可以使用数值数组。

    如果我们用代码查看“元胞数组”选项:

    %// Initialize cell array to store centroid coordinates (1st row) and their number (2nd row)
    centroids_cell = cell(2,3270);
    
    for i=1:3270;
    
    %// No need to index cen...saves memory
    cen = regionprops(C_filled(:,:,i),'centroid');
    
    centroids_cell{1,i} = cat(1,cen.Centroid);    
    centroids_cell{2,i} = numel(cen.Centroid);
    
    end
    

    就是这样。您可以使用以下符号访问任何图像的质心坐标:centroids_cell{some index}

    【讨论】:

    • 谢谢!完美地工作,有没有办法从 1-3270 添加一个额外的列到质心,例如[x,y,z],因为这对应于所讨论对象的长度。
    • 嗯,所有的索引值似乎都是 2,另外,我正在寻找 3x3270 类型的数组,类似于 3D 坐标系。基本上我会得到 [x, y] 质心坐标,添加一个额外的 1:3270 矩阵。
    • 哦,那么如果每个图像只有 1 个质心(即 1x2 位置数组),那么您确实可以使用常规数值数组并简单地添加第三列
    • 我可能混淆了我的代码,但我现在得到 1x3270 矩阵,其中 [x,y] 在 1 个单元格内。
    猜你喜欢
    • 2020-08-15
    • 1970-01-01
    • 2020-12-17
    • 1970-01-01
    • 2013-04-29
    • 1970-01-01
    • 1970-01-01
    • 2019-01-13
    • 1970-01-01
    相关资源
    最近更新 更多