我正在 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 矩阵运算?
最佳答案
执行 stats.Centroid
实际上会给你一个 comma-separated list的质心,因此如果您执行 centers = stats.Centroid
,MATLAB 只会为您提供该矩阵的第一个中心。您必须做的是将中心封装在一个数组中(即 [stats.Centroid]
),然后在完成后 reshape 。
像这样的东西应该适合你:
centers = reshape([stats.Centroid], 2, []).';
这将在质心中读取为 1 x 2*M
数组,其中 M
是 blob 的总数,因为 MATLAB 会在列中 reshape -主要格式,您应该确保将总行数指定为 2,并让 MATLAB 自行计算出后面有多少列。然后,当您完成所需的操作时,您可以转置结果。
小注
如果您查看提示部分中的 regionprops
文档页面 - http://www.mathworks.com/help/images/ref/regionprops.html#buorh6l-1 ,您会看到它们围绕着 stats.Area
,这是每个带有 []
括号的 blob 的区域,以确保以逗号分隔的值列表封装在大批。这不是意外,那里有这些东西是有目的的,我基本上已经告诉过你那是什么了。
关于image - 无法在 MATLAB 中使用 regionprops 将结构转换为矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38276332/