カスケード検出器の精度向上
1 回表示 (過去 30 日間)
古いコメントを表示
口を検出するためにカスケード検出器を利用し"Mouth"検出を行いました.
実際検出を行ったところ,口を検出したほか,目をMouthと認識してしまいました.
そこで,この検出器の精度を向上させたいのですが,どのようにすれば精度を向上させられるのでしょうか.
0 件のコメント
採用された回答
Shunichi Kusano
2020 年 12 月 18 日
私が試したときは、目の検出精度は口よりは高かったので、ご記載のような状況では、目の検出結果と重複していれば口ではない、といった場合分けは可能かと思います。
4 件のコメント
Shunichi Kusano
2020 年 12 月 20 日
こんにちは。目の範囲、口の範囲が出力されてくると思いますので、口として出てきた範囲(たぶん中心座標が使いやすいと思います)が目の範囲に含まれていればアウト、という感じです。ご参考までに、私の方で過去に作成したスクリプト(の一部)を載せますね。含まれる含まれないを判断するために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
その他の回答 (0 件)
参考
カテゴリ
Help Center および File Exchange で Simulation, Tuning, and Visualization についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!