基于PCA的人脸特征抽取

我们将应用PCA技术来抽取人脸特征。一幅人脸照片往往由比较多的像素构成,如果以每个像素作为1维特征,将得到一个维数非常高的特征向量, 计算将十分困难;而且这些像素之间通常具有相关性。这样,利用PCA技术在降低维数的同时在一定程度上去除原始特征各维之间的相关性自然成为了一个比较理想的方案。

数据集简介
本案例采用的数据集来自著名的ORL人脸库。首先对该人脸库做一个简单的介绍:

  • ORL数据库共有400幅人脸图像(40人, 每人1O幅, 大小为112像素x92像素)
  • 这个数据库比较规范, 大多数图像的光照方向和强度都差不多.
  • 但有少许表情、姿势、伸缩的变化, 眼睛对得不是很准, 尺度差异在10%左右。
  • 并不是每个人都有所有的这些变化的图像,即有些人姿势变化多一点,有些人表情变化多一点, 有些还戴有眼镜, 但这些变化都不大

正是基于ORL人脸库图像在光照, 以及关键点如眼睛、嘴巴的位置等方面比较统一的特点, 实验可以在该图片集上直接展开, 而不是必须要进行归一化和校准等工作。

生成样本矩阵
首先要做的是将这 200 幅人脸图像转换为向量形式,进而组成祥本矩阵。函数 ReadFaces()用于实现

function [imgRow,imgCol,FaceContainer,faceLabel]=ReadFaces(nFacesPerPerson, nPerson, bTest)
% 读入ORL人脸库的指定数目的人脸前前五张(训练)
%
% 输入:nFacesPerPerson --- 每个人需要读入的样本数,默认值为 5
%       nPerson --- 需要读入的人数,默认为全部 40 个人
%       bTest --- bool型的参数。默认为0,表示读入训练样本(前5张);如果为1,表示读入测试样本(后5张)
%
% 输出:FaceContainer --- 向量化人脸容器,nPerson * 10304 的 2 维矩阵,每行对应一个人脸向量if nargin==0 %default valuenFacesPerPerson=5;%前5张用于训练nPerson=40;%要读入的人数(每人共10张,前5张用于训练)bTest = 0;
elseif nargin < 3bTest = 0;
endimg=imread('Data/ORL/S1/1.pgm');%为计算尺寸先读入一张
[imgRow,imgCol]=size(img);FaceContainer = zeros(nFacesPerPerson*nPerson, imgRow*imgCol);
faceLabel = zeros(nFacesPerPerson*nPerson, 1);% 读入训练数据
for i=1:nPersoni1=mod(i,10); % 个位i0=char(i/10);strPath='Data/ORL/S';if( i0~=0 )strPath=strcat(strPath,'0'+i0);endstrPath=strcat(strPath,'0'+i1);strPath=strcat(strPath,'/');tempStrPath=strPath;for j=1:nFacesPerPersonstrPath=tempStrPath;if bTest == 0 % 读入训练数据strPath = strcat(strPath, '0'+j);elsestrPath = strcat(strPath, num2str(5+j));endstrPath=strcat(strPath,'.pgm');img=imread(strPath);%把读入的图像按列存储为行向量放入向量化人脸容器faceContainer的对应行中FaceContainer((i-1)*nFacesPerPerson+j, :) = img(:)';faceLabel((i-1)*nFacesPerPerson+j) = i;end % j
end % i% 保存人脸样本矩阵
save('Mat/FaceMat.mat', 'FaceContainer')

主成分分析
经过上面的处理,矩阵FaceContainter 每一行就成了一个代表某个人脸样本的特征向量。通过主成份分析的方法可将这些10304维的样本特征向量降至20维。这样数据集中每个人脸样本都可以由一个20维的特征向量来表示, 以作为后续分类所采用的特征。

我们将对样本矩阵FaceContainer进行主成份分析的整个过程封装在下面的main函数中,其参数k 是主分量的数目, 即降维至K 维。该函数首先调用ReadFaces函数得到了人脸样本矩阵FaceContainer,而后利用10.3.4小节中的fastPCA算法计算出样本矩阵的低维表示LowDimFaces 和主成分分量矩阵W, 并将LowDimFaces 保存至Mat 目录下的LowDimFaces.m出文件中。

function main(k)
% ORL 人脸数据集的主成分分析
%
% 输入:k --- 降至 k 维% 定义图像高、宽的全局变量 imgRow 和 imgCol,它们在 ReadFaces 中被赋值
global imgRow;
global imgCol;% 读入每个人的前5副图像
nPerson=40;
nFacesPerPerson = 5;
display('读入人脸数据...');
[imgRow,imgCol,FaceContainer,faceLabel]=ReadFaces(nFacesPerPerson,nPerson);
display('..............................');nFaces=size(FaceContainer,1);%样本(人脸)数目
display('PCA降维...');
% LowDimFaces是200*20的矩阵, 每一行代表一张主成分脸(共40人,每人5张),每个脸20个维特征
% W是分离变换矩阵, 10304*20 的矩阵
[LowDimFaces, W] = fastPCA(FaceContainer, 20); % 主成分分析PCA
visualize_pc(W);%显示主成分脸
save('Mat/LowDimFaces.mat', 'LowDimFaces');
display('计算结束。');

