基于matlab的人脸识别算法(PCA)

合集下载

基于MATLAB的人脸识别系统的研究毕业论文

基于MATLAB的人脸识别系统的研究毕业论文

长沙民政职业技术学院毕业实践报告 题目:基于MATLAB 勺人脸识别系统的研扌旨导老师: ______ 谭刚林 ______________________ 系 另寸: 电子信息工程系 __________________ 班 级: ______________ 电子1133 ____________学号:1119013333 1119013334 1119013335 姓 名: 刘盼符思遥樊阳辉类型:2014年5月5日基于MATLAB勺人脸识别系统的研究符思遥、刘盼、樊阳辉指导老师:谭刚林苏宏艮马勇赞【摘要】人脸检测与识别技术是计算机视觉和模式识别等学科的研究热点之一,是进行身份认证最友好直接的手段,在出入境安全检查、内容检索、证件验证、门禁系统等领域都具有十分广泛的应用前景。

多年来,人脸识别技术中的很多问题都被深入地研究,而且大量的算法已经成功应用于人脸识别。

本文在研究了人脸检测和身份识别的关键技术和相关理论的基础上,重点讨论了在光照和背景不同的条件下,彩色静止图像的人脸检测和身份识别问题,它包括基于肤色分割的人脸粗检测、基于人眼检测的几何归一化和基于二维主成分分析法(2DPCA的身份识别。

本文主要工作如下:首先对彩色图像进行光照补偿,其次通过肤色检测获得可能的脸部区域并二值化,再用形态学开闭运算对图像进行滤波处理并通过一定规则确定人脸区域,然后运用水平垂直投影定位人眼坐标以此对人脸进行几何归一化,识别部分运用2DPCA勺图像映射方法对灰度图进行特征匹配,最后输出识别结果并进行语音播报。

实验结果表明,结合肤色和面部几何特征的算法能够对人脸进行较快速和准确的定位,同时2DPCAT法运用于身份识别也能达到较高的识别率。

本毕业设计对实际应用具有一定的参考价值,该系统的操作流程和输入输出方式是以实际应用为出发点,可应用于公安机关证件验证以及日常家庭的自动门禁系统等。

【关键词】人脸检测;肤色分割;人眼检测;2DPCA特征提取1绪论 (1)1.1选题的背景 (1)1.2人脸识别系统 (2)1.3人脸识别的典型方法 (2)2基于YCbCr颜色空间的肤色分割 (3)2.1三种色彩空间 (3)2.1.1 RGB色彩空间 (3)3基于2DPCA特征提取的身份识别 (4)3.1 2DPCA算法实验结果与分析 (5)3.1.1实验用数据库 (5)3.1.2实验结果与分析 (5)3.1.3 结论 (7)4人脸检测与识别系统设计与实现 (7)4.1系统环境 (7)4.2人脸检测与识别系统框图 (7)4.3系统功能模块 (8)4.4实验结果分析 (9)5总结与展望 (10)5.1总结 (10)5.2展望 (10)参考文献 (12)1绪论1.1选题的背景近年来随着计算机技术和互联网的发展,信息技术的安全变得越来越重要,生物特征识别技术得到广泛研究与开发,如人脸识别、指纹识别、掌形识别等。

Matlab技术面部表情识别与情感分析

Matlab技术面部表情识别与情感分析

Matlab技术面部表情识别与情感分析近年来,随着计算机视觉和人工智能的发展,面部表情识别与情感分析成为了研究的热点。

在各个领域,包括人机交互、心理学和市场研究等,对于准确分析和理解人们的情感和表情,这项技术具有重要的应用价值。

Matlab作为一种流行的科学计算软件,具有强大的图像处理和模式识别功能,在面部表情识别与情感分析中发挥着重要的作用。

首先,面部表情识别是通过分析面部特征,包括眼睛、眉毛、嘴唇等部位的变化,来判断人的情绪状态。

Matlab提供了丰富的图像处理工具箱,可以对面部图片进行预处理、特征提取和分类。

例如,通过使用Matlab提供的Haar级联分类器,可以检测面部区域,并使用典型的图像特征,如梯度直方图、局部二值模式等,来捕捉面部表情的特征。

同时,Matlab还支持各种分类算法,如支持向量机、神经网络和决策树等,可以根据提取的面部特征进行训练和分类。

其次,情感分析是通过对文本、音频或图像等媒体数据进行分析,来推断人们的情绪状态和情感倾向。

在基于图像的情感分析中,Matlab提供了丰富的图像处理和特征提取函数。

通过对面部图片进行增强、滤波和二值化等预处理操作,可以提取出图像中的感兴趣区域,并计算出相关的纹理和颜色特征。

例如,使用Matlab的纹理特征函数可以提取出面部图片的熵、对比度和能量等纹理信息,这些信息可以反映面部表情的细微变化。

在特征提取的基础上,可以使用机器学习算法,如朴素贝叶斯和随机森林等,根据特征的统计分布和关联性来进行情感分类和分析。

此外,Matlab还提供了人脸数据库和算法库,方便研究人员进行面部表情识别和情感分析的实验。

例如,AT&T数据库和FER2013数据库提供了大量的面部表情图片和相应的标签,可以用于训练和验证算法的效果。

同时,Matlab还提供了一些开源的面部表情识别和情感分析算法,如Active Appearance Model (AAM)、Facial Action Coding System (FACS)和Convolutional Neural Network (CNN)等,这些算法可以作为研究的基准和参考。

如何使用Matlab进行人脸检测和人脸识别

如何使用Matlab进行人脸检测和人脸识别

如何使用Matlab进行人脸检测和人脸识别人脸检测和人脸识别是计算机视觉领域中的重要技术应用,可以广泛用于人脸识别系统、人脸支付、安全监控等众多领域。

本文将介绍如何使用Matlab进行人脸检测和人脸识别。

1. 背景介绍人脸检测和人脸识别技术的出现,为计算机系统实现对人脸的自动分析和识别提供了可能。

人脸检测是指从一幅图像或视频序列中确定是否存在人脸,并找出人脸的位置和大小。

而人脸识别则是在检测到的人脸图像上进行特征提取和模式匹配,以实现对人脸的身份识别。

2. 人脸检测在Matlab中,可以使用Viola-Jones算法进行人脸检测。

该算法通过构造Haar特征与Adaboost集成学习算法相结合,能够在较短的时间内实现高效的人脸检测。

具体操作如下:2.1 加载图像首先,在Matlab中加载需要进行人脸检测的图像。

可以使用imread函数进行图像加载,并将其转换为灰度图像进行处理。

例如:```Matlabimage = imread('face.jpg');gray_image = rgb2gray(image);```2.2 构建人脸检测器在Matlab中,可以使用vision.CascadeObjectDetector对象构建人脸检测器。

该对象可以通过Viola-Jones算法进行人脸检测。

具体代码如下:```MatlabfaceDetector = vision.CascadeObjectDetector();bbox = step(faceDetector, gray_image);```2.3 显示检测结果最后,可以使用insertObjectAnnotation函数将检测到的人脸位置在原始图像上标记出来。

代码示例如下:```Matlabdetected_image = insertObjectAnnotation(image, 'rectangle', bbox, 'Face');imshow(detected_image);```3. 人脸识别在Matlab中,可以使用基于人脸特征的Eigenface、Fisherface和LBPH等算法进行人脸识别。

基于主成分分析(PCA)的人脸识别技术

基于主成分分析(PCA)的人脸识别技术

基于主成分分析(PCA)的⼈脸识别技术本科期间做的⼀个课程设计,觉得⽐较好玩,现将之记录下来,实验所⽤。

1、实验⽬的(1)学习主成分分析(PCA)的基础知识;(2)了解PCA在⼈脸识别与重建⽅⾯的应⽤;(3)认识数据降维操作在数据处理中的重要作⽤;(4)学习使⽤MATLAB软件实现PCA算法,进⾏⼈脸识别,加深其在数字图像处理中解决该类问题的应⽤流程。

2、实验简介(背景及理论分析)近年来,由于恐怖分⼦的破坏活动发⽣越发频繁,包括⼈脸识别在内的⽣物特征识别再度成为⼈们关注的热点,各国均纷纷增加了对该领域研究的投⼊。

同其他⽣物特征识别技术,如指纹识别、语⾳识别、虹膜识别、DNA识别等相⽐,⼈脸识别具有被动、友好、⽅便的特点。

该技术在公众场合监控、门禁系统、基于⽬击线索的⼈脸重构、嫌疑犯照⽚的识别匹配等领域均有⼴泛应⽤。

⼈脸识别技术是基于⼈的脸部特征,对输⼊的⼈脸图像或者视频流,⾸先判断其是否存在⼈脸。

如果存在⼈脸,则进⼀步的给出每个脸的位置、⼤⼩和各个主要⾯部器官的位置信息。

其次并依据这些信息,进⼀步提取每个⼈脸中所蕴涵的⾝份特征,并将其与已知的⼈脸进⾏对⽐,从⽽识别每个⼈脸的⾝份。

⼴义的⼈脸识别实际包括构建⼈脸识别系统的⼀系列相关技术,包括⼈脸图像采集、⼈脸定位、⼈脸识别预处理、⾝份确认以及⾝份查找等;⽽狭义的⼈脸识别特指通过⼈脸进⾏⾝份确认或者⾝份查找的技术或系统。

我们在处理有关数字图像处理⽅⾯的问题时,⽐如经常⽤到的图像查询问题:在⼀个⼏万或者⼏百万甚⾄更⼤的数据库中查询⼀幅相近的图像。

其中主成分分析(PCA)是⼀种⽤于数据降维的⽅法,其⽬标是将⾼维数据投影到较低维空间。

PCA形成了K-L变换的基础,主要⽤于数据的紧凑表⽰。

在数据挖掘的应⽤中,它主要应⽤于简化⼤维数的数据集合,减少特征空间维数,可以⽤较⼩的存储代价和计算复杂度获得较⾼的准确性。

PCA法降维分类原理如下图所⽰:如上图所⽰,其中五⾓星表⽰⼀类集合,⼩圆圈表⽰另⼀类集合。

Matlab在视频人脸检测与人脸识别中的应用技巧

Matlab在视频人脸检测与人脸识别中的应用技巧

Matlab在视频人脸检测与人脸识别中的应用技巧人脸检测和人脸识别是计算机视觉领域中的重要研究方向,近年来得到了广泛的应用。

在视频处理中,人脸的准确检测和识别是实现许多高级应用的基础。

Matlab作为一种功能强大的数学建模与仿真软件,提供了丰富的图像处理工具箱,使得人脸检测与识别算法的实现变得简单与高效。

一、图像预处理在进行人脸检测与识别之前,通常需要对图像进行预处理,以提高算法的准确性。

图像预处理的过程包括灰度化、直方图均衡化、尺寸归一化等。

利用Matlab的图像处理工具箱,可以快速实现这些预处理操作。

1.1 灰度化灰度化是将彩色图像转换为灰度图像的过程,将去除色彩信息,使图像变得更易处理。

在Matlab中,使用rgb2gray函数可以方便地将彩色图像转换为灰度图像。

1.2 直方图均衡化直方图均衡化是一种增强图像对比度的方法,通过对图像的灰度直方图进行变换来实现。

在Matlab中,使用histeq函数可以对图像的灰度直方图进行均衡化操作,提高图像的细节显示能力。

1.3 尺寸归一化不同的人脸图像具有不同的尺寸和角度,这对人脸检测与识别算法会造成影响。

为了提高算法的鲁棒性,通常需要将人脸图像进行尺寸归一化处理。

在Matlab中,可以使用imresize函数将图像进行缩放,使得人脸图像具有相同的尺寸。

二、人脸检测人脸检测是指在一幅图像中自动识别和定位人脸的过程,是人脸识别的首要步骤。

Matlab提供了多种人脸检测算法的实现,其中常用的有Haar特征分类器和基于深度学习的卷积神经网络(CNN)。

2.1 Haar特征分类器Haar特征分类器是一种基于机器学习的人脸检测算法,可以通过训练集的正负样本学习出人脸的特征。

在Matlab中,可以使用vision.CascadeObjectDetector对象和trainCascadeObjectDetector函数来实现Haar特征分类器的训练与检测。

2.2 基于深度学习的卷积神经网络(CNN)近年来,深度学习在图像处理领域取得了巨大的突破,其中卷积神经网络是一种非常有效的人脸检测方法。

人脸识别PCA算法matlab实现和详细步骤讲解

人脸识别PCA算法matlab实现和详细步骤讲解

人脸识别% FaceRec.m% PCA 人脸识别修订版,识别率88%% calc xmean,sigma and its eigen decompositionallsamples=[];%所有训练图像for i=1:40for j=1:5a=imread(strcat('e:\ORL\s',num2str(i),'\',num2str(j),'.jpg'));% imshow(a);b=a(1:112*92); % b 是行矢量1×N,其中N=10304,提取顺序是先列后行,即从上到下,从左到右b=double(b);allsamples=[allsamples; b]; % allsamples 是一个M * N 矩阵,allsamples 中每一行数据代表一张图片,其中M=200endendsamplemean=mean(allsamples); % 平均图片,1 × Nfor i=1:200 xmean(i,:)=allsamples(i,:)-samplemean; % xmean 是一个M × N 矩阵,xmean 每一行保存的数据是“每个图片数据-平均图片”end;% 获取特征值及特征向量sigma=xmean*xmean'; % M * M 阶矩阵[v d]=eig(sigma);d1=diag(d);% 按特征值大小以降序排列dsort = flipud(d1);vsort = fliplr(v);%以下选择90%的能量dsum = sum(dsort);dsum_extract = 0;p = 0;while( dsum_extract/dsum < 0.9)p = p + 1;dsum_extract = sum(dsort(1:p));endi=1;% (训练阶段)计算特征脸形成的坐标系base = xmean' * vsort(:,1:p) * diag(dsort(1:p).^(-1/2));% base 是N×p 阶矩阵,除以dsort(i)^(1/2)是对人脸图像的标准化(使其方差为1)% 详见《基于PCA 的人脸识别算法研究》p31% xmean' * vsort(:,i)是小矩阵的特征向量向大矩阵特征向量转换的过程%while (i<=p && dsort(i)>0)% base(:,i) = dsort(i)^(-1/2) * xmean' * vsort(:,i); % base 是N×p 阶矩阵,除以dsort(i)^(1/2)是对人脸图像的标准化(使其方差为1)% 详见《基于PCA 的人脸识别算法研究》p31% i = i + 1; % xmean' * vsort(:,i)是小矩阵的特征向量向大矩阵特征向量转换的过程%end% 以下两行add by gongxun 将训练样本对坐标系上进行投影,得到一个 M*p 阶矩阵allcoor allcoor = allsamples * base; % allcoor 里面是每张训练人脸图片在M*p 子空间中的一个点,即在子空间中的组合系数,accu = 0; % 下面的人脸识别过程中就是利用这些组合系数来进行识别% 测试过程for i=1:40for j=6:10 %读入40 x 5 副测试图像a=imread(strcat('e:\ORL\s',num2str(i),'\',num2str(j),'.jpg'));b=a(1:10304);b=double(b);tcoor= b * base; %计算坐标,是1×p 阶矩阵for k=1:200mdist(k)=norm(tcoor-allcoor(k,:));end;%三阶近邻[dist,index2]=sort(mdist);class1=floor( (index2(1)-1)/5 )+1;class2=floor((index2(2)-1)/5)+1;class3=floor((index2(3)-1)/5)+1;if class1~=class2 && class2~=class3class=class1;elseif class1==class2class=class1;elseif class2==class3class=class2;end;if class==iaccu=accu+1;end;end;end;accuracy=accu/200 %输出识别率特征人脸% eigface.mfunction [] = eigface()% calc xmean,sigma and its eigen decompositionallsamples=[];%所有训练图像for i=1:40for j=1:5a=imread(strcat('e:\ORL\s',num2str(i),'\',num2str(j),'.jpg'));% imshow(a);b=a(1:112*92); % b 是行矢量1×N,其中N=10304,提取顺序是先列后行,即从上到下,从左到右b=double(b);allsamples=[allsamples; b]; % allsamples 是一个M * N 矩阵,allsamples 中每一行数据代表一张图片,其中M=200endendsamplemean=mean(allsamples); % 平均图片,1 × Nfor i=1:200 xmean(i,:)=allsamples(i,:)-samplemean; % xmean 是一个M × N 矩阵,xmean 每一行保存的数据是“每个图片数据-平均图片”end;% 获取特征值及特征向量sigma=xmean*xmean'; % M * M 阶矩阵[v d]=eig(sigma);d1=diag(d);% 按特征值大小以降序排列dsort = flipud(d1);vsort = fliplr(v);%以下选择90%的能量dsum = sum(dsort);dsum_extract = 0;p = 0;while( dsum_extract/dsum < 0.9)p = p + 1;dsum_extract = sum(dsort(1:p));endp = 199;% (训练阶段)计算特征脸形成的坐标系%while (i<=p && dsort(i)>0)% base(:,i) = dsort(i)^(-1/2) * xmean' * vsort(:,i); % base 是N×p 阶矩阵,除以dsort(i)^(1/2)是对人脸图像的标准化,详见《基于PCA 的人脸识别算法研究》p31% i = i + 1; % xmean' * vsort(:,i)是小矩阵的特征向量向大矩阵特征向量转换的过程%endbase = xmean' * vsort(:,1:p) * diag(dsort(1:p).^(-1/2));% 生成特征脸for (k=1:p),temp = reshape(base(:,k), 112,92);newpath = ['d:\test\' int2str(k) '.jpg'];imwrite(mat2gray(temp), newpath);endavg = reshape(samplemean, 112,92);imwrite(mat2gray(avg), 'd:\test\average.jpg');% 将模型保存save('e:\ORL\model.mat', 'base', 'samplemean');人脸重建% Reconstruct.mfunction [] = reconstruct()load e:\ORL\model.mat;% 计算新图片在特征子空间中的系数img = 'D:\test2\10.jpg'a=imread(img);b=a(1:112*92); % b 是行矢量1×N,其中N=10304,提取顺序是先列后行,即从上到下,从左到右b=double(b);b=b-samplemean;c = b * base; % c 是图片a 在子空间中的系数, 是1*p 行矢量% 根据特征系数及特征脸重建图% 前15 个t = 15;temp = base(:,1:t) * c(1:t)';temp = temp + samplemean';imwrite(mat2gray(reshape(temp, 112,92)),'d:\test2\t1.jpg'); % 前50 个t = 50;temp = base(:,1:t) * c(1:t)';temp = temp + samplemean';imwrite(mat2gray(reshape(temp, 112,92)),'d:\test2\t2.jpg'); % 前100 个t = 100;temp = base(:,1:t) * c(1:t)';temp = temp + samplemean';imwrite(mat2gray(reshape(temp, 112,92)),'d:\test2\t3.jpg'); % 前150 个t = 150;temp = base(:,1:t) * c(1:t)';temp = temp + samplemean';imwrite(mat2gray(reshape(temp, 112,92)),'d:\test2\t4.jpg'); % 前199 个t = 199;temp = base(:,1:t) * c(1:t)';temp = temp + samplemean';imwrite(mat2gray(reshape(temp, 112,92)),'d:\test2\t5.jpg');基于2DPCA与(2D)2PCA的人脸识别(第二版)。

人脸识别课程设计报告

人脸识别课程设计报告

用Matlab实现人脸识别学院:信息工程学院班级:计科软件普131成员:一、问题描述在一个人脸库中,有15 个人,每人有11 幅图像。

要求选定每一个人的若干幅图像组成样本库,由样本库得到特征库。

再任取图像库的一张图片,识别它的身份。

对于一幅图像可以看作一个由像素值组成的矩阵,也可以扩展开,看成一个矢量。

如一幅N*N象素的图像可以视为长度为N2的矢量,这样就认为这幅图像是位于N2维空间中的一个点,这种图像的矢量表示就是原始的图像空间,但是这个空间仅是可以表示或者检测图像的许多个空间中的一个。

不管子空间的具体形式如何,这种方法用于图像识别的基本思想都是一样的,首先选择一个合适的子空间,图像将被投影到这个子空间上,然后利用对图像的这种投影间的某种度量来确定图像间的相似度,最常见的就是各种距离度量。

因此,本次采用PCA算法确定一个子空间,最后使用最小距离法进行识别,并用matlab实现。

二、PCA 原理和人脸识别方法1)K-L 变换K-L 变换以原始数据的协方差矩阵的归一化正交特征矢量构成的正交矩阵作为变换矩阵,对原始数据进行正交变换,在变换域上实现数据压缩。

它具有去相关性、能量集中等特性,属于均方误差测度下,失真最小的一种变换,是最能去除原始数据之间相关性的一种变换。

PCA 则是选取协方差矩阵前k 个最大的特征值的特征向量构成K-L 变换矩阵。

2)主成分的数目的选取保留多少个主成分取决于保留部分的累积方差在方差总和中所占百分比(即累计贡献率),它标志着前几个主成分概括信息之多寡。

实践中,粗略规定一个百分比便可决定保留几个主成分;如果多留一个主成分,累积方差增加无几,便不再多留。

3)人脸空间建立假设一幅人脸图像包含N 个像素点,它可以用一个N 维向量Γ表示。

这样,训练样本库就可以用Γi(i=1,...,M)表示。

协方差矩阵C 的正交特征向量就是组成人脸空间的基向量,即特征脸。

将特征值由大到小排列:λ1≥λ2≥...≥λr,其对应的特征向量为μk。

PCA用于人脸特征提取及Matlab实现

PCA用于人脸特征提取及Matlab实现

随机过程PCA用于人脸识别附Matlab代码于琦2011/10/27学号:2009011149【摘要】人脸识别技术是近来非常活跃的研究领域,它综合多学科知识,且应用非常广泛。

采用主元分析法(PCA)进行人脸识别的经典方法之一。

本文利用Matlab在ORL人脸库上实现PCA初步人脸识别,包括图像特征提取、人脸重构与识别方法设计。

讨论了用奇异值分解等方法简化特征向量求解,并详细阐述其在Matlab中的实现过程。

结合ORL人脸库自身特点,通过对特征值和特征脸的分析进行合理取舍,提高了识别率。

【介绍】“人脸识别是一项热门的计算机技术研究领域,它属于生物特征识别技术,是对生物体(一般特指人)本身的生物特征来区分生物体个体。

更好的解决该问题将有助于身份确认和身份查找等应用、促进众多学科的发展。

”“目前,人脸识别的方法可以分为5类,分别为基于特征脸(PCA)的人脸识别方法,神经网络的人脸识别方法,弹性图匹配的人脸识别方法,线段Hausdorff 距离(LHD) 的人脸识别方法支持向量机(SVM) 的人脸识别方法。

其中给予特征脸的人脸识别是传统方法,基于K-L 变换(PCA)的人脸识别方法又叫特征脸方法、本征脸方法(Eigenface),最早由Turk 和Pentland 提出。

它有均方误差最小,降维减少计算量,主分量特性稳定等优点。

”“由于PCA较之于前几种方法相对简单,故本文对PCA算法进行研究并用Matlab 给出实现。

”“本文的结构安排如下:第二章模型(Model)及基本理论和方法(Basic Theory and Method),第三章方法(Method)及方法分析(Analysis of Method),第四章算法(Algorithm)及算法分析(Analysis of Algorithm),第五章数值结果及讨论(Discussion),第六章结论(Conclusion)。

第二章模型及基本理论和方法采用PCA对原始数据的处理,通常有三个方面的作用—降维、相关性去除、概率估计。

Matlab中的人脸识别与人脸特征提取

Matlab中的人脸识别与人脸特征提取

Matlab中的人脸识别与人脸特征提取近年来,随着计算机技术的快速发展和应用的普及,人脸识别技术逐渐进入了我们的生活。

无论是在安全领域的门禁系统、身份验证应用,还是在娱乐领域的人脸美化软件,人脸识别都发挥着重要的作用。

而在人脸识别技术的实现中,人脸特征提取是一个关键的环节。

本文将介绍在Matlab中实现人脸识别和人脸特征提取的方法与技巧。

在Matlab中,有许多经典的人脸识别算法可供选择,其中最为常见且被广泛应用的是基于主成分分析(PCA)的人脸识别算法。

PCA是一种经典的降维算法,它通过线性变换将高维数据映射到低维空间中,从而捕捉数据的主要特征。

在人脸识别中,我们可以将每张人脸的像素矩阵视为一个高维数据向量,利用PCA算法将其映射到一个低维特征空间中。

在特征空间中,每张人脸都可以表示为一个特征向量,就像每个人都有自己独特的“人脸特征码”一样。

要在Matlab中实现基于PCA的人脸识别,首先需要收集一组包含多个人脸的图像数据集作为训练样本。

然后,将每个人脸的像素矩阵展开成一个列向量,并将这些列向量按列排成一个矩阵,构成一个大的数据矩阵。

接下来,通过对数据矩阵进行协方差矩阵分解和特征值分解,可以得到一组特征向量。

这些特征向量被称为“特征脸”,它们是训练样本中人脸数据的主要变化方向。

最后,通过计算待识别人脸与训练样本中每个人脸的特征向量的距离,并找出距离最小的特征向量所对应的人脸,即可完成人脸识别的过程。

除了PCA算法,还有其他一些在Matlab中常用的人脸识别算法,如线性判别分析(LDA)算法、小波变换、局部二值模式(LBP)等。

这些算法在原理和实现上各有特点,可以根据实际需求选择合适的算法进行人脸识别。

在人脸识别之前,首先需要对输入的人脸图像进行预处理。

通常的预处理步骤包括灰度化、直方图均衡化和人脸检测。

灰度化是将彩色图像转换为灰度图像,降低了计算复杂度,同时保留了图像的关键信息。

直方图均衡化可以增强图像的对比度,使得人脸特征更加明显。

MATLAB中的人脸检测与人脸关键点定位技术

MATLAB中的人脸检测与人脸关键点定位技术

MATLAB中的人脸检测与人脸关键点定位技术人脸检测与人脸关键点定位是计算机视觉中一个重要的课题,它在许多应用领域都有着广泛的应用,如人脸识别、人机交互、表情分析等。

MATLAB作为一种非常强大的科学计算软件,也提供了丰富的工具和函数来实现这些功能。

在本文中,将探讨MATLAB中的人脸检测与人脸关键点定位技术,并介绍其原理和具体实现方式。

一、人脸检测技术人脸检测是计算机视觉中的一项基础任务,其目标是在给定的图像中准确地识别出人脸的位置。

在MATLAB中,人脸检测通常基于基于统计模型的方法,如Haar特征和级联分类器。

1. Haar特征Haar特征是一种用于物体检测的特征描述方法,它通过计算图像中不同区域的灰度差异来表示目标物体的特征。

在人脸检测中,Haar特征可以用来检测人脸的各种细节,如眼睛、鼻子、嘴巴等。

MATLAB提供了一系列函数和工具箱来计算和提取Haar特征,以及构建Haar特征分类器。

2. 级联分类器级联分类器是一种常用的目标检测方法,它通过级联多个简单的分类器来实现对复杂目标的检测。

在人脸检测中,级联分类器可以用来筛选候选区域,并排除一些不可能是人脸的区域,从而提高检测的准确率。

MATLAB中的人脸检测函数通常会使用级联分类器进行初步筛选,以减少计算量。

二、人脸关键点定位技术人脸关键点定位是在检测到人脸后,进一步定位人脸的关键特征点,如眼睛、眉毛、鼻子、嘴巴等。

在MATLAB中,人脸关键点定位主要基于形状模型和特征点回归方法。

1. 形状模型形状模型是一种用于描述人脸形状变化的数学模型,它通过学习和建模一组训练数据的形状变化,从而能够对新的输入数据进行形状预测。

在人脸关键点定位中,形状模型可以用来对给定的人脸进行局部形状的估计,从而进一步定位关键点。

MATLAB提供了一些函数和工具箱来实现形状模型的训练和预测。

2. 特征点回归特征点回归是一种常用的人脸关键点定位方法,它通过学习一个回归函数,将图像中的像素坐标映射到关键点的位置坐标。

《基于MATLAB的人脸识别算法的研究》范文

《基于MATLAB的人脸识别算法的研究》范文

《基于MATLAB的人脸识别算法的研究》篇一一、引言人脸识别技术是近年来计算机视觉领域研究的热点之一,其应用范围广泛,包括安全监控、身份认证、人机交互等。

MATLAB作为一种强大的数学计算软件,为研究人员提供了丰富的工具和函数,使得人脸识别算法的研究和实现变得更加便捷。

本文将介绍基于MATLAB的人脸识别算法的研究,包括算法原理、实现方法、实验结果及分析等方面。

二、人脸识别算法原理人脸识别算法主要基于计算机视觉和模式识别技术,通过对人脸特征进行提取和匹配,实现身份识别。

常见的人脸识别算法包括特征提取、特征匹配等步骤。

其中,特征提取是关键步骤,需要从人脸图像中提取出有效的特征,如纹理、形状、颜色等。

特征匹配则是将提取出的特征与人脸库中的特征进行比对,找出最匹配的人脸。

三、基于MATLAB的人脸识别算法实现1. 预处理在人脸识别算法的实现中,首先需要对人脸图像进行预处理,包括灰度化、归一化、降噪等操作。

这些操作可以有效地提高图像的质量,为后续的特征提取和匹配提供更好的基础。

2. 特征提取特征提取是人脸识别算法的核心步骤之一。

在MATLAB中,可以使用各种算法进行特征提取,如主成分分析(PCA)、局部二值模式(LBP)、方向梯度直方图(HOG)等。

本文采用PCA 算法进行特征提取,通过降维的方式将高维的人脸图像数据转化为低维的特征向量。

3. 特征匹配特征匹配是将提取出的特征与人脸库中的特征进行比对的过程。

在MATLAB中,可以使用各种相似度度量方法进行特征匹配,如欧氏距离、余弦相似度等。

本文采用欧氏距离作为相似度度量方法,通过计算特征向量之间的欧氏距离来找出最匹配的人脸。

四、实验结果及分析为了验证基于MATLAB的人脸识别算法的有效性,我们进行了多组实验。

实验数据集包括ORL人脸库、Yale人脸库等。

在实验中,我们使用了不同的特征提取和匹配方法,对算法的性能进行了评估。

实验结果表明,基于PCA算法的特征提取方法和欧氏距离相似度度量方法在人脸识别中具有较好的性能。

基于matlab的课程设计题目

基于matlab的课程设计题目

基于matlab的课程设计题目基于matlab的课程设计题目正文:在matlab中,有许多有趣且实用的课程设计题目可以选择。

以下是一个基于matlab的课程设计题目示例:基于图像处理的人脸识别系统。

人脸识别是一种广泛应用于安全监控、身份验证等领域的技术。

该课程设计旨在利用matlab的图像处理功能,开发一个能够识别人脸的系统。

首先,你需要收集一批含有人脸的图像数据集。

可以从公开的人脸数据库中获取,如LFW(Labeled Faces in the Wild)数据库。

然后,使用matlab的图像处理工具箱,对这些图像进行预处理,包括人脸检测、图像归一化等。

接下来,你可以选择使用PCA(Principal Component Analysis)或LDA(Linear Discriminant Analysis)等算法进行特征提取和降维。

这些算法可以将人脸图像转换为一个更低维度的特征向量,以方便后续的分类。

然后,你可以使用matlab的机器学习工具箱,训练一个分类器来识别人脸。

可以选择支持向量机(SVM)、K近邻算法(KNN)或神经网络等方法。

通过使用训练数据集,将提取的特征向量与相应的标签进行训练。

最后,你可以使用训练好的分类器来测试你的人脸识别系统。

将测试图像输入系统,通过分类器进行分类,并与测试图像的真实标签进行比较,以评估系统的准确性。

拓展:除了人脸识别系统,还有许多其他基于matlab的课程设计题目可以选择,如音频信号处理、数字图像处理、机器学习、模式识别等。

你可以根据自己的兴趣和专业方向,选择与之相关的课程设计题目。

例如,你可以设计一个音频信号处理系统,用于语音识别。

通过使用matlab的信号处理工具箱,对输入的语音信号进行预处理,包括去除噪声、语音分段等。

然后,使用mfcc(Mel-Frequency Cepstral Coefficients)等特征提取算法,将语音信号转换为特征向量。

PCA算法学习_2(PCA理论的matlab实现)

PCA算法学习_2(PCA理论的matlab实现)

PCA算法学习_2(PCA理论的matlab实现) 前⾔ 在前⾯的博⽂中已经初步介绍了PCA算法的⼤概流程及在⼈脸降维上⾯的应⽤。

本⽂就进⼀步介绍下其理论基础和matlab的实现(也是⽹上学者的代码)。

开发环境:Matlab2012a 基础 假设X是⼀个m*n的矩阵,是由样本数据构成的矩阵。

其中m表⽰样本的属性维数,n表⽰样本的个数。

现在要对X进⾏线性变换变成另⼀个矩阵Y,使得Y的协⽅差矩阵为对⾓矩阵,这样的Y就认为是对原始矩阵X提取主成分后的矩阵,实际过程中只需取Y的前⾯主要的⾏即可。

X变换到Y的线性变换公式为: X和Y的协⽅差计算⽅法为: 从下⾯的公式可以看出Cy和Cx的关系为: 因为Cx是对称矩阵,对Cx进⾏特征值分解就可以将其变换成对⾓矩阵,见下⾯的公式推导: 公式中的P和E满⾜: 其中D是由Cx的特征向量构成的对⾓矩阵。

P是线性变换矩阵,P的每⼀⾏都是Cx矩阵的特征向量,且P是正交矩阵,⼀般情况下把特征值⼤的特征向量排在矩阵前⾯⼏⾏。

由此可知,求出P后就可以求出X主成分矩阵了。

另外,还可以求出PCA的⽩化矩阵,PCA的⽩化矩阵就是特征向量去相关的矩阵,⽩化矩阵的协⽅差阵⼀般为单位矩阵,在PCA中可以这么求:inv(sqrt(D))*E'。

普通的PCA算法可以将输⼊矩阵X变成主成分矩阵Y,尽管Y的协⽅差矩阵是个对⾓矩阵,但不⼀定是单位矩阵,如果对Y继续使⽤⽩化操作,则Y的协⽅差矩阵就变成了单位矩阵了。

源码 该pca函数接⼝形式为:[Y,V,E,D] = pca(X) 其中X为输⼊数据,X的每⼀列是⼀个输⼊样本。

返回值Y是对X进⾏PCA分析后的投影矩阵。

V是与X有关的协⽅差矩阵特征向量的⽩化矩阵,E是对应的特征向量(列)构成的矩阵,D是对应的特征值构成的对⾓矩阵(特征值处于对⾓线上)。

返回值中的⽩化矩阵,特征向量和特征值都是按照对应特征值⼤⼩进⾏排序后了的。

其matlab源码如下:function [Y,V,E,D] = pca(X)% do PCA on image patches%% INPUT variables:% X matrix with image patches as columns%% OUTPUT variables:% Y the project matrix of the input data X without whiting% V whitening matrix% E principal component transformation (orthogonal)% D variances of the principal components%去除直流成分X = X-ones(size(X,1),1)*mean(X);% Calculate the eigenvalues and eigenvectors of the new covariance matrix.covarianceMatrix = X*X'/size(X,2); %求出其协⽅差矩阵%E是特征向量构成,它的每⼀列是特征向量,D是特征值构成的对⾓矩阵%这些特征值和特征向量都没有经过排序[E, D] = eig(covarianceMatrix);% Sort the eigenvalues and recompute matrices% 因为sort函数是升序排列,⽽需要的是降序排列,所以先取负号,diag(a)是取出a的对⾓元素构成% ⼀个列向量,这⾥的dummy是降序排列后的向量,order是其排列顺序[dummy,order] = sort(diag(-D));E = E(:,order);%将特征向量按照特征值⼤⼩进⾏降序排列,每⼀列是⼀个特征向量Y = E'*X;d = diag(D); %d是⼀个列向量%dsqrtinv是列向量,特征值开根号后取倒,仍然是与特征值有关的列向量%其实就是求开根号后的逆矩阵dsqrtinv = real(d.^(-0.5));Dsqrtinv = diag(dsqrtinv(order));%是⼀个对⾓矩阵,矩阵中的元素时按降序排列好了的特征值(经过取根号倒后)D = diag(d(order));%D是⼀个对⾓矩阵,其对⾓元素由特征值从⼤到⼩构成V = Dsqrtinv*E';%特征值矩阵乘以特征向量矩阵。

MATLAB技术人脸识别算法

MATLAB技术人脸识别算法

MATLAB技术人脸识别算法MATLAB技术在人脸识别算法中的应用人脸识别技术是近年来快速发展的一项先进技术,它可以实现对人脸图像进行自动识别和身份验证。

作为一种非接触式的生物识别技术,人脸识别具有高效、方便、准确的特点,因此在安全领域、人机交互、图像检索等方面有着广泛的应用。

而MATLAB作为一种功能强大的科学计算工具,其丰富的图像处理工具箱和灵活的编程环境,使得其成为人脸识别算法研究和开发的重要工具。

一、人脸识别算法概述人脸识别算法主要包括人脸检测、人脸特征提取和人脸匹配三个步骤。

人脸检测是指从图像或视频中自动检测并定位人脸,通常采用基于特征的方法(如Haar特征、HOG特征等)或基于模型的方法(如支持向量机、神经网络等)进行。

人脸特征提取是指从检测到的人脸中提取出具有代表性的特征,常用的方法有主成分分析(PCA)、线性判别分析(LDA)、局部二值模式(LBP)等。

人脸匹配是指将提取出来的人脸特征与已有的数据库中的人脸特征进行比对和匹配,一般采用欧氏距离、余弦相似度等度量方法。

二、MATLAB中的人脸检测算法实现MATLAB提供了多种人脸检测算法的库函数和工具箱,例如Viola-Jones算法、DLib算法等。

这些算法基于不同的原理和方法,可以根据实际需求选择适合的算法进行人脸检测。

以Viola-Jones算法为例,其基于Haar特征的方法可以高效地进行人脸检测。

在MATLAB中,可以使用“vision.CascadeObjectDetector”类实现Viola-Jones算法的人脸检测功能。

首先,需要加载人脸检测器对象,并使用“detect”方法对图像进行人脸检测,最后使用“insertShape”方法将检测结果标记在原图像上。

三、MATLAB中的人脸特征提取算法实现MATLAB提供了多种常用的人脸特征提取算法的函数和工具箱,如PCA、LDA、LBP等。

这些算法能够对从图像中提取到的人脸特征进行降维和优化,以便于后续的人脸匹配工作。

Matlab中的人脸识别与表情分析方法

Matlab中的人脸识别与表情分析方法

Matlab中的人脸识别与表情分析方法人脸识别和表情分析是计算机视觉领域中的热门研究方向。

在这个信息爆炸的时代,人们对于自动化识别和分析人脸表情的需求越来越高。

Matlab作为一种功能强大的数值计算与可视化软件,提供了一些重要的工具和算法来实现人脸识别和表情分析。

本文将介绍Matlab中一些常用的人脸识别与表情分析方法。

首先,我们来介绍一下人脸识别的基本概念和方法。

人脸识别是指通过计算机技术来识别和验证人脸的身份。

常见的人脸识别方法包括主成分分析(PCA)、线性判别分析(LDA)和支持向量机(SVM)等。

在Matlab中,可以使用内置的人脸识别工具箱来实现这些方法。

其中,主成分分析是一种常用的降维方法,它通过对数据进行特征提取和投影变换,将高维数据映射到低维空间。

在人脸识别中,PCA可以用来提取脸部特征,并通过与已知人脸数据的比较来判断其身份。

在Matlab中,可以使用pca函数实现主成分分析。

另一种常用的人脸识别方法是线性判别分析。

LDA可以通过最大化类间散布和最小化类内散布的方式来找到最优的投影向量,从而实现有效的人脸分类。

Matlab提供了lda函数来实现线性判别分析。

此外,支持向量机也是一种常用的分类方法,它的基本思想是寻找一个最优的超平面来实现数据的最佳分类。

在人脸识别领域,SVM可以通过训练一组已知标记的人脸图像来建立分类模型,然后利用该模型来识别新的人脸图像。

Matlab中的svmtrain和svmclassify函数可以帮助我们实现这一过程。

除了人脸识别,表情分析也是一个引人注目的研究领域。

表情分析旨在从人脸图像中提取和解释情绪表达。

常见的表情分析方法包括基于特征提取的方法、基于神经网络的方法和基于统计模型的方法等。

在Matlab中,可以使用图像处理工具箱提供的函数来实现基于特征提取的表情分析。

这些函数包括人脸检测、特征检测和分类器训练等功能。

通过这些函数,我们可以提取脸部特征,如眼睛、嘴巴等,进而分析表情的特征,如笑容、愤怒等。

完整版)基于matlab程序实现人脸识别

完整版)基于matlab程序实现人脸识别

