数字图像处理课程设计——人脸检测与识别文档格式.doc
《数字图像处理课程设计——人脸检测与识别文档格式.doc》由会员分享,可在线阅读,更多相关《数字图像处理课程设计——人脸检测与识别文档格式.doc(8页珍藏版)》请在冰豆网上搜索。
经过PCA
变换后,
不仅可以有效地降低其维数,
同时又能保留所需要的识别信息,
这些信息对光照、表情以及姿态具有一定的不敏感性.
在获得有效的特征向量后,
关键问题是设计具有良好分类能力和鲁棒性的分类器.
支持向量机(SVM
)
模式识别方法,兼顾训练误差和泛化能力,
在解决小样本、非线性及高维模式识别问题中表现出许多特有的优势。
本此课程设计基于MATLAB,将检测与识别分开进行。
其中检测部分使用实验指导书上的肤色模型算法进行,不进行赘述。
识别部分采用PCA算法对检测出的人脸图像进行特征提取,
再利用最邻近距离分类法对特征向量进行分类识别,将在后文具体表述。
仿真结果验证了本算法是有效的。
二、人脸检测
1.源码
img=imread('
D:
\std_test_images\face3.jpg'
);
figure;
imshow(img);
R=img(:
:
1);
G=img(:
2);
B=img(:
3);
faceRgn1=(R>
95)&
(G>
40)&
(B>
20)&
max(img,[],3)-min(img,[],3)>
15&
abs(R-G)>
R>
B;
imshow(faceRgn1);
r=double(R)./double(sum(img,3));
g=double(G)./double(sum(img,3));
Y=0.3*R+0.59*G+0.11*B;
faceRgn2=(r>
0.333)&
(r<
0.664)&
(g>
0.246)&
(g<
0.398)&
(r>
g)&
g>
=0.5-0.5*r;
imshow(faceRgn2);
Q=faceRgn1.*faceRgn2;
P=bwlabel(Q,8);
BB=regionprops(P,'
Boundingbox'
BB1=struct2cell(BB);
BB2=cell2mat(BB1);
[s1s2]=size(BB2);
mx=0;
fork=3:
4:
s2-1
p=BB2(1,k)*BB2(1,k+1);
ifp>
mx&
(BB2(1,k)/BB2(1,k+1))<
1.8
mx=p;
j=k;
holdon;
rectangle('
position'
[BB2(1,j-2),BB2(1,j-1),BB2(1,j),BB2(1,j+1)],'
linewidth'
3,'
edgecolor'
'
r'
holdoff;
end
end
2.处理过程
三、人脸识别
1.算法简述
在Matlab2012a版本中添加了对PCA算法的支持,由于水平有限我选择直接调用。
在本次课程设计中,PCA算法又分为样本训练和人脸识别两个过程,在样本训练阶段,将样本库(每组15张共15组人脸图像,对每组前11张进行特征提取用于训练,后4张用于检测)中的人脸图像转换为特征向量表示,并投影到PCA子空间,最终将这些向量数据保存到训练数据库中。
而在识别阶段,同样将待识别的人脸图像使用PCA子空间的向量表示,通过计算待识别图像的向量与样本中的向量之间的距离,寻找其中最相近的人脸图像,作为识别结果。
2.源码
clear
clc
%样本数量15*11
people_count=15;
face_count_per_people=11;
%训练比率,设置为75%识别正确率可达100%
training_ratio=.75;
%能量
energy=90;
training_count=floor(face_count_per_people*training_ratio);
training_samples=[];
path_mask='
\\pca_face_rec\\%03d\\%02d.jpg'
;
%训练
fori=1:
people_count
forj=1:
training_count
img=im2double(imread(sprintf(path_mask,i,j)));
img=imresize(img,[1010]);
%归一化至50*50
ifndims(img)==3
img=rgb2gray(img);
end
training_samples=[training_samples;
img(:
)'
];
mu=mean(training_samples);
[coeff,scores,~,~,explained]=pca(training_samples);
idx=find(cumsum(explained)>
energy,1);
coeff=coeff(:
1:
idx);
scores=scores(:
%测试
acc_count=0;
forj=training_count+1:
face_count_per_people
score=(img(:
-mu)/coeff'
[~,idx]=min(sum((scores-repmat(score,size(scores,1),1)).^2,2));
ifceil(idx/training_count)==i
acc_count=acc_count+1;
test_count=(people_count*(face_count_per_people-training_count));
acc_ratio=acc_count/test_count;
fprintf('
测试样本数量:
%d,正确识别率:
%2.2f%%'
test_count,acc_ratio*100)
3.仿真结果及说明
样本库举例:
结果为:
45,正确识别率:
100.00%
四、总结
人脸识别是一个多学科领域的挑战性难题,近30年来人脸识别的研究虽然取得了巨大的进步,但与人类的感知能力相距甚远。
人脸识别还涉及到很多理论和技术问题,这一技术的不断进步还需要研究者们的不断创新和努力。
本次课程设计让我对人脸识别算法有了初步的认识,了解到了PCA算法,K-L变换及特征向量的提取,最近邻分类器等人脸识别所需要的知识,为我的进一步学习指明了方向。