2016-01-26 94 views
-1

我正在做一个项目,它需要通过相机提要获取阈值图像的x,y坐标。阈值和背景减法后,我设法得到输出为黑色和白色的质心,并显示其坐标。现在我需要分离提取并保存这些质心'x'和'y'值,以便进一步操作,这些操作将基于这些'x'和'y'坐标值。 这里是我已经将在matlab中提取质心的'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”的中心值有待日后的工作重心的代码? Thankyou。

+0

在这里没有问题,或者至少我不能看到它 –

+0

我很抱歉....我的Q是...如何提取'x'和'y'坐标分开工作后来? –

+2

'bc(1)'是X,'bc(2)'是每次迭代中的y。 –

回答

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 

希望让事情更清晰!