-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

Ander のコメントを補足するために、重心の座標は array に格納されます。これは、前述の重心をプロットするためbcに呼び出した後に使用します。rectangle後でそれらを使用する必要がある場合は、ループの前に、実際には が であるN x 2配列に配置できます。Nlength(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 に答える