人脸检测详细过程.docx
- 文档编号:3128253
- 上传时间:2022-11-17
- 格式:DOCX
- 页数:8
- 大小:17.76KB
人脸检测详细过程.docx
《人脸检测详细过程.docx》由会员分享,可在线阅读,更多相关《人脸检测详细过程.docx(8页珍藏版)》请在冰豆网上搜索。
人脸检测详细过程
%这个程序是对一段avi视频进行人脸检测,要求背景比较简单,
%因为把膨胀腐蚀的部分去掉了,所以实时性还不错,下面的图片是取的其中的某一帧。
clearall;
clc;
closeall;
avi=aviread('1.avi');
video={avi.cdata};
L=length(video);
aviobj=avifile('E:
\program\video_face\newmovie');
aviobj.Quality=100;
pression='None';
%fora=1:
length(video)%总循环
fora=1:
(L/4)%总循环
M=video{a};
%imshow(M);holdon;
I=double(M);
[hue,s,v]=rgb2hsv(I);
segment=zeros(size(I(:
:
1)));
im=zeros(size(I(:
:
1)));
face=zeros(size(I(:
:
1)));
cb=0.148*I(:
:
1)-0.291*I(:
:
2)+0.439*I(:
:
3)+128;
cr=0.439*I(:
:
1)-0.368*I(:
:
2)-0.071*I(:
:
3)+128;
[w,h]=size(I(:
:
1));
fori=1:
w
forj=1:
h
if140<=cr(i,j)&cr(i,j)<=165&140<=cb(i,j)&cb(i,j)<=195&0.01<=hue(i,j)&hue(i,j)<=0.1
segment(i,j)=1;
else
segment(i,j)=0;
end
end
end
im(:
:
1)=I(:
:
1).*segment(:
:
);
im(:
:
2)=I(:
:
2).*segment(:
:
);
im(:
:
3)=I(:
:
3).*segment(:
:
);
skin_region=segment;
bw_face=rgb2gray(im);
bw_face=bwboundaries(bw_face);
bw_face_sz=size(bw_face);
fork=1:
bw_face_sz
(1)
bnd=bw_face{k};
rb2=double(max(bnd));
lt2=double(min(bnd));
if(max(rb2-lt2)>20)
%rectangle('Position',[lt2
(2)左列,lt2
(1)上行,rb2
(2)-lt2
(2)宽,rb2
(1)-lt2
(1)高],'EdgeColor','g');%画矩形
%rectangle('Position',[lt2
(2),lt2
(1),rb2
(2)-lt2
(2),rb2
(1)-lt2
(1)],'EdgeColor','g');
j=lt2
(2):
rb2
(2);M(lt2
(1),j,1)=0;M(rb2
(1),j,1)=0;
i=lt2
(1):
rb2
(1);M(i,lt2
(2),1)=0;M(i,rb2
(2),1)=0;
j=lt2
(2):
rb2
(2);M(lt2
(1),j,2)=200;M(rb2
(1),j,2)=200;
i=lt2
(1):
rb2
(1);M(i,lt2
(2),2)=200;M(i,rb2
(2),2)=200;
j=lt2
(2):
rb2
(2);M(lt2
(1),j,3)=140;M(rb2
(1),j,3)=140;
i=lt2
(1):
rb2
(1);M(i,lt2
(2),3)=140;M(i,rb2
(2),3)=140;
end
end
%imshow(M);
aviobj=addframe(aviobj,uint8(M));
end%总循环结束
aviobj=close(aviobj);
mov=aviread('E:
\program\video_face\newmovie');
movie(mov);
functionresult=skin(Y,Cb,Cr)
%参数
a=25.39;
b=14.03;
ecx=1.60;
ecy=2.41;
sita=2.53;
cx=109.38;
cy=152.02;
xishu=[cos(sita)sin(sita);-sin(sita)cos(sita)];
%如果亮度大于230,则将长短轴同时扩大为原来的1.1倍
if(Y>230)
a=1.1*a;
b=1.1*b;
end
%根据公式进行计算
Cb=double(Cb);
Cr=double(Cr);
t=[(Cb-cx);(Cr-cy)];
temp=xishu*t;
value=(temp
(1)-ecx)^2/a^2+(temp
(2)-ecy)^2/b^2;
%大于1则不是肤色,返回0;否则为肤色,返回1
ifvalue>1
result=0;
else
result=1;
end
1functionfacedetection(img_name)
2%读取RGB图像
3I=imread(img_name);
4%转换为灰度图像
5gray=rgb2gray(I);
6%将图像转化为YCbCr颜色空间
7YCbCr=rgb2ycbcr(I);
8%获得图像宽度和高度
9heigth=size(gray,1);
10width=size(gray,2);
11%根据肤色模型将图像二值化
12fori=1:
heigth
13forj=1:
width
14Y=YCbCr(i,j,1);
15Cb=YCbCr(i,j,2);
16Cr=YCbCr(i,j,3);
17if(Y<80)
18gray(i,j)=0;
19else
20if(skin(Y,Cb,Cr)==1)
21gray(i,j)=255;
22else
23gray(i,j)=0;
24end
25end
26end
27end
28%二值图像形态学处理
29SE=strel('arbitrary',eye(5));
30%gray=bwmorph(gray,'erode');
31%imopen先腐蚀再膨胀
32gray=imopen(gray,SE);
33%imclose先膨胀再腐蚀
34%gray=imclose(gray,SE);
35imshow(gray);
36%取出图片中所有包含白色区域的最小矩形
37[L,num]=bwlabel(gray,8);
38STATS=regionprops(L,'BoundingBox');
39%存放经过筛选以后得到的所有矩形块
40n=1;
41result=zeros(n,4);
42figure,imshow(I);
43holdon;
44fori=1:
num
45box=STATS(i).BoundingBox;
46x=box
(1);%矩形坐标x
47y=box
(2);%矩形坐标y
48w=box(3);%矩形宽度w
49h=box(4);%矩形高度h
50%宽度和高度的比例
51ratio=h/w;
52ux=uint8(x);
53uy=uint8(y);
54ifux>1
55ux=ux-1;
56end
57ifuy>1
58uy=uy-1;
59end
60%可能是人脸区域的矩形应满足以下条件:
61%1、高度和宽度必须都大于20,且矩形面积大于400
62%2、高度和宽度比率应该在范围(0.6,2)内
63%3、函数findeye返回值为1
64ifw<20||h<20||w*h<400
65continue
66elseifratio<2&&ratio>0.6&&findeye(gray,ux,uy,w,h)==1
67%记录可能为人脸的矩形区域
68result(n,:
)=[uxuywh];
69n=n+1;
70end
71end
72%对可能是人脸的区域进行标记
73ifsize(result,1)==1&&result(1,1)>0
74rectangle('Position',[result(1,1),result(1,2),result(1,3),result(1,4)],'EdgeColor','r');
75else
76%如果满足条件的矩形区域大于1则再根据其他信息进行筛选
77form=1:
size(result,1)
78m1=result(m,1);
79m2=result(m,2);
80m3=result(m,3);
81m4=result(m,4);
82%标记最终的人脸区域
83ifm1+m3 84rectangle('Position',[m1,m2,m3,m4],'EdgeColor','r'); 85end 86end 87end 四、主函数(main.m) 88%清理窗口 89closeall 90clearall 91clc 92%输入图像名字 93img_name=input('请输入图像名字(图像必须为RGB图像,输入0结束): ','s'); 94%当输入0时结束 95while~strcmp(img_name,'0') 96%进行人脸识别 97facedetection(img_name); 98img_name=input('请输入图像名字(图像必须为RGB图像,输入0结束): ','s'); 99end R187G131B68 二、眼睛粗略定位(findeye.m) 1%判断二值图像中是否含有可能是眼睛的块 2%bImage----二值图像 3%x---------矩形左上角顶点X坐标 4%y---------矩形左上角顶点Y坐标 5%w---------矩形宽度 6%h---------矩形长度 7%如果有则返回值eye等于1,否则为0 8functioneye=findeye(bImage,x,y,w,h) 9%根据矩
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 检测 详细 过程