logo资料库

基于MATLAB的人脸识别报告.doc

第1页 / 共9页
第2页 / 共9页
第3页 / 共9页
第4页 / 共9页
第5页 / 共9页
第6页 / 共9页
第7页 / 共9页
第8页 / 共9页
资料共9页,剩余部分请下载后查看
科学计算与数据处理实验报告
科学计算与数据处理实验报告
科学计算与数据处理实验报告 课程名称: 科学计算与数据处理实验 课程编号: 指导教师: 学生姓名: 学 号: 实验名称: 基于 MATLAB 实现人脸识别 成 绩: 二〇一七年十月 1
学 号 实验名称 实验目的 科学计算与数据处理实验报告 姓 名 基于 MATLAB 实现人脸识别 1、 深入研究 MATLAB 在计算机相关的某一专业领域的综合应用 2、 熟悉 MATLAB 中专业级 Toolbox 或 Simulink 的功能和用法 3、 学会综合运用 MATLAB 解决本领域科学计算与数据处理的实际问题 4、 探索如何使用 MATLAB 进行图像简单处理,进而识别人脸 实验方案 一、人脸识别的基本原理和方法 目前,人脸识别在图形图像领域中应用较为广泛,主要肤色建模方法有: 阈 值法,简单高斯模型,混合高斯模型,直方图统计和区域级检测。 通过比较 RGB,HSV,Ycbcr 空间,发现 Ycbcr 和 HSV 空间在进行人脸 肤色分割方面由于肤色范围紧密,不易受光照其他物体干扰。但是 RGB 与 HSV 空间的转换相比 RGB 到 Ycbcr 空间转换来说较为复杂些,所以我们采用 Ycbcr 空间进行人脸肤色的建模与分割。 在 YCbCr 色彩空间内对肤色进行了建模发现,肤色聚类区域在 Cb—Cr 子 平面上的投影将缩减,与中心区域显著不同。采用这种方法的图像分割已经能 够较精确的将人脸和非人脸分割开来。分割完成后进行二值化作形态学处理, 最后度量区域属性、筛选矩形块,最终标记处人脸。本文的主要任务就是编写 MATLAB 程序,实现人脸识别。 二、实验方案 基于 MATLAB 的人脸识别程序主要包含三个程序模块,人脸识别主程序、 图像分割程序以及人脸的确认程序。 图像分割程序中,利用肤色可以较精确地将人脸和非人脸区域分割开来, 得到处理后的二值化图像。 人脸的确认程序,以存储的所有矩形区域作为研究对象,当区域内有眼睛 存在时,才认为此区域为人脸区域。 人脸识别主程序由三部分构成。首先:将图像转化为 YCbCr 颜色空间,根 据色彩模型进行图像二值化,进行形态学处理,显示二值图像。其次:采用标 记方法选取出图中的白色区域,度量区域属性,存放经过筛选以后得到的所有 矩形块,筛选特定区域,存储人脸的矩形区域。最后:对于所有人脸的矩形区 域,如果满足条件的矩形区域大于 1 则再根据其他信息进行筛选,标记最终的 得到的人脸区域。 (1)人脸和非人脸区域分割程序(M 函数文件):division.m function result = division(Y,Cb,Cr) a=25.39; b=14.03; 2
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; else result=1; end end (2)人脸筛选、确认程序(M 函数文件):sure.m function eyes= sure(bimage,x,y,w,h) part=zeros(h,w); %二值化函数处理,255 和 0 for i=y:(y+h) for j=x:(x+w) if bimage(i,j)==0 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 eyes=0; else 3
eyes=1; end end (3)MATLAB 主函数 M=imread('C:\Users\Administrator\Desktop\face4.jpg');%读入原始图像 gray=rgb2gray(M); ycbcr=rgb2ycbcr(M); heighth=size(gray,1); width=size(gray,2); for i=1:heighth %将图像转化为 YCbCr 空间 %读取图像尺寸大小 %利用肤色模型二值化图像 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(division(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(M); 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); 4 %开始筛选特定区域
if ux>1 ux=ux-1; end if uy>1 uy=uy-1; end if w<40 || h<40|| w*h<700 %矩形长宽的范围和矩形的面积可自行设定,这是第二次矩形框大小 continue elseif ratio<2 && ratio>0.6 && sure(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
%最终确定人脸 if m1+m3
经过二值化处理过的图片 经过二值化处理后,初步分别出三个女士的脸部轮廓。下面需要进行筛选 脸部区域。如下图。 最终的识别人脸照片 红线矩形框内,标出的便是大致的脸部轮廓,并还原出原图。 7
2)第一次处理结果如下,与第一次处理步骤相同。 原图 二值化处理后 8
分享到:
收藏