基于matlab程序实现人脸识别
1.人脸识别流程
1.1.1基本原理
基于YCbCr颜色空间的肤色模型进行肤色分割。在YCbCr色彩空间内对肤色进行了建模发现,肤色聚类区域在Cb—Cr子平面上的投影将缩减,与中心区域显著不同。采用这种方法的图像分割已经能够较为精确的将人脸和非人脸分割开来。
1.1.2流程图
人脸识别流程图
读入原始图像将图像转化为YCbCr颜色空间利用肤色模型二值化图像并作形态学处理选取出二值图像中的白色区域,度量区域属性,筛选后得到所有矩形块否筛选特定区域(高度和宽度的比率在(0.6~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; else
result=1; 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; else
part(i-y+1,j-x+1)=0; 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; else
gray(i,j)=0; 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;
相关推荐: