人脸识别图像处理——PCA

本科论文做的是人脸识别,对一些算法进行复习。。。

概念

PCA (主成分分析算法)主要用于减少数据集的维数,同时保持数据集中方差最大的贡献。(我的理解是,图像处理时,数据量太大,通常需要降低数据维数,但是又希望保留贡献大的特征数据,PCA就是保留主要成分的降维算法)。人脸识别中,利用PCA算法构建特征脸。

算法实现流程

PCA降维过程:

1、每个样本(一张人脸图像 92*112=10304)作为一个行向量,所有样本(200张人脸图像)共同构建成一个矩阵(200x10304)

2、求矩阵的协方差矩阵(协方差简单的说就是两个维度的相关性的度量,协方差矩阵是每两个维度的协方差组成的一个矩阵)

3、求协方差矩阵的特征值和特征向量

4、将特征向量按特征值大小组合成一个映射矩阵,取前k列(或k行)作为最终映射矩阵。(n就是你要保留的维度数)

5、映射矩阵乘以原始数据构成的矩阵,达到降维效果。

快速PCA:

样本矩阵Znxd中的每个样本减去样本平均值m后的矩阵,则散布矩阵S(就是协方差矩阵)为(ZTZ)dxd。现在考虑矩阵R=(ZZT)nxn,在本文中的人脸识别系统,n=200,d=10304,d远远大于n,但他们有相同的特征值。

设n为列向量v是R的特征值f对应的特征向量,则有:(ZZT)v=fv

上式两边同时左乘ZT,并应用矩阵乘法结合律得:(ZTZ)(ZTv)=f(ZTv)

ZTv散布矩阵S的特征值f对应的特征向量e=ZTv。因此,我们可以计算小矩阵R=(ZZT)nxn的特征向量v,之后左乘ZT得到散布矩阵S的特征向量 ZTv。

代码

function [pcaA V] = fastPCA( A, k )
% 快速PCA
%
% 输入:A --- 样本矩阵,每行为一个样本
%      k --- 降维至 k 维
%
% 输出:pcaA --- 降维后的 k 维样本特征向量组成的矩阵,每行一个样本,列数 k 为降维后的样本特征维数
%      V --- 主成分向量

[r c] = size(A);

% 样本均值
meanVec = mean(A);

%DASF
% 计算协方差矩阵的转置 covMatT(Z 200x10304 ,Z‘ 10304x200)
Z = (A-repmat(meanVec, r, 1));
covMatT = Z * Z‘;

% 计算 covMatT 的前 k 个特征值和特征向量(10304xk)
[V D] = eigs(covMatT, k);

% 得到协方差矩阵 (covMatT)‘ 的特征向量
V = Z‘ * V;

% 特征向量归一化为单位特征向量
for i=1:k
    V(:,i)=V(:,i)/norm(V(:,i));
end

% 线性变换(投影)降维至 k 维(200xk)
pcaA = Z * V;

% 保存变换矩阵 V 和变换原点 meanVec
save(‘Mat/PCA.mat‘, ‘V‘, ‘meanVec‘);
时间: 2024-10-22 04:10:56

人脸识别图像处理——PCA的相关文章

人脸识别初探

介绍 目前人脸识别比较成熟,OpenCV也已经把目前主流的人脸识别算法(PCA,Haar,LBP)集成到算法库,并且附带例程和文档.文档链接http://docs.opencv.org/modules/contrib/doc/facerec/facerec_tutorial.html 小明网友对这篇文档详细说明 http://guoming.me/face-recognition-with-opencv 数据准备 创建自己的CSV文件在官方的文档中是python程序实现的,但有点小小的不足就是只

PCA人脸识别

PCA方法由于其在降维和特征提取方面的有效性,在人脸识别领域得到了广泛的应用. 其基本原理是:利用K-L变换抽取人脸的主要成分,构成特征脸空间,识别时将测试图像投影到此空间,得到一组投影系数,通过与各个人脸图像比较进行识别. 进行人脸识别的过程,主要由训练阶段和识别阶段组成: 训练阶段 第一步:写出训练样本矩阵,其中向量xi为由第i个图像的每一列向量堆叠成一列的MN维列向量,即把矩阵向量化.假设训练集有200个样本,,由灰度图组成,每个样本大小为M*N. 第二步:计算平均脸 Ψ=1200∑i=1