上述命令运行后会在Mat目录下生成LowDimFaces.mat文件,其中的200X20维矩阵LowDimFaces是经过PCA降维后,原样本矩阵FaceContainer的低维表示。200个人脸样本所对应的每一个特征向量由原来的10304维变成了20维,这就将后续的分类问题变成一个在 20维空间中的划分问题,过程大大简化。

主成分脸可视化分析
fastPCA函数的另一个输出为主分量阵w. 它是一个10304X20的矩阵,每列是一个10304维的主分量(样本协方差矩阵的本征向量),在人脸分析中,习惯称之为主成份脸.事实上我们可以将这些列向量以112X92的分辨率来显示,该工作由函数visualizepc完成,实现如下:

function visualize_pc(E)
% 显示主成分分量(主成分脸,即变换空间中的基向量)
%
% 输入:E --- 矩阵,每一列是一个主成分分量[size1 size2] = size(E);
global imgRow;
global imgCol;
row = imgRow;
col = imgCol;if size2 ~= 20error('只用于显示 20 个主成分');
end;figure
img = zeros(row, col);
for ii = 1:20img(:) = E(:, ii);subplot(4, 5, ii);imshow(img, []);
end


结合主成份脸图像的分析
首先,我们可以看到,图中的所有20个主成分脸图像的一个共同点是人脸区域之外的图像背景相对较暗。比较典型的如第1行的第3副图像,其背景几乎为黑色,这是因为 ORL数据集中的人脸图像背景较为均匀一致,在原始d维空间中样本在对应背景的这些维上差异很小,从样本分布云团上看,这些维上的云团的散布最小。因此ek对应于这些维的加权系数很小,在显现出的图像中就是灰度小,从而表现为主成分脸的暗背景。
继续按照这种思路分析, 拿第1个主成份脸来说,眉毛、鼻子和上嘴唇是图像中灰度相对较高的区域,这说明实验数据集中的200个人脸之间在这些位置存在较大的差异;再比如第1行的第5个主成分脸, 面部区域整体亮度较高,这可能是由数据集人脸之间的肤色差异
导致;其他典型如第2行的第3个以及第3行的第2个主成分脸中的眼睛,第2行第1个以及第4行第2个主成份脸的嘴,这些高亮度区域反映了实验数据集中人脸之间的五官差异。此外,我们还注意到同为五官之一的鼻子似乎井不“ 抢眼”,仅第3行的第1幅图像的鼻梁区
域亮度相对高一些。这说明正面为主的人脸图像中鼻子之间差异不大,这正好和学术界普遍认可的鼻子在正面图像为主的人脸识别中的作用不大的结论一致。

降维对分类性能的影响
人类能够识别人脸,正是由于不同的人在眼睛、嘴和眉毛等一些重要器官上的差别较大。经线性变换后,原始d维空间中那些差别较大的维在变换至低维空间的过程中被较大的加权而保留;而那些每幅人脸图像都类似(缺乏区分力)的特征,如背景、鼻子和额头等被赋予了较低的权值, 从而在d’维空间中几乎没有得到体现。这样经PCA处理后,在特征向量维数大大降低的同时,原图像中那些差异最大的特征被最大程度的保留(以一种线性组合的形式),而那些相对一致、区分力较差的特征则被丢弃。这就是为什么在很多
情况下降维后,分类的识别率并不会明显下降的原因。PCA降维丢弃某些特征所损失的信息通过在低维空间中更加精确地映射可以得到补偿, 从而可以在低维空间中得到和高维空间中相当的识别率。

PCA能够很好工作的前提
细心的读者可能会发现,在某些主成分脸图像的人脸边缘处也出现了较高的灰度,这是由数据集图像中人脸姿态和位置的差异造成的, 幸好这种差异不大(10%左右)。实际上在我们的系统中,经过PCA降维后的20维样本矩阵能够很好地用于入脸识别的另一个关键点在
于ORL人脸数据库中的大部分人脸在图像中占据着大致相同的区域,姿态差异度不大,井且眼睛、鼻子、发迹和嘴的位置也大体相同。否则, 200个人脸图像之间的差异就不再是人长相本身的差异, 而是这些人的脸部区域在图像中位置的差异,姿态的差异、以及器官位置的差异。当然,此时PCA可以照常计算,但将降维后的样本矩阵用于人脸识别就不会取得理想的识别率,而可能更适合于姿态分类