完整版)基于matlab程序实现人脸识别Based on MATLAB program。

face n is implemented。

1.Face n Process1.1.1 Basic PrincipleXXX carried out based on the YCbCr color space skin color model。

It has been found that the skin color clustering n in the Cb-Cr subplane n of the YCbCr color space will be XXX different from the central n。

Using this method。

image XXX-faces。

1.1.2 FlowchartXXX:1.Read the original image2.Convert the image to the YCbCr color spacee the skin color model to binarize the image and perform morphological processing4.Select the white area in the binary image。

measure the area attributes。

and filter to obtain all rectangular blocks5.Filter specific areas (height-to-width。

een 0.6 and 2.eye features)6.Store the rectangular area of the face7.Filter special areas based on other n and mark the final face area2.Face n Program1) Face and Non-XXXn result = skin(Y,Cb,Cr)SKIN Summary of this n goes hereDetailed n goes herea=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)];If the brightness is greater than 230.the major and minor axes are expanded by 1.1 timesif(Y>230)a=1.1*a;b=1.1*b;endXXXCb=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;If the value is greater than 1.it is not skin color and returns。

基于PCA算法人脸识别的matlab实现_罗鑫

基于PCA算法人脸识别的matlab实现_罗鑫

信息产业基于PCA 算法人脸识别的matlab 实现罗鑫1赵永进1柳长春2邵越鹏1(1、河南师范大学计算机与信息工程学院,河南新乡4530072、清华大学机械工程系,北京100000)摘要:本文介绍了人脸识别中常用的PCA 算法,并在matlab 环境下分别实现了基于PCA 的人脸识别,融合了小波变换,PCA ,奇异值分解等方法简化特征提取和识别过程,采用了ORL 人脸数据库作为实验库,验证了该方法可以有效地进行识别,对实际应用有一定参考价值。

