简介
人脸检测与识别是当前模式识别领域的一个前沿课题,人脸识别技术就是利用计算机技术,根据数据库的人脸图像,分析提取出有效的识别信息,用来“辨认”身份的技术。人脸识别是模式识别研究的一个热点, 它在身份鉴别、信用卡识别, 护照的核对及监控系统等方面有着广泛的应用。人脸图像由于受光照、表情以及姿态等因素的影响, 使得同一个人的脸像矩阵差异也比较大。因此, 进行人脸识别时, 所选取的特征必须对上述因素具备一定的稳定性和不变性. 主元分析(pca)方法是一种有效的特征提取方法,将人脸图像表示成一个列向量, 经过pca 变换后, 不仅可以有效地降低其维数, 同时又能保留所需要的识别信息, 这些信息对光照、表情以及姿态具有一定的不敏感性. 在获得有效的特征向量后, 关键问题是设计具有良好分类能力和鲁棒性的分类器. 支持向量机(svm ) 模式识别方法,兼顾训练误差和泛化能力, 在解决小样本、非线性及高维模式识别问题中表现出许多特有的优势。
本此课程设计基于matlab,将检测与识别分开进行。其中检测部分使用实验指导书上的肤色模型算法进行,不进行赘述。识别部分采用pca算法对检测出的人脸图像进行特征提取, 再利用最邻近距离分类法对特征向量进行分类识别,将在后文具体表述。仿真结果验证了本算法是有效的。
人脸检测
源码
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)>15&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)&(r0.246)&(gg)&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);
[s1 s2]=size(bb2);
mx=0;
for k=3:4:s2-1
p=bb2(1,k)*bb2(1,k+1);
if p>mx&(bb2(1,k)/bb2(1,k+1))energy,1);
coeff=coeff(:,1:idx);
scores=scores(:,1:idx);
% 测试
acc_count=0;
for j=training_count+1:face_count_per_people
img=imresize(img,[10 10]);
score=(img(:)'-mu)/coeff';
[~,idx]=min(sum((scores-repmat(score,size(scores,1),1)).^2,2));
if ceil(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)
仿真结果及说明
样本库举例:
结果为:测试样本数量:45,正确识别率:100.00%
总结
人脸识别是一个多学科领域的挑战性难题,近30年来人脸识别的研究虽然取得了巨大的进步,但与人类的感知能力相距甚远。人脸识别还涉及到很多理论和技术问题,这一技术的不断进步还需要研究者们的不断创新和努力。本次课程设计让我对人脸识别算法有了初步的认识,了解到了pca算法,k-l变换及特征向量的提取,最近邻分类器等人脸识别所需要的知识,为我的进一步学习指明了方向。