在MATLAB

时间:2016-07-08 22:39:23

标签: image matlab image-processing matrix

我正在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

附带截图。

enter image description here

我尝试用不同的方法解决这个问题。我发现的唯一解决方案是:

t=zeros(20,2);
for i=1:20
    t(i,:)=stats(i).Centroid;
end

然而,我们都知道MATLAB中的循环很慢。还有另一种利用MATLAB矩阵运算的方法吗?

1 个答案:

答案 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} }括号,以确保以逗号分隔的值列表封装在数组中。这不是一个意外,有一个目的,那里有那些,我基本上告诉你那是什么。