logo资料库

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

第1页 / 共12页
第2页 / 共12页
第3页 / 共12页
第4页 / 共12页
第5页 / 共12页
第6页 / 共12页
第7页 / 共12页
第8页 / 共12页
资料共12页,剩余部分请下载后查看
基于 matlab 程序实现人脸识别 1.人脸识别流程 1.1.1 基本原理 基于 YCbCr 颜色空间的肤色模型进行肤色分割。在 YCbCr 色彩空间内对肤 色进行了建模发现,肤色聚类区域在 Cb—Cr 子平面上的投影将缩减,与中心区 域显著不同。采用这种方法的图像分割已经能够较为精确的将人脸和非人脸分割 开来。 1.1.2 流程图 人脸识别流程图 2.人脸识别程序
(1)人脸和非人脸区域分割程序 function result = skin(Y,Cb,Cr) %SKIN Summary of this function goes here % Detailed explanation goes here 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 if value>1 result=0; result=1; else end end
(2)人脸的确认程序 function eye = findeye(bImage,x,y,w,h) %FINDEYE Summary of this function goes here % Detailed explanation goes here part=zeros(h,w); %二值化 for i=y:(y+h) for j=x:(x+w) if bImage(i,j)==0 part(i-y+1,j-x+1)=255; part(i-y+1,j-x+1)=0; else end end end [L,num]=bwlabel(part,8); %如果区域中有两个以上的矩形则认为有眼睛 if num<2 eye=0; else eye=1; end end (3)人脸识别主程序 clear all; %读入原始图像 I=imread('face3.jpg'); gray=rgb2gray(I);
ycbcr=rgb2ycbcr(I);%将图像转化为 YCbCr 空间 heighth=size(gray,1);%读取图像尺寸 width=size(gray,2); for i=1:heighth %利用肤色模型二值化图像 for j=1:width Y=ycbcr(i,j,1); Cb=ycbcr(i,j,2); Cr=ycbcr(i,j,3); if(Y<80) gray(i,j)=0; else if(skin(Y,Cb,Cr)==1)%根据色彩模型进行图像二值化 gray(i,j)=255; gray(i,j)=0; else end end end end se=strel('arbitrary',eye(5));%二值图像形态学处理 gray=imopen(gray,se); figure;imshow(gray) [L,num]=bwlabel(gray,8);%采用标记方法选出图中的白色区域 stats=regionprops(L,'BoundingBox');%度量区域属性 n=1;%存放经过筛选以后得到的所有矩形块 result=zeros(n,4); figure,imshow(I); hold on; for i=1:num %开始筛选特定区域 box=stats(i).BoundingBox;
x=box(1);%矩形坐标 X y=box(2);%矩形坐标 Y w=box(3);%矩形宽度 w h=box(4);%矩形高度 h ratio=h/w;%宽度和高度的比例 ux=uint16(x); uy=uint8(y); if ux>1 ux=ux-1; end if uy>1 uy=uy-1; end if w<20 || h<20|| w*h<400 %矩形长宽的范围和矩形的面积可自行设定 continue elseif ratio<2 && ratio>0.6 && findeye(gray,ux,uy,w,h)==1 %根据“三庭五眼”规则高度和宽度比例应该在(0.6,2)内; result(n,:)=[ux uy w h]; n=n+1; end end if size(result,1)==1 && result(1,1)>0 %对可能是人脸的区域进行标记 rectangle('Position',[result(1,1),result(1,2),result(1,3),result(1,4)],'EdgeColor','r'); else %如果满足条件的矩形区域大于 1,则再根据其他信息进行筛选 a=0; arr1=[];arr2=[]; for m=1:size(result,1) m1=result(m,1); m2=result(m,2);
m3=result(m,3); m4=result(m,4); %得到符合和人脸匹配的数据 if m1+m3
图像进行形态学处理、开运算,显示二值图像;第二部分:采用标记方法选取出 图中的白色区域,度量区域属性,存放经过筛选以后得到的所有矩形块,筛选特 定区域,存储人脸的矩形区域;第三部分:对于所有人脸的矩形区域,如果满足 条件的矩形区域大于 1 则再根据其他信息进行筛选,标记最终的人脸区域。 图像分割程序中,利用肤色可以较为精确的将人脸和非人脸区域分割开来, 得到较为精确的二值化图像。 人脸的确认程序,以存储的所有矩形区域作为研究对象,当区域内有眼睛存 在时,才认为此区域为人脸区域 3 运行结果 (1)第一幅图 原始图像 肤色分割的二值化图像
人脸识别图像 (2)第二幅图 原始图像 肤色分割的二值化图像
分享到:
收藏