画像で検出した顔の領域内から目と口を検出する
7 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
tsuyoshi tsunoda
le 11 Nov 2021
Commenté : tsuyoshi tsunoda
le 13 Nov 2021
画像の中にある目や口を検出しようと考えています。
このサイトの検出器を用いて取り組んでいるのですが、口の精度が悪いです。
そこで、検出した顔の領域内から目と口を検出して四角で囲むといったことをやりたいのですが、
顔の領域内から目と口を検出する方法が分かりません。また、精度を上げる方法も教えていただきたいです。
どなたかご教授願います。

FaceDetector = vision.CascadeObjectDetector();
EyesDetector = vision.CascadeObjectDetector('EyePairBig');
MouthDetector = vision.CascadeObjectDetector('Mouth');
I = imread('画像');
%%
Facebbox = FaceDetector(I);
Eyesbbox = EyesDetector(I);
Mouthbbox = MouthDetector(I);
%%
I = insertObjectAnnotation(I,'rectangle',Facebbox,'Face');
I = insertObjectAnnotation(I,'rectangle',Eyesbbox,'EyePairBig');
I = insertObjectAnnotation(I,'rectangle',Mouthbbox,'Mouth');
% Bounding Boxの位置は[x, y, width, height] ⇒ x座標に幅の1/6,4/6を足し、幅を1/6にする
lefteye = [Eyesbbox(1)+Eyesbbox(3)*1/6 Eyesbbox(2) Eyesbbox(3)/6 Eyesbbox(4)];
righteye = [Eyesbbox(1)+Eyesbbox(3)*4/6 Eyesbbox(2) Eyesbbox(3)/6 Eyesbbox(4)];
I = insertShape(I,'rectangle', lefteye,'Color','red','LineWidth',3);
I = insertShape(I,'rectangle',righteye,'Color','red','LineWidth',3);
%%
pointsLE = bbox2points(lefteye);
pointsLE(end+1,:) = pointsLE(1,:);
pointsRE = bbox2points(righteye);
pointsRE(end+1,:) = pointsRE(1,:);
pointsM = bbox2points(Mouthbbox);
pointsM(end+1,:) = pointsM(1,:);
%%
imshow(I)
hold on
plot(pointsM(:,1),pointsM(:,2), '*-');
plot(pointsLE(:,1),pointsLE(:,2), '*-');
plot(pointsRE(:,1),pointsRE(:,2), '*-');
hold off
1 commentaire
Atsushi Ueno
le 13 Nov 2021
「顔の領域内から目と口を検出する方法」って!もう答えを言ってるじゃないですかっ!
つまりは再帰的に、もしくはオブジェクト指向でプログラムを作るべきだって事ですかね。
Réponse acceptée
Atsushi Ueno
le 13 Nov 2021
> また、精度を上げる方法も教えていただきたいです。
今までは出来合いのカスケード検出器を使っているだけでしたが、カスケード検出器に対して実際の入力画像を追加学習させれば、検出精度が上がります。
Plus de réponses (0)
Voir également
Catégories
En savoir plus sur C4ISR dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!