关键词:人脸识别;PCA;奇异值分解图1图像识别原理图图2图像识别过程各环节数据维数的变化本项目由河南师范大学(国家)大学生创新性实验计划资助项目编号:2010143作者简介:罗鑫(1990,8-),女,汉,河南省范县,本科,研究方向:模式识别与图像处理。

计算机人脸识别技术也就是利用计算机分析人脸图象,进而从中提取出有效的识别信息,用来“辨认”身份的一门技术。

[1]人脸识别特征主要分为两类:(1)直观几何特征,人脸的几何特征是研究人脸的各部件形状、大小以及部件之间的相对关系等。

人脸的部件包括眼睛、眉毛、鼻子、嘴、下巴以及面颊和轮廓线等。

(2)数学特征,任何图像都可以近似的用特征图的线性组合来表示,用图像在特征空间中的坐标向量作为图像的特征描述。

[2]特征脸(Eigenface)方法是一种数学特征方法,是近些年人脸识别中广为流行的一种算法,也是本文所要论述的重点。

1问题模型综述图像识别,很容易想到的一种方法是将待识别的图像与数据库中的图像点点匹配,计算相关系数从而达到识别的目的,但这种方法在人脸识别中从未用到乃至提及过,因为这种方法有一个致命的弱点:数据量太大,导致存储和运算相当复杂。

