提取' x'并且' y' matlab中质心的坐标

时间:2016-01-26 12:58:42

标签: matlab save extract tracking centroid

我正在做一个项目,需要通过相机输入获取阈值图像的x,y坐标。在阈值处理和背景减法之后,我设法将输出显示为黑色和白色,并显示质心和坐标。现在我需要提取并保存这些质心' x'并且' y'对于将基于这些' x'进行进一步操作的单独价值。并且' y'协调价值观。 这是我已经合并的质心代码

stats = regionprops(bw, 'BoundingBox', 'Centroid');

    hold on

    for object = 1:length(stats)
        bb = stats(object).BoundingBox;
        bc = stats(object).Centroid;
        rectangle('Position',bb,'EdgeColor','r','LineWidth',2)
        plot(bc(1),bc(2), '-m+')
        a=text(bc(1)+15,bc(2), strcat('X: ', num2str(round(bc(1))), '    Y: ',                              num2str(round(bc(2)))));
        set(a, 'FontName', 'Arial', 'FontWeight', 'bold', 'FontSize', 12, 'Color', 'red');

    end

    hold off

如何提取' x'并且' y'要在以后处理的质心值? 三江源。

1 个答案:

答案 0 :(得分:1)

为了补充Ander的评论,质心的坐标存储在数组bc中,您在调用rectangle绘制所述质心后使用它。如果您以后需要使用它们,可以在循环之前将它们放在N x 2数组中,其中N实际为length(stats)

使用vertcat堆积每个x和y坐标,如下所示:

stats = regionprops(bw, 'BoundingBox', 'Centroid');

AllCentroids = vertcat(stats.Centroid);

这与bc类似,但包含所有质心坐标。您可以使用“边界”框的坐标执行相同操作。这里你的数组是N x 4

AllBB = vertcat(stats.BoundingBox);

你也可以摆脱循环中的几行并将它们放在外面。例如:

a=text(AllCentroids(:,1)+15,AllCentroids(:,2), strcat('X: ', num2str(round(AllCentroids(:,1))), '    Y: ',                              num2str(round(AllCentroids(:,2)))));
set(a, 'FontName', 'Arial', 'FontWeight', 'bold', 'FontSize', 12, 'Color', 'red');

   for object = 1:length(stats)

        rectangle('Position',AllBB(k,:),'EdgeColor','r','LineWidth',2)
        plot(AllCentroids(object,1),AllCentroids(object,2), '-m+')

    end

希望让事情更清楚!