基于主分量的人脸重建
下面利用式(10-19)来实现对个体人脸图像的重建。我们提供的的函数approx可以胜任这一工作。其中参数x是需要重建的个体人脸样本, K是重建使用的主分量数目, 输出xApprox为对于原样本向量x的重建(近似)。具体实现如:

function [ xApprox ] = approx( x, k )
% 用 k 个主成分分量来近似(重建)样本 x
%
% 输入:x --- 原特征空间中的样本,被近似的对象
%       k --- 近似(重建)使用的主分量数目
%
% 输出:xApprox --- 样本的近似(重建)% 读入 PCA 变换矩阵 V 和 平均脸 meanVec
load Mat/PCA.matnLen = length(x);xApprox = meanVec;for ii = 1:kxApprox=xApprox+((x-meanVec)*V(:,ii))*V(:,ii)';
endload Mat/FaceMat.mat
x = FaceContainer(1,:);
[pcaA V]= fastPCA(FaceContainer,200);
xApprox = approx(x,50);
displayImage(xApprox,112,92);
xApprox = approx(x,100);
displayImage(xApprox,112,92);
xApprox = approx(x,200);
displayImage(xApprox,112,92);

当使用200个主分量进行重建时,几乎没有差异。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/493800.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

超市的100年发展史:好日子终结 亚马逊无人店是趋势

来源&#xff1a;网易智能 电商巨头亚马逊已经在旧金山、西雅图和芝加哥等地开设了多家无人便利店Amazon Go&#xff0c;它们向顾客展现了无缝购物体验这种未来购物模式&#xff0c;它依赖于高科技追踪技术&#xff0c;消费者只需将商品从货架上取下&#xff0c;并放入帆布手提…

图像识别初步

本文主要包括以下内容 模式与模式识别的基本概念过度拟合最小距离分类器基于相关的模板匹配本章的典型案例分析 基于最小距离分类器的鸾尾属植物分类基于相关技术的图像模式匹配 模式识别概述 模式识别(Pattern Recognition)是人类的一项基本智能&#xff0c;在日常生活中…

下一个人才大缺口:量子计算研究人员

来源&#xff1a;36Kr初创公司Zapata Computing的创始人兼首席执行官克里斯托弗萨瓦&#xff08;Christopher Savoie&#xff09;表示&#xff0c;他向三位专攻量子计算的外国科学家提供了就业机会&#xff0c;他在等他们的工作签证获得批准。但几个月过去了&#xff0c;这家位…

LIBCMTD.lib与libcpmtd冲突的解决方法。

