人脸识别课程设计报告.docxVIP

  • 24
  • 0
  • 约4.07千字
  • 约 11页
  • 2021-09-17 发布于辽宁
  • 举报
用Matlab实现人脸识别 学院:信息工程学院 班级:计科软件普131 成员: 一、问题描述 在一个人脸库中,有15个人,每人有11幅图像。要求选定 每一个人的若干幅图像组成样本库,由样本库得到特征库。再任取图 像库的一张图片,识别它的身份。 对于一幅图像可以看作一个由像素值组成的矩阵,也可以扩展 开,看成一个矢量。如一幅N*N象素的图像可以视为长度为 N2的矢 量,这样就认为这幅图像是位于 N2维空间中的一个点,这种图像的 矢量表示就是原始的图像空间,但是这个空间仅是可以表示或者检测 图像的许多个空间中的一个。不管子空间的具体形式如何,这种方法 用于图像识别的基本思想都是一样的,首先选择一个合适的子空间, 图像将被投影到这个子空间上,然后利用对图像的这种投影间的某种 度量来确定图像间的相似度,最常见的就是各种距离度量。因此,本 次采用PCA算法确定一个子空间,最后使用最小距离法进行识别,并 用matlab实现。 二、PCA原理和人脸识别方法 K-L变换 K-L变换以原始数据的协方差矩阵的归一化正交特征矢量构成 的正交矩阵作为变换矩阵,对原始数据进行正交变换,在变换域上实 现数据压缩。它具有去相关性、能量集中等特性,属于均方误差测度 下,失真最小的一种变换,是最能去除原始数据之间相关性的一种变 换。PCA则是选取协方差矩阵前 k个最大的特征值的特征向量构成 K-L变换矩阵。 2)主成分的数目的选取 保留多少个主成分取决于保留部分的累积方差在方差总和中所 占百分比(即累计贡献率),它标志着前几个主成分概括信息之多寡。 实践中,粗略规定一个百分比便可决定保留几个主成分; 如果多留一 个主成分,累积方差增加无几,便不再多留。 3) 人脸空间建立 假设一幅人脸图像包含 N个像素点,它可以用一个N维向量r 表示。这样,训练样本库就可以用 r i (i=1,…,M)表示。协方差 矩阵C的正交特征向量就是组成人脸空间的基向量, 即特征脸。将 特征值由大到小排列:入1》入2>入r,其对应的特征向量为 ak。 这样每一幅人脸图像都可以投影到由 u1,u2,…,ur张成的子空间中。 因此,每一幅人脸图像对应于子空间中的一点。同样,子空间的任意 一点也对应于一幅图像。 4) 人脸识别 有了这样一个由特征脸张成的降维子空间,任何一幅人脸图像 都可以向其投影得到一组坐标系数,这组系数表明了该图像在子空间 中的位置,从而可以作为人脸识别的依据。计算数据库中每张图片在 子空间中的坐标,得到一组坐标,作为下一步识别匹配的搜索空间。 计算新输入图片在子空间中的坐标,采用最小距离法,遍历搜索空间, 得到与其距离最小的坐标向量,该向量对应的人脸图像即为识别匹配 的结果。 三、实验步骤 1) 每人选取4幅共60幅作为训练样本,将每一幅图像(128*128) 写成列向量形式排列成矩阵 2) 求协方差矩阵 3) 求协方差矩阵特征值一求特征向量(特征脸)一将特征向量排列成 变换矩阵 4) 计算每幅图像的投影 5) 计算待识别人脸的投影 6) 遍历搜索进行匹配 四、实验结果与分析 matlab界面效果如下所示Accuracya s0 E matlab界面效果如下所示 Accuracy a s 0 E Choate ptioto 训练机器 0 4 0 e Q Q 图1用户使用界面 race Q ch??? phots C i “極椁” £思笳読 £思笳読酋 3催 -I呵嗨 B瘗 “ In 图2选择图片 图3图片选择后 图4识别后 由于利用了标准库,并且识别的人数不是很多,也没有选择有大 块左阴影和右阴影的人作为训练集以及测试, 所以最终的结果还是非 常不错的,识别率可达100%。但是选择有较大阴影的人做测试,则 会出现识别错误,所以 PCA算法还是存在一定的局限性。 图5识别错误 主要代码展示 fun cti on pushbutt on 1_Callback(hObject, eve ntdata, han dies) % hObject han dle to pushbutt on1 (see GCBO) % eve ntdata reserved - to be defi ned in a future vers ion of MATLAB % han dies structure with han dies and user data (see GUIDATA) % read image to be recog nize %读取图片 global im; [,path name] = uigetfile({*bmp},choose photo); str = [path name,]; im = imread(str); axes( han dles.axesl

文档评论(0)

1亿VIP精品文档

相关文档