PCA人脸识别
来源:互联网 发布:北京网络职业学院贵吗? 编辑:程序博客网 时间:2024/06/10 01:36
PCA方法由于其在降维和特征提取方面的有效性,在人脸识别领域得到了广泛的应用。
其基本原理是:利用K-L变换抽取人脸的主要成分,构成特征脸空间,识别时将测试图像投影到此空间,得到一组投影系数,通过与各个人脸图像比较进行识别。
进行人脸识别的过程,主要由训练阶段和识别阶段组成:
训练阶段
第一步:写出训练样本矩阵,其中向量xi为由第i个图像的每一列向量堆叠成一列的MN维列向量,即把矩阵向量化。假设训练集有200个样本,,由灰度图组成,每个样本大小为M*N。
第二步:计算平均脸
第三步:计算差值脸,计算每一张人脸与平均脸的差值
第四步:构建协方差矩阵
第五步:求协方差矩阵的特征值和特征向量,构造特征脸空间
求出
若选取前
第六步:将每一幅人脸与平均脸的差值脸矢量投影到“特征脸”空间,即
识别阶段
第一步:将待识别的人脸图像
第二布:采用欧式距离来计算
求最小值对应的训练集合中的标签号作为识别结果
需要说明的是协方差矩阵
代码
训练过程代码如下:
function [m, A, Eigenfaces] = EigenfaceCore(T)% Use Principle Component Analysis (PCA) to determine the most % discriminating features between images of faces.%% Description: This function gets a 2D matrix, containing all training image vectors% and returns 3 outputs which are extracted from training database.%% Argument: T - A 2D matrix, containing all 1D image vectors.% Suppose all P images in the training database % have the same size of MxN. So the length of 1D % column vectors is M*N and 'T' will be a MNxP 2D matrix.% % Returns: m - (M*Nx1) Mean of the training database% Eigenfaces - (M*Nx(P-1)) Eigen vectors of the covariance matrix of the training database% A - (M*NxP) Matrix of centered image vectors%% See also: EIG% Original version by Amir Hossein Omidvarnia, October 2007% Email: aomidvar@ece.ut.ac.ir %%%%%%%%%%%%%%%%%%%%%%%% Calculating the mean image m = mean(T,2); % Computing the average face image m = (1/P)*sum(Tj's) (j = 1 : P)Train_Number = size(T,2);%%%%%%%%%%%%%%%%%%%%%%%% Calculating the deviation of each image from mean imageA = []; for i = 1 : Train_Number temp = double(T(:,i)) - m; % Computing the difference image for each image in the training set Ai = Ti - m A = [A temp]; % Merging all centered imagesend%%%%%%%%%%%%%%%%%%%%%%%% Snapshot method of Eigenface methos% We know from linear algebra theory that for a PxQ matrix, the maximum% number of non-zero eigenvalues that the matrix can have is min(P-1,Q-1).% Since the number of training images (P) is usually less than the number% of pixels (M*N), the most non-zero eigenvalues that can be found are equal% to P-1. So we can calculate eigenvalues of A'*A (a PxP matrix) instead of% A*A' (a M*NxM*N matrix). It is clear that the dimensions of A*A' is much% larger that A'*A. So the dimensionality will decrease.L = A'*A; % L is the surrogate of covariance matrix C=A*A'.[V D] = eig(L); % Diagonal elements of D are the eigenvalues for both L=A'*A and C=A*A'.%%%%%%%%%%%%%%%%%%%%%%%% Sorting and eliminating eigenvalues% All eigenvalues of matrix L are sorted and those who are less than a% specified threshold, are eliminated. So the number of non-zero% eigenvectors may be less than (P-1).L_eig_vec = [];for i = 1 : size(V,2) if( D(i,i)>4e+07) L_eig_vec = [L_eig_vec V(:,i)]; endend%%%%%%%%%%%%%%%%%%%%%%%% Calculating the eigenvectors of covariance matrix 'C'% Eigenvectors of covariance matrix C (or so-called "Eigenfaces")% can be recovered from L's eiegnvectors.Eigenfaces = A * L_eig_vec; % A: centered image vectors
识别过程代码如下:
function OutputName = Recognition(TestImage, m, A, Eigenfaces)% Recognizing step....%% Description: This function compares two faces by projecting the images into facespace and % measuring the Euclidean distance between them.%% Argument: TestImage - Path of the input test image%% m - (M*Nx1) Mean of the training% database, which is output of 'EigenfaceCore' function.%% Eigenfaces - (M*Nx(P-1)) Eigen vectors of the% covariance matrix of the training% database, which is output of 'EigenfaceCore' function.%% A - (M*NxP) Matrix of centered image% vectors, which is output of 'EigenfaceCore' function.% % Returns: OutputName - Name of the recognized image in the training database.%% See also: RESHAPE, STRCAT% Original version by Amir Hossein Omidvarnia, October 2007% Email: aomidvar@ece.ut.ac.ir %%%%%%%%%%%%%%%%%%%%%%%% Projecting centered image vectors into facespace% All centered images are projected into facespace by multiplying in% Eigenface basis's. Projected vector of each face will be its corresponding% feature vector.ProjectedImages = [];Train_Number = size(Eigenfaces,2);for i = 1 : Train_Number temp = Eigenfaces'*A(:,i); % Projection of centered images into facespace ProjectedImages = [ProjectedImages temp]; end%%%%%%%%%%%%%%%%%%%%%%%% Extracting the PCA features from test imageInputImage = imread(TestImage);temp = InputImage(:,:,1);[irow icol] = size(temp);InImage = reshape(temp',irow*icol,1);Difference = double(InImage)-m; % Centered test imageProjectedTestImage = Eigenfaces'*Difference; % Test image feature vector%%%%%%%%%%%%%%%%%%%%%%%% Calculating Euclidean distances % Euclidean distances between the projected test image and the projection% of all centered training images are calculated. Test image is% supposed to have minimum distance with its corresponding image in the% training database.Euc_dist = [];for i = 1 : Train_Number q = ProjectedImages(:,i); temp = ( norm( ProjectedTestImage - q ) )^2; Euc_dist = [Euc_dist temp];end[Euc_dist_min , Recognized_index] = min(Euc_dist);OutputName = strcat(int2str(Recognized_index),'.jpg');
其中训练样本的最后一行代码:
Eigenfaces = A * L_eig_vec; % A: centered image vectors
和识别过程的
temp = Eigenfaces'*A(:,i); % Projection of centered images into facespace
写成公式也就是如下
这里
Licenses
1 0
- PCA人脸识别
- PCA、人脸识别
- PCA人脸识别
- PCA人脸识别
- PCA人脸识别
- PCA人脸识别
- 浅谈PCA 人脸识别
- PCA人脸识别过程
- 浅谈PCA 人脸识别
- 人脸识别之PCA
- 浅谈PCA 人脸识别
- PCA + SVM 人脸识别
- 浅谈PCA 人脸识别
- pca svm识别人脸
- PCA+SVM人脸识别
- 人脸识别中的PCA算法
- opencv 中SVM + PCA 人脸识别
- pca在人脸识别中的应用
- 在ibatis2.3.6中使用iterate拼接oracle merge函数
- hdu 2024 C语言合法标识符
- java多线程-线程同步
- SQLServer相关
- 【日常打表 谢谢支持】HRBUST OJ 1264杨辉三角(一)
- PCA人脸识别
- Chisel Tutorial(二)——Chisel的数据类型
- 油量监控
- 编号为1,2,3,4.......n的一群人沿顺时针方向围绕一圈的问题
- 影响升职加薪的5种情况
- Java一个多线程的经典例子
- Leetcode之Two Sum
- android EditText里面的文字个数变化,提示自动取消
- context 对象