人脸识别
来源:互联网 发布:华泰证券软件mac 编辑:程序博客网 时间:2024/06/09 22:32
下面,我使用一个简单的MATLAB脚本说明它的用法。
一般情况,你应该按照以下这个顺序执行这个方法:
1. 选择实际测试和参照组人脸图像数据库的路径;
2. 选择实际测试人脸图像的路径;
3. 运行“CreateDatabase”函数来创建所有参照组人脸图像的二维矩阵;
4. 运行“eigenfacecore"函数产生基础人脸图像空间;
5. 运行“识别”功能得到参照组人脸图像数据库中等价图像的名称。
为了您的方便,我准备了实际测试和参照组人脸图像数据库,其中部分来自“Face94”埃塞克斯人脸数据库。
你只需要复制上述功能,指定实际测试和参照组人脸图像数据库的路径(比如Matlab工作路径)。
然后按照对话框提示输入图片编号,实例将运行实现。
希望您能喜欢它!
引用:
[1] P. N. Belhumeur, J. Hespanha, and D. J. Kriegman. Eigenfaces vs. Fisherfaces: Recognition
using class specific linear projection. In ECCV (1), pages 45--58, 1996.
[2] Available at:
http://cswww.essex.ac.uk/mv/allfaces/faces94.zip
以下为源代码文件:
-----------------------------------------------------------------------------------------------------------------------------------
CreateDatabase.m
function T = CreateDatabase(TrainDatabasePath)% Align a set of face images (the training set T1, T2, ... , TM )%% Description: This function reshapes all 2D images of the training database% into 1D column vectors. Then, it puts these 1D column vectors in a row to % construct 2D matrix 'T'.% % % Argument: TrainDatabasePath - Path of the training database%% Returns: 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 MN and 'T' will be a MNxP 2D matrix.%% See also: STRCMP, STRCAT, RESHAPE% Original version by Amir Hossein Omidvarnia, October 2007% Email: aomidvar@ece.ut.ac.ir %%%%%%%%%%%%%%%%%%%%%%%% File managementTrainFiles = dir(TrainDatabasePath);Train_Number = 0;for i = 1:size(TrainFiles,1) if not(strcmp(TrainFiles(i).name,'.')|strcmp(TrainFiles(i).name,'..')|strcmp(TrainFiles(i).name,'Thumbs.db')) Train_Number = Train_Number + 1; % Number of all images in the training database endend%%%%%%%%%%%%%%%%%%%%%%%% Construction of 2D matrix from 1D image vectorsT = [];for i = 1 : Train_Number % I have chosen the name of each image in databases as a corresponding % number. However, it is not mandatory! str = int2str(i); str = strcat('\',str,'.jpg'); str = strcat(TrainDatabasePath,str); img = imread(str); img = rgb2gray(img); [irow icol] = size(img); temp = reshape(img',irow*icol,1); % Reshaping 2D images into 1D image vectors T = [T temp]; % 'T' grows after each turn end
---------------------------------------------------------------------------------------------------------------------------
EigenfaceCore.m
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)>1 ) 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-------------------------------------------------------------------------------------------------------------------------------
Recognition.m
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');
-----------------------------------------------------------------------------------------------------------
example.m
% A sample script, which shows the usage of functions, included in% PCA-based face recognition system (Eigenface method)%% See also: CREATEDATABASE, EIGENFACECORE, RECOGNITION% Original version by Amir Hossein Omidvarnia, October 2007% Email: aomidvar@ece.ut.ac.ir clear allclcclose all% You can customize and fix initial directory pathsTrainDatabasePath = uigetdir('D:\MATLAB701\work', 'D:\MATLAB701\work\TrainDatabase' );TestDatabasePath = uigetdir('D:\MATLAB701\work', 'D:\MATLAB701\work\TestDatabase');prompt = {'1:'};dlg_title = 'Input of PCA-Based Face Recognition System';num_lines= 1;def = {'1'};TestImage = inputdlg(prompt,dlg_title,num_lines,def);TestImage = strcat(TestDatabasePath,'\',char(TestImage),'.jpg');im = imread(TestImage);T = CreateDatabase(TrainDatabasePath);[m, A, Eigenfaces] = EigenfaceCore(T);OutputName = Recognition(TestImage, m, A, Eigenfaces);SelectedImage = strcat(TrainDatabasePath,'\',OutputName);SelectedImage = imread(SelectedImage);imshow(im)title('Test Image');figure,imshow(SelectedImage);title('Equivalent Image');str = strcat('Matched image is : ',OutputName);disp(str)
用到的图像库文件:
TestDatabase
TrainDatabase
- 语音识别&人脸识别
- 【人脸识别】初识人脸识别
- 【人脸识别】初识人脸识别
- OpenCV的行人识别&人脸识别
- 图片识别之人脸识别API
- OpenCV的行人识别&人脸识别
- IOS人脸识别和二维码识别
- 人脸识别之颜色识别
- Face++ 人脸识别,身份识别集成
- 人脸识别:(抓拍+识别)
- 人脸识别的发展方向:蒙面识别
- 人脸识别
- 人脸识别
- 人脸识别算法
- 简单人脸识别
- 人脸识别代码
- 人脸识别
- [Camera] 人脸识别
- CSS Animation初探
- 对于restful的简单认识
- 100 事件 [~IE8] 用数组来保存传统事件 通过数组来实现按顺序执行
- 黑马程序员--Java之内部类06
- 陈怡暖:2015.5.4(午夜金评)远离套单危险
- 人脸识别
- 使用git error: RPC failed; result=22, HTTP code = 411
- 深入研究Android Handler机制
- malloc与new的区别
- ehcache简单使用
- Java 闭锁实例
- javaFX——使用CSS装扮界面
- CSU 1603 Scheduling the final examination(贪心)
- 利用NIO的Selector处理服务器-客户端模型