如何在MATLAB中找到结构数据类型的平均值? 我想找出图像的古怪之处。
========================= ecc是结构数据类型的变量。它将保存所有255个对象的值。然而,我只想找出一个偏心率,并考虑所有这些值的平均值 有没有办法找到结构值的平均值? 我试过打圈。计算总和并除以对象总数。但MATLAB不允许添加结构数据变量 =======================================如何在MATLAB中找到结构数据类型的平均值? 我想找出图像的古怪之处。,matlab,Matlab,========================= ecc是结构数据类型的变量。它将保存所有255个对象的值。然而,我只想找出一个偏心率,并考虑所有这些值的平均值 有没有办法找到结构值的平均值? 我试过打圈。计算总和并除以对象总数。但MATLAB不允许添加结构数据变量 ======================================= img = imread('47.jpg'); ecc=regionprops(img,'Eccentricity'); nu
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'.**
===========================================
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'.**
请提供您的输入。字段中的标量数据
在循环中,必须引用字段名才能访问数据:
for k = 1: numObj
temp=ecc.Eccentricity(index);
sum=temp+sum;
index=k+1;
end
imgEcc = sum/numObj;
一种更有效的方法是使用ecc.偏心率
本身就是一个逗号分隔的值列表的事实,从结构数组中提取所有偏心率:
Eccentricities = [ecc.Eccentricity];
这与Matlab处理结构数组的方式类似。
由于偏心率现在处于双数组中,因此可以使用mean
:
EccentricityBar = mean(Eccentricities);
字段中的数组数据 如果结构数组中的数据不是标量,则值提取的语义取决于字段中数据的形状。 无论字段数据是行向量(
1xN
)、列向量(Nx1
)还是矩阵(MxN
),通过将字段引用括在方括号中形成的矩阵始终由逗号分隔的连接构成。
换句话说,如果我们有一个带有字段bar
的结构数组foo
,则以下两行是等效的:
baz1 = [foo(1:3).bar];
baz2 = [foo(1).bar,foo(2).bar,foo(3).bar];
要访问baz
数组的某些元素,需要知道foo(k).bar
中数据的形状。
如果数据是长度N
的行向量,则可以使用下标和跨距N
从结构数组中提取原始列:
col1 = baz(1:N:end);
col2 = baz(2:N:end);
...
col# = baz(#:N:end);
如果数据是长度为N
的列向量,则struct数组中的原始行是baz
的行:
row1 = baz(1,:);
row2 = baz(2,:);
...
row# = baz(#,:);
而对于矩阵数据,上述两种方法的组合是值得一看的
例如,如果您有一个结构数组data
,其字段Centroid
在1x2数组中具有x
和y
质心位置,我们可以提取如下值
centroids = [data.Centroid];
xbar = centroids(1:2:end);
ybar = centroids(2:2:end);
然而,如果质心位置是2x1数组
,我们将
centroids = [data.Centroid];
xbar = centroids(1,:);
ybar = centroids(2,:);
尝试替换temp=ecc(索引)代码>带有温度=偏心率(索引)代码>。谢谢你,哈斯金。第二种方法帮助了我。我有一个类似的问题。我想用质心确定来执行这个操作。但是,在质心中有两个值,与偏心率不同。x坐标和y坐标。我是否可以将所有x坐标存储在一个变量中,如xc=[stat.Centroid(2)]?MATLAB抛出了一个错误,说???多个结构元素的字段引用后跟多个引用块是错误的。如果有什么方法可以解决这个问题,那会很有帮助。关于如何提取非标量值,请参阅扩展答案。Haskin,我在expt下得到的图像质心是255X1结构数组。提取了xbar和ybar asHaskin,我得到的expt下图像的质心是一个255X1结构数组。查找xbar和ybar的平均值将返回数组中的第一个和最后一个值。请看一下这个片段。将其粘贴到下面的另一个注释中。看起来x和y坐标连续存储在结构数组[255by1]中,因此索引大小为510。我猜对应于x坐标的替代值。如果我错了,请纠正我。