实用的图像识别原理如图1所示:[3]学习过程就是通过特征选择,建立特征空间,并将训练图像在特征空间中做投影,以该坐标向量作为图像的表达,进而进行分类和识别。

可用图2来说明可见,从图像(矩阵,往往很大且不稀疏)到类型空间,实质上是数据降维的的过程,本文也将围绕数据降维的方法展开。

matlab的pca算法

matlab的pca算法

matlab的pca算法
主成分分析(PCA)是一种常用的数据降维技术,用于发现数据
中的主要特征并减少数据的维度。

在MATLAB中,可以使用内置的
`pca`函数来实现PCA算法。

下面我将从多个角度来介绍MATLAB中
的PCA算法。

首先,使用MATLAB中的`pca`函数可以很容易地进行主成分分析。

该函数可以接受原始数据矩阵作为输入,并返回主成分分析的
结果,包括主成分、主成分系数和解释方差等信息。

通过调用该函数,可以快速地对数据进行降维处理。

其次,MATLAB中的`pca`函数还允许用户指定需要保留的主成
分数量或者保留的方差百分比。

这样可以根据实际需求来灵活调整PCA的结果,从而更好地满足数据分析的要求。

此外,MATLAB还提供了丰富的可视化工具,可以帮助用户直观
地理解PCA的结果。

