画像で検出した顔の領域内から目と口を検出する
Show older comments
画像の中にある目や口を検出しようと考えています。
このサイトの検出器を用いて取り組んでいるのですが、口の精度が悪いです。
そこで、検出した顔の領域内から目と口を検出して四角で囲むといったことをやりたいのですが、
顔の領域内から目と口を検出する方法が分かりません。また、精度を上げる方法も教えていただきたいです。
どなたかご教授願います。

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 Comment
Atsushi Ueno
on 13 Nov 2021
「顔の領域内から目と口を検出する方法」って!もう答えを言ってるじゃないですかっ!
つまりは再帰的に、もしくはオブジェクト指向でプログラムを作るべきだって事ですかね。
Accepted Answer
More Answers (0)
Categories
Find more on C4ISR in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!