カスケード検出器の精度向上

2 views (last 30 days)
早汰 前川
早汰 前川 on 17 Dec 2020
Commented: 早汰 前川 on 12 Jan 2021
口を検出するためにカスケード検出器を利用し"Mouth"検出を行いました.
実際検出を行ったところ,口を検出したほか,目をMouthと認識してしまいました.
そこで,この検出器の精度を向上させたいのですが,どのようにすれば精度を向上させられるのでしょうか.

Accepted Answer

Shunichi Kusano
Shunichi Kusano on 18 Dec 2020
私が試したときは、目の検出精度は口よりは高かったので、ご記載のような状況では、目の検出結果と重複していれば口ではない、といった場合分けは可能かと思います。
  4 Comments
Shunichi Kusano
Shunichi Kusano on 20 Dec 2020
こんにちは。目の範囲、口の範囲が出力されてくると思いますので、口として出てきた範囲(たぶん中心座標が使いやすいと思います)が目の範囲に含まれていればアウト、という感じです。ご参考までに、私の方で過去に作成したスクリプト(の一部)を載せますね。含まれる含まれないを判断するためにcontains関数を使っているのですが、そのためにわざわざ空間参照オブジェクトを持ち出してきています。
% bboxp,bboxLは両目の検出結果、左目の検出結果をそれぞれ表す([x y w h])
% 下のスクリプトでは、複数検出されてしまう左目の検出結果をフィルタリングするために、両目の検出範囲を使っています。
if ~isempty(bboxP)
% 両目の検出結果から左目のあるべき範囲を表す空間参照オブジェクトを作成
% 左目の範囲が知りたいので、両目範囲から右半分を抜き出している。
R4L = imref2d(round([bboxP(4) bboxP(3)/2]),[bboxP(1)+bboxP(3)/2,bboxP(1)+bboxP(3)],[bboxP(2),bboxP(2)+bboxP(4)]);
% 左目検出結果の中心座標を計算
centerL = bboxL(:,1:2) + bboxL(:,3:4)/2;
% contains関数でcenterLがR4Lに納まっているかを0 1でジャッジ
bL = contains(R4L, centerL(:,1), centerL(:,2));
% 1となったものを真の左目の範囲とする
bboxL_real = bboxL(bL,:);
else % 入力が空だった場合、出力も空とする
bboxL_real = [];
end
早汰 前川
早汰 前川 on 12 Jan 2021
ご丁寧に感謝いたします.
上記のプログラムを参考にさせていただきまして,うまくいきました.
ありがとうございました!

Sign in to comment.

More Answers (0)

Tags

Community Treasure Hunt

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

Start Hunting!