通过绘制散点图、累积方差贡献率曲线等图表,可以直观地展示数据在主成分空间中的分布情况,帮助用户更好地
理解数据的结构和特征。

另外,MATLAB中的`pca`函数还支持对新数据进行主成分投影,从而可以将新数据映射到原始数据的主成分空间中。

这对于使用
PCA模型进行数据预测和分类非常有用。

总之,MATLAB中的`pca`函数提供了一个方便、灵活且功能强
大的工具,可以帮助用户快速高效地进行主成分分析,发现数据的
主要特征并实现数据的降维处理。

在实际应用中,可以根据具体的
数据分析需求灵活调整参数,并结合MATLAB丰富的可视化工具,更
好地理解和应用PCA算法。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

3.基于matlab的人脸识别算法3.1 问题描述对于一幅图像可以看作一个由像素值组成的矩阵,也可以扩展开,看成一个矢量,如一幅N*N 象素的图像可以视为长度为N2 的矢量,这样就认为这幅图像是位于N2 维空间中的一个点,这种图像的矢量表示就是原始的图像空间,但是这个空间仅是可以表示或者检测图像的许多个空间中的一个。

不管子空间的具体形式如何,这种方法用于图像识别的基本思想都是一样的,首先选择一个合适的子空间,图像将被投影到这个子空间上,然后利用对图像的这种投影间的某种度量来确定图像间的相似度,最常见的就是各种距离度量。

