for
ループの中にいくつかの画像を呼び出してから、これらの画像を処理しています。その後、私はstep
機能を使って、これらのフレームとそのマスクをビデオプレーヤー内に表示しています。マスクイメージ内のオブジェクトに境界を追加するにはどうすればよいですか?また、どのように境界を太くし、マスクの各ブロブの重心をマスク画像にプロットすることができますか?以下は、コードの概略図です。step()関数内で呼び出されるビデオフレームの境界線とセントロイドをプロットする方法
videoPlayer = vision.VideoPlayer();
maskPlayer = vision.VideoPlayer();
for ii = 1:nfiles
filenameii = [............]
frame= imread(filenameii);
mask = dOB(frame,BackgroundImg);
% some processing on the images
mask= bwareaopen(mask,27);
boundaries = bwboundaries(mask,'noholes');
B=boundaries{1};
Centroid = regionprops(mask,'centroid');
Centroids = cat(1, Centroid.Centroid);
plot(B(:,2),B(:,1),'g','LineWidth',3);
plot(Centroids(:,1), Centroids(:,2), 'r+', 'MarkerSize', 10); step(videoPlayer,frame);
step(maskPlayer, mask);
P.S:私はhold on
を使用して図に表示する方法を知っているが、私はビデオプレーヤーでそれを表示する前に、これは画像上で直接行わたいと思います。どんな指導も高く評価されます。
おかげでたくさんご回答のため。これは、プレーヤーのブロブの境界線を表示しますが、バイナリイメージではなく境界線を持つ元のイメージを表示します。境界をバイナリイメージの周りに表示したい。なぜそれがそうだと教えてくれますか?また、私はbwboundariesとbwperimの使用の違いを知りたいと思います。 – BlueBee
ああ、私はあなたが元のイメージではなく、バイナリイメージでそれを望んだと思っていました。私は私のポストを更新します。 'bwboundaries'と' bwperim'の違いは、 'bwboundaries'があなたに'(x、y) '点の集合としてブロブの周囲を与えることです。 'bwperim'はブロブの周囲をイメージとして返します。このイメージは、図を表示するためにピクセルをペイントするために不可欠です。 – rayryeng
ありがとう、その作業は完璧です:)。境界/境界の幅を広げることは可能ですか?また、別のウィンドウに現在表示されているように、重心をマスク画像の上にプロットする方法もあります。 – BlueBee