我想要找到一个图像的偏心。
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不允许在结构数据变量上添加。
=======================================
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'.**
===========================================
请提供您的投入。
发布于 2014-12-26 23:37:17
野外标量数据
在循环中,必须引用字段名才能访问数据:
for k = 1: numObj
temp=ecc.Eccentricity(index);
sum=temp+sum;
index=k+1;
end
imgEcc = sum/numObj;
一个更有效的方法是使用ecc.Eccentricity
本身是一个逗号分隔的值列表,从struct数组中提取所有的奇点:
Eccentricities = [ecc.Eccentricity];
这就像[ecc(1).Eccentricity, ecc(2).Eccentricity,...]
处理结构数组的方式一样。由于奇点现在位于一个双数组中,所以可以使用mean
。
EccentricityBar = mean(Eccentricities);
现场阵列数据
如果结构数组中的数据不是标量,则值提取的语义取决于字段中数据的形状。无论字段数据是行向量(1xN
)、列向量(Nx1
)还是矩阵(MxN
),通过将字段引用封装在方括号中形成的矩阵总是由逗号分隔的级联组成。换句话说,如果我们有一个带有字段foo
的struct数组bar
,那么以下两行是等价的:
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
的列向量,则结构数组中的原始行是baz
的行。
row1 = baz(1,:);
row2 = baz(2,:);
...
row# = baz(#,:);
对于矩阵数据,以上两种方法的组合是寻找的地方。
例如,如果您有一个结构数组data
,其中的字段Centroid
在1x2 array
中具有x
和y
质心位置,那么我们可以提取以下值
centroids = [data.Centroid];
xbar = centroids(1:2:end);
ybar = centroids(2:2:end);
然而,如果质心位置是一个2x1 array
,我们会提取如下
centroids = [data.Centroid];
xbar = centroids(1,:);
ybar = centroids(2,:);
https://stackoverflow.com/questions/27665153
复制