因此,本次试题采用PCA算法并利用GUI实现。

对同一个体进行多项观察时,必定涉及多个随机变量X1,X2,…,Xp,它们都是的相关性, 一时难以综合。

这时就需要借助主成分分析来概括诸多信息的主要方面。

我们希望有一个或几个较好的综合指标来概括信息,而且希望综合指标互相独立地各代表某一方面的性质。

任何一个度量指标的好坏除了可靠、真实之外,还必须能充分反映个体间的变异。

如果有一项指标,不同个体的取值都大同小异,那么该指标不能用来区分不同的个体。

由这一点来看,一项指标在个体间的变异越大越好。

因此我们把“变异大”作为“好”的标准来寻求综合指标。

3.1.1 主成分的一般定义设有随机变量X1,X2,…,Xp,其样本均数记为,,…,,样本标准差记为S1,S2,…,Sp。

首先作标准化变换,我们有如下的定义:(1) 若C1=a11x1+a12x2+ … +a1pxp,…,且使 Var(C1)最大,则称C1为第一主成分;(2) 若C2=a21x1+a22x2+…+a2pxp,…,(a21,a22,…,a2p)垂直于(a11,a12,…,a1p),且使Var(C2)最大,则称C2为第二主成分;(3) 类似地,可有第三、四、五…主成分,至多有p个。

