MATLAB Answers

検出器のオブジェクト(複数)の座標の格納について

6 views (last 30 days)
Sato
Sato on 2 Jan 2020
Commented: Sato on 3 Jan 2020
matlabのbbox(矩形)で複数のオブジェクトを検知し、中心の座標を取りたいです。
その際に、bbox内では
>> bbox
bbox =
340 130 136 332
570 54 146 356
のように値が格納されると思います(N行4列)。
x=bbox(1,1);
y=bbox(2,1);
・・・
と行いたいですが、複数のオブジェクトで複数行値が格納されている場合はどのようにしたら良いでしょうか。
(試しにx=bbox(1),y=bbox(2),w=bbox(3),h=bbox(4)と行ってみたところ、340,570,130,54と縦に値を格納してしまいました...)
下のリンクの複数オブジェクト検知という感じのイメージになります。
よろしくお願いいたします。

  0 Comments

Sign in to comment.

Accepted Answer

Kenta
Kenta on 3 Jan 2020
こんにちは、bboxes(1,:)などとすれば、上から1段目の、左から右までの値をすべて取ることができます。
下の例を見ると、各bboxがそれぞれ取得できることが見て取ることができます。
I=imread('onion.png');
I=imresize(I,3);
bboxes=[240 130 136 232
270 54 146 256
92 73 290 40
153 78 67 139];
figure;
for i=1:4
subplot(2,2,i)
annotation=sprintf('box%d',i);
imshow(insertObjectAnnotation(I, 'rectangle', bboxes(i,:), annotation,'LineWidth',8,'FontSize',30))
end
result.JPG

  3 Comments

Sato
Sato on 3 Jan 2020
こんにちは。
ご返信ありがとうございます。
bboxes=[240 130 136 232
270 54 146 256
92 73 290 40
153 78 67 139];
の部分で、4つのオブジェクトのx,y,w,hを格納しているかと思いますが、これらの値をそれぞれ書き出したい場合はどのようにしたら良いでしょうか(言葉足らずで申し訳ありません)。
1つめのx=...,y=...,w=...,h=...,
2つめのx=...,y=...,w=...,h=...,
3つめのx=...,y=...,w=...,h=...,
4つめのx=...,y=...,w=...,h=...、などいった形です。
(最終的には、1つめの矩形の中心座標、2つめの矩形の中心座標、3つめの矩形の中心座標・・・と求めていきたいです。)
また上記の例だと4つのオブジェクトと初めからオブジェクトの個数が確定していますが、オブジェクトの個数が検知によって変わる場合(1つだったり、2つだったり、3つだったり)はどのようにしたら良いでしょうか(どのように定義したら良いでしょうか)。
宜しくお願い致します。
Kenta
Kenta on 3 Jan 2020
size(bboxes,1)
で、bboxesの縦の数、つまり検出した物体の数を知ることができます。bboxのサイズで、かつ1番目の方向(つまり縦方向)と考えてください。
そのため、
for i=1:size(bboxes,1)
bboxes(i,1)
bboxes(i,2)
bboxes(i,3)
bboxes(i,4)
end
とすれば、すべての要素を確認できます。
Sato
Sato on 3 Jan 2020
ご回答ありがとうございます。
for i=1:size(bboxes,1)
x= bboxes(i,1)
y= bboxes(i,2)
w= bboxes(i,3)
h= bboxes(i,4)
end
で試させて頂きます。
ご丁寧にありがとうございます。

Sign in to comment.

More Answers (0)

Sign in to answer this question.