首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何在MATLAB中找到结构化数据类型的均值?

如何在MATLAB中找到结构化数据类型的均值?
EN

Stack Overflow用户
提问于 2014-12-27 07:02:34
回答 1查看 1.5K关注 0票数 0

我想要找到一个图像的偏心。

代码语言:javascript
代码运行次数:0
运行
复制
 img = imread('47.jpg');
    ecc=regionprops(img,'Eccentricity');
    ecc = 

    255x1 struct array with fields:
        Eccentricity

    ecc(255)

    ans = 

        Eccentricity: 0.2851

    ecc(1)

    ans = 

        Eccentricity: 0.4740

========================= ecc是结构数据类型的一个变量。它将保存所有255个对象的值。然而,我只想找到一个偏心,并考虑所有这些价值的平均值。

有找到结构值均值的方法吗?

我试过循环。计算和除以总no。物体的。但是MATLAB不允许在结构数据变量上添加。

=======================================

代码语言:javascript
代码运行次数:0
运行
复制
    img = imread('47.jpg');
    ecc=regionprops(img,'Eccentricity');
    numObj = numel(ecc);
    sum=0;
    index=1;
    for k = 1: numObj
        temp=ecc(index);
        **sum=temp+sum;**
        index=k+1;
    end
    imgEcc = sum/numObj;
**??? Undefined function or method 'plus' for input arguments of type 'struct'.**

===========================================

请提供您的投入。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-12-27 07:37:17

野外标量数据

在循环中,必须引用字段名才能访问数据:

代码语言:javascript
代码运行次数:0
运行
复制
for k = 1: numObj
    temp=ecc.Eccentricity(index);
    sum=temp+sum;
    index=k+1;
end
imgEcc = sum/numObj;

一个更有效的方法是使用ecc.Eccentricity本身是一个逗号分隔的值列表,从struct数组中提取所有的奇点:

代码语言:javascript
代码运行次数:0
运行
复制
Eccentricities = [ecc.Eccentricity]; 

这就像[ecc(1).Eccentricity, ecc(2).Eccentricity,...]处理结构数组的方式一样。由于奇点现在位于一个双数组中,所以可以使用mean

代码语言:javascript
代码运行次数:0
运行
复制
EccentricityBar = mean(Eccentricities);

现场阵列数据

如果结构数组中的数据不是标量,则值提取的语义取决于字段中数据的形状。无论字段数据是行向量(1xN)、列向量(Nx1)还是矩阵(MxN),通过将字段引用封装在方括号中形成的矩阵总是由逗号分隔的级联组成。换句话说,如果我们有一个带有字段foo的struct数组bar,那么以下两行是等价的:

代码语言:javascript
代码运行次数:0
运行
复制
baz1 = [foo(1:3).bar];
baz2 = [foo(1).bar,foo(2).bar,foo(3).bar];

要访问baz数组的某些元素,需要知道foo(k).bar中数据的形状。如果数据是长度为N的行向量,则可以使用下标和步长N提取结构数组中的原始列。

代码语言:javascript
代码运行次数:0
运行
复制
col1 = baz(1:N:end);
col2 = baz(2:N:end);
...
col# = baz(#:N:end);

如果数据是长度为N的列向量,则结构数组中的原始行是baz的行。

代码语言:javascript
代码运行次数:0
运行
复制
row1 = baz(1,:);
row2 = baz(2,:);
...
row# = baz(#,:);

对于矩阵数据,以上两种方法的组合是寻找的地方。

例如,如果您有一个结构数组data,其中的字段Centroid1x2 array中具有xy质心位置,那么我们可以提取以下值

代码语言:javascript
代码运行次数:0
运行
复制
centroids = [data.Centroid];
xbar      = centroids(1:2:end);
ybar      = centroids(2:2:end);

然而,如果质心位置是一个2x1 array,我们会提取如下

代码语言:javascript
代码运行次数:0
运行
复制
centroids = [data.Centroid];
xbar      = centroids(1,:);
ybar      = centroids(2,:);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27665153

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档