3.1.2 主成分的性质主成分C1,C2,…,Cp具有如下几个性质:(1) 主成分间互不相关,即对任意i和j,Ci 和Cj的相关系数Corr(Ci,Cj)=0 i j(2) 组合系数(ai1,ai2,…,aip)构成的向量为单位向量,(3) 各主成分的方差是依次递减的,即Var(C1)≥Var(C2)≥…≥Var(Cp)(4) 总方差不增不减,即Var(C1)+Var(C2)+ … +Var(Cp)=Var(x1)+Var(x2)+ … +Var(xp) =p这一性质说明,主成分是原变量的线性组合,是对原变量信息的一种改组,主成分不增加总信息量,也不减少总信息量。

(5) 主成分和原变量的相关系数 Corr(Ci,xj)=aij =aij(6) 令X1,X2,…,Xp的相关矩阵为R, (ai1,ai2,…,aip)则是相关矩阵R的第i个特征向量(eigenvector)。

而且,特征值i就是第i主成分的方差,即Var(Ci)= λi其中i为相关矩阵R的第i个特征值(eigenvalue)λ1≥λ2≥…≥λp≥03.1.3 主成分的数目的选取前已指出,设有p个随机变量,便有p个主成分。

由于总方差不增不减,C1,C2等前几个综合变量的方差较大,而Cp,Cp-1等后几个综合变量的方差较小, 严格说来,只有前几个综合变量才称得上主(要)成份,后几个综合变量实为“次”(要)成份。

实践中总是保留前几个,忽略后几个。

保留多少个主成分取决于保留部分的累积方差在方差总和中所占百分比(即累计贡献率),它标志着前几个主成分概括信息之多寡。

实践中,粗略规定一个百分比便可决定保留几个主成分;如果多留一个主成分,累积方差增加无几,便不再多留。

3.2 PCA算法的功能实现3.2.1 人脸空间的建立假设一幅人脸图像包含N个像素点,它可以用一个N维向量Γ表示。

这样,训练样本库就可以用Γi(i=1,...,M)表示。

协方差矩阵C的正交特征向量就是组成人脸空间的基向量,即特征脸。

将特征值由大到小排列:λ1≥λ2≥...≥λr,其对应的特征向量为μk。

