我正在MATLAB中的图像中使用粒子跟踪并使用regionprops
函数。在提供的资源上有一个圆圈示例:
stats = regionprops('table',bw,'Centroid',...
'MajorAxisLength','MinorAxisLength')
centers = stats.Centroid;
diameters = mean([stats.MajorAxisLength stats.MinorAxisLength],2);
radii = diameters/2;
在我的Matlab R2014b中,行centers = stats.Centroid;
产生了不希望的结果:我的stats.Centroid
结构有20个元素(每个元素是两个数字 - 区域中心的坐标)。但是,在以下命令之后,我的变量center
仅为1x2
矩阵,而不是所需的20x2
。
附带截图。
我尝试用不同的方法解决这个问题。我发现的唯一解决方案是:
t=zeros(20,2);
for i=1:20
t(i,:)=stats(i).Centroid;
end
然而,我们都知道MATLAB中的循环很慢。还有另一种利用MATLAB矩阵运算的方法吗?
答案 0 :(得分:4)
执行stats.Centroid
实际上会给你comma-separated list个质心,所以如果你centers = stats.Centroid
,MATLAB只会给你那个矩阵的第一个中心。您必须做的是将中心封装在一个数组中(即[stats.Centroid]
),然后在完成时将重塑。
这样的事情对你有用:
centers = reshape([stats.Centroid], 2, []).';
这将在质心中作为1 x 2*M
数组读取,其中M
是blob的总数,并且因为MATLAB以列主格式重新整形,所以应该确保指定总行数为2,让MATLAB自行确定后面有多少列。然后,在完成所需的操作后,您将转置结果。
如果您查看其提示部分中的regionprops
文档页面 - http://www.mathworks.com/help/images/ref/regionprops.html#buorh6l-1,您会看到它们围绕stats.Area
,这是每个blob的区域{{1} }括号,以确保以逗号分隔的值列表封装在数组中。这不是一个意外,有一个目的,那里有那些,我基本上告诉你那是什么。