error: 1>uafxcwd.lib(afxmem.obj) : error LNK2005: "void * __cdecl operator new(unsigned int)" (??2YAPAXIZ) 已经在 LIBCMTD.lib(new.obj) 中定义 1>uafxcwd.lib(afxmem.obj) : error LNK2005: "void __cdecl operator delete(void *)" (??…

基于PCA和SVM的人脸识别

svm推广到多类情况 一对多的最大响应策略(one against all) 假设有A 、B、C.. D四类样本需要划分。在抽取训练集的时候&#xff0c;分别按照如下4种方式划分。 A. 所对应的样本特征向量作为正集&#xff08;类标签为1), B、C、D所对应的样本特征向量作为负集&#xff08;类…

为何协作机器人能够兴起?“协作机器人-激烈的市场谁能杀出重围”

来源&#xff1a;机器人大讲堂作者&#xff1a;包文涛&#xff0c;哈尔滨工业大学机器人研究所工学硕士&#xff0c;在机器人和工业自动化领域有超过10年的专业经验。曾任职于ABB集团&#xff0c;先后在新加坡、美国、加拿大等地工作&#xff0c;在产品管理、技术方案、项目工程…

5款新颖的ReSharper插件

ReSharper是著名的代码生成工具。自ReSharper 8.0版本发布以来&#xff0c;新的扩展管理器、模板设置、分发安装等功能改革使得对插件的要求变高。接下来小编整理了5款新颖插件。 JetBox 当开发者工作在不同的机器设备时&#xff0c;这个插件可以利用DropBox同步ReSharper设置。…

机器学习实战之K近邻算法

k近邻算法概述 简单地说,K近邻算法采用测量不同特征值之间的距离方法进行分类。 优 点 :精度高、对异常值不敏感、无数据输入假定。 缺点:计算复杂度高、空间复杂度高。 适用数据范围:数值型和标称型。 它的工作原理是:存在一个样本数 据集合,也称作训练样本集,并且样本集…

神经网络的叛离:32年前从心理学与生理学分离的瞬间

来源&#xff1a;大数据文摘编译&#xff1a;Andy反向传播算法隶属于深度学习&#xff0c;它在解决模型优化问题的方面有着重要的地位。这一算法由被誉为深度学习之父的Geoffrey Hinton提出。1986年&#xff0c;他发表了名为Learning representations by back-propagating erro…

希尔排序-插入改进

引自&#xff1a;http://hi.baidu.com/gsgaoshuang/item/17a8ed3c24d9b1ba134b14c2 学习算法的一个好网站 http://student.zjzk.cn/course_ware/data_structure/web/paixu/paixu8.2.2.1.htm 希尔排序&#xff08;Shell Sort&#xff09;又称为缩小增量排序&#xff0c;输入插入…

机器学习实战之决策树

你是否玩过二十个问题的游戏,游戏的规则很简单:参与游戏的一方在脑海里想某个事物,其他参与者向他提问题,只允许提20个问题,问题的答案也只能用对或错回答。问问题的人通过 推断分解,逐步缩小待猜测事物的范围。决策树的工作原理与20个问题类似,用户输人一系列数 据,然后给出游…

2018全球硬科技创新暨“一带一路”创新合作大会,这些硬科技都要来!

来源&#xff1a;新华社近年来&#xff0c;多个省市陆续开始了一场科技标签秀&#xff0c;以深圳等为代表的“人工智能”、以上海为代表的“金融科技”&#xff0c;以贵州为代表的“大数据”等纷纷亮相&#xff0c;而伴随着“一带一路”新丝路的战略实施&#xff0c;西安&#…

吴恩达:人工智能寒冬不会到来,但我们太乐观了

来源&#xff1a;量子位AI Winter Is Coming&#xff1f;人工智能领域的各路专家学者曾经为这个话题吵翻了天。最近&#xff0c;这个话题又有更新了。人工智能寒冬论的作者Filip Piekniewski在博客上发文&#xff0c;给自己提出的观点增加了新的证据。非常巧的是&#xff0c;吴…

自动驾驶中常用的四类机器学习算法

来源&#xff1a;智车科技机器学习算法已经被广泛应用于自动驾驶各种解决方案&#xff0c;电控单元中的传感器数据处理大大提高了机器学习的利用率&#xff0c;也有一些潜在的应用&#xff0c;比如利用不同外部和内部的传感器的数据融合(如激光雷达、雷达、摄像头或物联网)&…

国际基因编辑科技发展报告

来源&#xff1a;全球技术地图作者&#xff1a;贾晓峰 中国科学技术信息研究所摘要&#xff1a;以特异性的改变遗传物质靶向基因序列为目标的基因编辑技术是近年生命科学领域最热门的研究领域之一。围绕基因编辑的相关领域研究和人物事件连续多年入选Nature国际科学事件和科学人…

科学家发现大脑动态评估信息重要性机制

大脑中部的丘脑室旁核&#xff08;PVT&#xff09; 图片来源&#xff1a;中科院深圳先进技术研究院来源&#xff1a;中国科学报周末该在家看书还是出去K歌&#xff1f;寒冬将至&#xff0c;该坚持健身还是涮个火锅&#xff1f;每天&#xff0c;人们都会面临上百种选择。以往&am…

腾讯AI Lab研发「智能显微镜」 抢先布局病理分析领域

来源&#xff1a;腾讯AI实验室腾讯 AI Lab 在南京举办的「腾讯全球合作伙伴大会」上宣布&#xff0c;其AI医疗领域研究已抢先从影像筛查进入病理分析阶段&#xff0c;相关的「智能显微镜」项目已在研发测试阶段。智能显微镜融入了人工智能&#xff08;AI&#xff09;的视觉、语…

石墨烯新新新应用,MIT大规模生产细胞大小机器人,有感知能存储

&#xff08;MIT开发的微型机器人&#xff09;来源&#xff1a;机器人大讲堂近期&#xff0c;MIT又玩出了新花样&#xff0c;在前几个月成功开发出细胞大小并且能够感知外部环境、储存数据并执行计算任务的微型机器人后&#xff0c;MIT又带来了新消息&#xff1a;他们为大规模生…

多种图像配准方法的综合比较(KAZE、SIFT、SURF等)

接触图像配准是从去年十月份开始的&#xff0c;老师要求我尽快重现一遍整个流程&#xff0c;这样对课题可以有一个整体的把握&#xff0c;而后再仔细推敲细节&#xff0c;甚至提出自己的想法&#xff0c;老师的这个思路现在觉得非常不错。自己当时选取的是SURF方法&#xff0c;…

全面梳理百度世界大会:量产L4乘用车和两款音箱 还有挖掘机技术

来源&#xff1a;网易智能摘要&#xff1a;今天&#xff0c;百度一年一度的世界大会如约而至&#xff0c;李彦宏宣布发布量产红旗L4级乘用车&#xff0c;推出两款小度语音智能产品和智能城市“ACE计划”。多年以来&#xff0c;百度世界大会和AI开发者大会成为百度对外的窗口&am…