YOLOv3を用いて​学習させた検出器で、​馬の顔領域を検出した​いと考えています。一​つの画像から1頭のみ​を検出したく、検出さ​れたバウンディングボ​ックスのうち、最も大​きなものだけを表示さ​せる方法を知りたいの​ですがどなたかご教授​頂けないでしょうか。

1 view (last 30 days)
隆人 山田
隆人 山田 on 7 Jan 2022
Commented: 隆人 山田 on 7 Jan 2022
この画像から、手前の2頭が検出されてしまいます。手前の茶色馬だけを検出する方法を教えていただきたいです。

Accepted Answer

Shunichi Kusano
Shunichi Kusano on 7 Jan 2022
バウンディングボックスには幅と高さの情報が入っています。また、バウンディングボックスと一緒にscoreという検出の信頼性みたいな値も出てきます。
[bbox,score,label] = detect(yolonet,img);
最も大きいという基準で選択したいなら
area = bbox(:,3) .* bbox(:,4);
[~,Idx] = max(area);
bbox1 = bbox(Idx,:);
最も信頼性が高い、なら
[~,Idx] = max(score);
bbox1 = bbox(Idx,:);
といった感じで画像から一つだけ取り出すことができます。
  5 Comments
Shunichi Kusano
Shunichi Kusano on 7 Jan 2022
エラーメッセージの一番上を見ると原因がわかります。
LabelとPositionの数が合ってない、ということで、bbox1は複数の中から1つのボックスを選んだものなのに対して、scoreは元のまま(複数)になっているのが原因です。
scoreからもIdxで1つ値を取り出して差し替えてあげれば解決すると思います。
隆人 山田
隆人 山田 on 7 Jan 2022
出来ました!!
本当にありがとうございました
また機会があればよろしくお願いします!!

Sign in to comment.

More Answers (0)

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!