这样每一幅人脸图像都可以投影到由u1,u2,...,ur张成的子空间中。

因此,每一幅人脸图像对应于子空间中的一点。

同样,子空间的任意一点也对应于一幅图像。

3.2.2 特征向量的选取虽然协方差矩阵Ω最多有对应于非零特征值的k(k远小于M)个特征向量,但是通常情况下,k仍然很大,而事实上,根据应用的要求,并非所有的特征向量都有需要保留,而特征空间投影的计算速度是直接与创建子空间所用的特征向量的数目相关,若考虑到计算时间的因素,可以适当的减去一些信息量少的特征向量,而且,去掉这些特征向量之后不一定不利于分类结果,有的情况下反而能够提高识别性能。

3.2.3 人脸识别有了这样一个由"特征脸"张成的降维子空间,任何一幅人脸图像都可以向其投影得到一组坐标系数,这组系数表明了该图像在子空间中的位置,从而可以作为人脸识别的依据。

换句话说,任何一幅人脸图像都可以表示为这组"特征脸"的线性组合,其加权系数即是K-L变换的展开系数,也可以称为该图像的代数特征。

因此,在获得特征脸之后,就可以对每一类别的典型样本进行投影,由此得到每个人脸的投影特征从而构成人脸特征向量,作为下一步识别匹配的搜索空间。

输入图像及其在人脸空间上的投影(重构图像),人脸图像在人脸空间中的投影变化不明显而非人脸图像的投影变化明显。

因此,检测一幅图像中是否存在人脸的基本思想是,计算该图像中任意位置处的局部图像与人脸空间之间的距离ε。

其中,ε是局部图像是否为人脸的度量。

因此,计算给定图像任意一点上的ε,就可以得到一映射图ε(x,y)。

3.3 实验及结果分析实验在两个图库上测试,一个是自建人脸库,该库包含10个不同人物,每人有5张不同表情和姿态下的图片,总共50幅。

另一个是ORL人脸库,该库包含40个不同人物,每人有10张图片,共400幅。

用训练样本进行测试,识别率为100%。

而随着训练样本的增加,识别率会有所提升,由于标准人脸库在采集时考虑了多种因素,人脸图像比较标准,所以识别率较自建的人脸库识别率高,另外因为自建人连库的图片太少,即训练样本太少,也会对结果产生影响,效果不是很好。

进行直方图均衡化比灰度归一化的识别率高,预处理对识别的效果起着至关重要的作用。

而此次实验的预处理还比较粗糙,PCA也只是起到了简单的特征脸降维的作用,要有更好的效果,还必须寻找更好的特征表达,使得可以尽量消除光照、表情、遮掩和姿势的影响。

图2 训练样本在坐标系下的投影矩阵下图为测试流程截图:图3 用户使用界面图4 选择图片图5 图片选择后图6 查找后3.4 个人总结因为我以前自学过一部分GUI方面的知识,所以本次试题我采用了Matlab中的GUI(图形用户界面)为主要表现形式,我认为在这次的题目下GUI比单纯的M文件会有更强的应用、测试及表现效果,但由于之前对人脸识别算法不太了解,所以花了很长时间去分析理解,最终选择了较为简单且实用的PCA算法。

从使用的角度考虑,我还为库中的每个人取了一个名字,最终查找到时会在标题处显示其名字,下方显示库中与测试图片最接近的库图片。

因为是利用了标准人脸库,并且识别的人数不是很多,所以最终的结果还是非常不错的,识别率可达100%。

参考文献[1] 邓楠, 基于主成份分析的人脸识别, 2006.06[2] 龚勋,PCA与人脸识别及其理论基础,2007.04[3] 周涛,基于PCA的人脸识别研究,2004.07[4] 王宇飞,基于特征脸和支持向量机的人脸识别方法研究与实现,2005.03[5] 刘保柱,《MATLAB7.0从入门到精通》,人民邮电出版社附录—matlab 源码1.“读取图片”按钮function pushbutton1_Callback(hObject, eventdata, handles)% hObject handle to pushbutton1 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)%% 读取待查找图片global im;%由于要在两个按钮函数中使用,故使用全局变量[filename, pathname]=...uigetfile({'*.bmp'},'选择图片');str = [pathname, filename];%合成路径+文件名im = imread(str);%读取图片axes( handles.axes1);%使用第一个axesimshow(im);title('待查找')%显示图片2.“开始查找”按钮function pushbutton2_Callback(hObject, eventdata, handles)% hObject handle to pushbutton2 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)%% PCA人脸识别global im;%使用全局变量imgdata=[];%训练图像矩阵for i=1:10for j=1:5a=imread(strcat('C:\Users\dell\Desktop\ORL\s',num2str(i),'\',num2str(j),'.bmp'));b=a(1:112*92); % b是行矢量1×N,其中N=10304b=double(b);imgdata=[imgdata; b]; % imgdata 是一个M * N 矩阵,imgdata中每一行数据一张图片,M=50 end;end;imgdata=imgdata'; %每一列为一张图片imgmean=mean(imgdata,2); % 平均图片,N维列向量for i=1:50minus(:,i) = imgdata(:,i)-imgmean; % minus是一个N*M矩阵,是训练图和平均图之间的差值end;covx=minus'* minus; % M * M 阶协方差矩阵[COEFF, latent,explained] = pcacov(covx'); %PCA,用协方差矩阵的转置来计算以减小计算量% 选择构成95%的能量的特征值i=1;proportion=0;while(proportion < 95)proportion=proportion+explained(i);i=i+1;end;p=i-1;% 训练得到特征脸坐标系i=1;while (i<=p && latent(i)>0)base(:,i) = latent(i)^(-1/2)*minus * COEFF(:,i); % base是N×p阶矩阵,用来进行投影,除以latent(i)^(1/2)是对人脸图像的标准化i = i + 1;end% 将训练样本对坐标系上进行投影,得到一个p*M 阶矩阵为参考reference = base'*minus;%% 测试过程——在测试图片文件夹中选择图片,进行查找测试a=im;b=a(1:10304);b=double(b);b=b';object = base'*(b-imgmean);distance=100000;%最小距离法,寻找和待识别图片最为接近的训练图片for k=1:50temp= norm(object - reference(:,k));if (distance > temp)which = k;distance = temp;end;end;%找出距离最近的图片所在的位置num1 = ceil(which/5);%第num1个文件夹num2 = mod(which,5);%第num2个图片文件if (num2 == 0)num2 = 5;end;I=imread(strcat('C:\Users\dell\Desktop\Face\s',num2str(num1),'\',num2str(num2),'.bmp'));%读取该图片axes( handles.axes2);%使用第2个axes%输出判断所最接近的训练样本的人脸图片并显示其人名switch num1case 1imshow(I);title('此人为Peter');%显示图片及人名case 2imshow(I);title('此人为Ben');case 3imshow(I);title('此人为Nick');case 4imshow(I);title('此人为Park');case 5imshow(I);title('此人为Linkin');case 6imshow(I);title('此人为Andy');case 7imshow(I);title('此人为Arthur');case 8imshow(I);title('此人为Lisa');case 9imshow(I);title('此人为Dana');case 10imshow(I);title('此人为Sara');end;3.“退出”按钮function pushbutton3_Callback(hObject, eventdata, handles)% hObject handle to pushbutton3 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)%% 退出close(gcf);。

相关文档
最新文档