2016-01-26 292 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 

希望讓事情更清晰!