画像で検出した顔の領域内から目と口を検出する
9 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
tsuyoshi tsunoda
am 11 Nov. 2021
Kommentiert: tsuyoshi tsunoda
am 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 Kommentar
Atsushi Ueno
am 13 Nov. 2021
「顔の領域内から目と口を検出する方法」って!もう答えを言ってるじゃないですかっ!
つまりは再帰的に、もしくはオブジェクト指向でプログラムを作るべきだって事ですかね。
Akzeptierte Antwort
Atsushi Ueno
am 13 Nov. 2021
> また、精度を上げる方法も教えていただきたいです。
今までは出来合いのカスケード検出器を使っているだけでしたが、カスケード検出器に対して実際の入力画像を追加学習させれば、検出精度が上がります。
Weitere Antworten (0)
Siehe auch
Kategorien
Mehr zu Computer Vision Toolbox finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!