image - 无法在 MATLAB 中使用 regionprops 将结构转换为矩阵

标签 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 矩阵运算?

最佳答案

执行 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/

相关文章:

c++ - 匹配线段 - 稳健且快速的方式

c++ - sobel 算子 - 假边自然图像

image - 段落下方的 CSS 对齐图像

c - MATLAB 中的 FFT 算法

python - 在 matlab 中,如何读取 python pickle 文件?

c - 如何从 MATLAB 运行 C 可执行文件?

python - 从裁剪区域中提取像素数

java - 如何在内存中创建日历图像以添加到 PDF?

JavaFX - 如何在 Pane 中打开并显示图像?

html - 使图像像按钮一样