python下PCA算法与人脸识别

关于这部分主要是想在python下试验一下主成分分析(PCA)算法以及简单的人脸识别.曾经详述过matlab下的PCA以及SVM算法进行人脸识别技术,参考如下: 主成分分析法-简单人脸识别(一) 主成分分析-简单人脸识别(二) PCA实验人脸库-人脸识别(四) PCA+支持向量机-人脸识别(五) 主成分分析(PCA)算法主要是对高维数据进行降维,最大限度的找到数据间的相互关系,在机器学习.数据挖掘上很有用.在机器学习领域算法众多,贴一个: 大神博客索引 关于PCA的核心思想与原理介绍上述已经给出

OpenCV+Qt:基于PCA主成分分析的人脸识别例程

在模式识别领域中,PCA是一种常用的数据集降维手段,在此基础上,保留数据集中对方差贡献最大的特征从而进行模式分类.OpenCV中提供PCA的类,因此可以方便地使用PCA来进行人脸识别研究.在学习了网上的相关实现和代码,在以下开发平台跑通了代码:win8.1+OpenCV2.4.9+Qt5.3.2. 一.基本步骤 关于PCA的一些理论,可参照:http://blog.csdn.net/liyuefeilong/article/details/45126255 以下是实现PCA的基本思路: 1.把原

Python scikit-learn 学习笔记—PCA+SVM人脸识别

人脸识别是一项实用的技术.但是这种技术总是感觉非常神秘,在sklearn中看到了人脸识别的example,代码网址如下: http://scikit-learn.org/0.13/auto_examples/applications/face_recognition.html#example-applications-face-recognition-py 首先介绍一些PCA和SVM的功能,PCA叫做主元分析,它可以从多元事物中解析出主要影响因素,揭示事物的本质,简化复杂的问题.计算主成分的目的

基于svm和pca的人脸识别案例分析

数据集介绍 LFW (Labeled Faces in the Wild) 人脸数据库是由美国马萨诸塞州立大学阿默斯特分校计算机视觉实验室整理完成的数据库,主要用来研究非受限情况下的人脸识别问题.LFW 数据库主要是从互联网上搜集图像,而不是实验室,一共含有13000 多张人脸图像,每张图像都被标识出对应的人的名字,其中有1680 人对应不只一张图像,即大约1680个人包含两个以上的人脸.LFW数据集主要测试人脸识别的准确率. 代码实现 from time import time #记录时间 i

OpenCV图像处理以及人脸识别

OpenCV基础 OpenCV是一个开源的计算机视觉库.提供了很多图像处理常用的工具 批注:本文所有图片数据都在我的GitHub仓库 读取图片并显示 import numpy as np import cv2 as cv original = cv.imread('../machine_learning_date/forest.jpg') cv.imshow('Original', original) 显示图片某个颜色通道的图像 blue = np.zeros_like(original) bl

<图形图像,动画,多媒体> 读书笔记 --- 图像处理之人脸识别

人脸识别过程一般分为以下3个步骤: 1.首先建立人脸的面纹数据库.可以通过照相机或摄像机采集人脸的面相图片,将这些面相图片生成面纹编码保存到数据库中. 2.获取当前人脸面相图片.即通过照相机或摄像机采集人脸的面相图片,将当前的面相文件生成面纹编码 3.用当前的面纹编码与数据库中的面纹编码进行对比 在iOS5之后提供人脸识别的API,通过提供的CIDetector类可以进行人脸特征识别,CIDetector是CoreImage框架中的一个特征识别滤镜,CIDetector主要用于人脸特征识别.通过

实验报告: 人脸识别方法回顾与实验分析 【OpenCV测试方法源码】

趁着还未工作,先把过去做的东西整理下出来~   Github源码:https://github.com/Blz-Galaxy/OpenCV-Face-Recognition (涉及个人隐私,源码不包含测试样本,请谅解~) 对实验结果更感兴趣的朋友请直接看 第5章 [摘要]这是一篇关于人脸识别方法的实验报告.报告首先回顾了人脸识别研究的发展历程及基本分类:随后对人脸识别技术方法发展过程中一些经典的流行的方法进行了详细的阐述:最后作者通过设计实验对比了三种方法的识别效果并总结了人脸识别所面临的困难与