文档库 最新最全的文档下载
当前位置:文档库 › 基于matlab程序实现人脸识别

基于matlab程序实现人脸识别

基于matlab程序实现人脸识别
基于matlab程序实现人脸识别

基于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

arr1 (a)=m3;arr2(a)=m4;

%rectangle(,Position',[m1 j m2,m3,m4],,EdgeColor√r,);

end

end

%得到人脸长度和宽度的最小区域arr3=[];arr3=sort(arr1 /ascend)*;

arr4=[] ;arr4=sort(arr2/asce nd):

%根据得到的数据标定最终的人脸区域

for m=1:size(result31)

m1=result(m,1);

m2=result(m j2);

m3=result(m j3);

m4=result(m,4);

%最终标定人脸

if m1+m3

m4=arr4(1); rectangle(,Position',[m1 ,m2j m3,m4],'EdgeColor,,'r,);

end

end

end

(4) 程序说明

人脸识别程序主要包含三个程序模块,人脸识别主程序由三部分构成。第部分:将图像转化为YCbCr颜色空间,根据色彩模型进行图像二值化,二值化图像进行形态学处理、幵运算,显示二值图像;第二部分:采用标记方法选取出图中的白色区域,度量区域属性,存放经过筛选以后得到的所有矩形块,筛选特定区域,存储人脸的矩形区域;第三部分:对于所有人脸的矩形区域,如果满足条件的矩形区域大于1则再根据其他信息进行筛选,标记最终的人脸区域。

图像分割程序中,禾U用肤色可以较为精确的将人脸和非人脸区域分割开来,得到较为精确的二值化图像。

人脸的确认程序,以存储的所有矩形区域作为研究对象,当区域内有眼睛存在

时,才认为此区域为人脸区域3运行结果

(1)第一幅图

原始图像

肤色分割的二值化图像

相关文档