-1

我正在做一个项目,该项目需要通过相机馈送获取阈值图像的 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'质心值以便稍后处理?谢谢你。

4

1 回答 1

1

只是为了补充安德的评论,质心的坐标存储在数组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

希望这能让事情更清楚!

于 2016-01-26T14:21:11.090 回答