用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。这样每一幅人脸图像都可以投影到由 u1,u2,...,ur张成的子空间中。因此,每一幅人脸图像对应于子空间中的一点。同样,子空间的任意一点也对应于一幅图像。
4)人脸识别
有了这样一个由"特征脸"张成的降维子空间,任何一幅人脸图像都可以向其投影得到一组坐标系数,这组系数表明了该图像在子空间中的位置,从而可以作为人脸识别的依据。盘算数据库中每张图片在子空间中的坐标,得到一组坐标,作为下一步识别匹配的搜索空间。 盘算新输入图片在子空间中的坐标,采取最小距离法,遍历搜索空间,得到与其距离最小的坐标向量,该向量对应的人脸图像即为识别匹配的结果。
三、实验步调
1) 每人选取 4 幅共 60 幅作为训练样本,将每一幅图像(128*128)写成列向量形式排列成矩阵
2) 求协方差矩阵
3) 求协方差矩阵特征值—求特征向量(特征脸)—将特征向量排列成变更矩阵
4) 盘算每幅图像的投影
5) 盘算待识别人脸的投影
6) 遍历搜索进行匹配
四、实验结果与阐发
matlab 界面效果如下所示
图 1 用户使用界面
图 2 选择图片
图 3 图片选择后
图 4 识别后
由于利用了标准库,并且识别的人数不是许多,也没有选择有大块左阴影和右阴影的人作为训练集以及测试,所以最终的结果照旧非常不错的,识别率可达100%。 但是选择有较大阴影的人做测试,则会出现识别错误,所以 PCA 算法照旧存在一定的局限性。
图 5 识别错误
主要代码展示
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)
% read image to be recognize
%读取图片
global im;
[filename, pathname] = uigetfile({'*.bmp'},'choose photo');
str = [pathname, filename];
im = i
人脸识别课程设计报告 来自淘豆网m.daumloan.com转载请标明出处.