口を検出するためにカスケード検出器を利用し"Mouth"検出を行いました.
実際検出を行ったところ,口を検出したほか,目をMouthと認識してしまいました.
そこで,この検出器の精度を向上させたいのですが,どのようにすれば精度を向上させられるのでしょうか.

 Akzeptierte Antwort

Shunichi Kusano
Shunichi Kusano am 18 Dez. 2020

0 Stimmen

私が試したときは、目の検出精度は口よりは高かったので、ご記載のような状況では、目の検出結果と重複していれば口ではない、といった場合分けは可能かと思います。

4 Kommentare

早汰 前川
早汰 前川 am 19 Dez. 2020
ご回答ありがとうございます.
プログラムを追加して行いたいと思います.
早汰 前川
早汰 前川 am 19 Dez. 2020
度々の質問で申し訳ありません.
if文やfor loop関連の情報を検索して見ました.
数値などの場合分けは分かるのですが,実際にご返答いただいた内容のプログラムを作ろうと思うと,
どのように書いていけばよいか分かりません.
ifの後にどのように文が続いていくのでしょうか.
Shunichi Kusano
Shunichi Kusano am 20 Dez. 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
早汰 前川
早汰 前川 am 12 Jan. 2021
ご丁寧に感謝いたします.
上記のプログラムを参考にさせていただきまして,うまくいきました.
ありがとうございました!

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Kategorien

Mehr zu Create and Customize IBIS-AMI Models finden Sie in Hilfe-Center und File Exchange

Tags

Community Treasure Hunt

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

Start Hunting!