基于matlab程序实现人脸识别
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基于matlab程序实现人脸识别
1 •人脸识别流程
1.1.1基本原理
基于YCbCr颜色空间的肤色模型进行肤色分割。在YCbCr色彩空间内对肤色进行了建模发现,肤色聚类区域在Cb- Cr子平面上的投影将缩减,与中心区域显著不同。采用这种方法的图像分割已经能够较为精确的将人脸和非人脸分割开来。1.1.2流程图
人脸识别流程图
读入原始图像
将图像转化为YCbCr颜色空
间
选取岀二值图像中的白色区
域,度量区域属性,筛选后
得到所有矩形块
■筛选特定区域(高度和宽度的比率
在(0.6-2之间,眼睛特征)
是
存储人睑的矩形区域
特殊区域根据其他信息筛
选,标记最终的人脸区域
2・人脸识别程序
(1) 人脸和非人脸区域分割程序function result = Skin(Y J Cb)Cr) %SKIN SUmmary Of this function goes here % DetaiIeCl explanation goes here a=25.39;
b=14.03; ecx=1.60; ecy=2.41;
Sita=2.53; CX=IO9.38;
cy=152.02; XiShU=[cos(sita) Sirl(Sita);-Sin(Sita) COS(Sita)];
%如果亮度大于230,则将长短轴同时扩大为原来的1.1倍if (Y>230)
a=1.1*a;
b=1.1*b;
end %根据公式进行计算Cb=doub∣Θ(Cb); Cr=double(Cr); t=[(Cb-cx);(Cr-Cy)];
temp=xishu*t;
VaIUe=(temp(1)-ecx)A2^A2+(temp(2)-ecy)A2t)A2;
%大于1则不是肤色,返回0;否则为肤色,返回1
if ValUe>1 result=O;
else
result=1;
end end
(2) 人脸的确认程序
function eye = findeye(blmage,x,y5w5h) %FINDEYE SUmmary Of this funCtiOn goes here % DetaileCl explanation goes here Part=Zeros(h,w);
%二值化
for i=y:(y+h)
for j=x:(x+w)
if blmage(i,j)==O
part(i-y+1 ,j-x+1 )=255;
else
part(i-y+1,j-x+1)=0;
end
end
end
[L,num]=bwlabel(part,8);
%如果区域中有两个以上的矩形则认为有眼睛if num<2
eye=O;
else
eye=1;
end
end
(3) 人脸识别主程序
CIear all;
%读入原始图像
l=imread(,face3.jpg,); gray=rgb2gray(l);
ycbcr=rgb2ycbcr(l)j%将图像转化为YCbCr 空间heighth=size(gray,1)% 读取图像尺寸Width=SiZe(gray j2);
for i=1:heighth %利用肤色模型二值化图像
for j=1:Width
Y=ycbcr(i,j,1);
Cb=ycbcr(i,j,2);
Cr=ycbcr(iJ,3);
if (Y<80)
gray(i,j)=O;
if(sk in (Y J Cb J Cr)==1)%根据色彩模型进行图像二值化gray(ij)=255;
else
gray(i,j)=O;
end end end
end
Se=StreI(arbitrary,,eye(5))% 二值图像形态学处理gray=imopen(gray,se);
figure;imshoW(gray)
[L,num]=bWlabel(gray,8)!%采用标记方法选出图中的白色区域
StatS=regionprops(L,l BoundingBox1); %度量区域属性n=1;%存放经过筛选以后得到的所有矩形块result=zeros(n,4);
figure,imshoW(l);
hold on;
for i=1:num %开始筛选特定区域
box=stats(i).Bo IJndin gBox;
x=box(1);%矩形坐标X
y=box⑵;%矩形坐标Y
w=box⑶;%矩形宽度W
h=box⑷;%矩形高度h
ratio=h/w;%宽度和高度的比例
UX=Uintl 6(x);
Uy=Ilin t8(y);
if ux>1
UX=UX ;
end
IJy=IJy ;
end
if W<20 H h<20∣∣ W*h<400 %矩形长宽的范围和矩形的面积可自行设定COntinUe
elseif ratio<2 && ratio>0.6 && findeye(gray,ux,uy,W,h)==1
%根据“三庭五眼,,规则高度和宽度比例应该在(062)内;
res∪lt(n∕)=[ux Uy W h];
n=n+1;
end
end
if size(result51)==1 && result(1,1)>0 %对可能是人脸的区域进行标记rectangle(,Position,,[result(1 ,1 ),result(1 ,2),result(1 ,3),result(1 ,4)],f EdgeCoIor'
else
%如果满足条件的矩形区域大于1,则再根据其他信息进行筛选
a=0;
arr1=[];arr2=[];
for m=1:size(result,1)
m1=result(m,1);
m2=result(m j2);
m3=result(m,3);
m4=result(m j4);
%得到符合和人脸匹配的数据
if m1+m3