哪位好心人可以提供一份LDA人脸识别的matlab程序啊?谢谢了!

作者&投稿:龚京 (若有异议请与网页底部的电邮联系)
LDA人脸识别的matlab程序,谁能帮我看看或者教下我啊??~

function pca (path, trainList, subDim)
%
% PROTOTYPE
% function pca (path, trainList, subDim)
%
% USAGE EXAMPLE(S)
% pca ('C:/FERET_Normalised/', trainList500Imgs, 200);
%
% GENERAL DESCRIPTION
% Implements the standard Turk-Pentland Eigenfaces method. As a final
% result, this function saves pcaProj matrix to the disk with all images
% projected onto the subDim-dimensional subspace found by PCA.
%
% REFERENCES
% M. Turk, A. Pentland, Eigenfaces for Recognition, Journal of Cognitive
% Neurosicence, Vol. 3, No. 1, 1991, pp. 71-86
%
% M.A. Turk, A.P. Pentland, Face Recognition Using Eigenfaces, Proceedings
% of the IEEE Conference on Computer Vision and Pattern Recognition,
% 3-6 June 1991, Maui, Hawaii, USA, pp. 586-591
%
%
% INPUTS:
% path - full path to the normalised images from FERET database
% trainList - list of images to be used for training. names should be
% without extension and .pgm will be added automatically
% subDim - Numer of dimensions to be retained (the desired subspace
% dimensionality). if this argument is ommited, maximum
% non-zero dimensions will be retained, i.e. (number of training images) - 1
%
% OUTPUTS:
% Function will generate and save to the disk the following outputs:
% DATA - matrix where each column is one image reshaped into a vector
% - this matrix size is (number of pixels) x (number of images), uint8
% imSpace - same as DATA but only images in the training set
% psi - mean face (of training images)
% zeroMeanSpace - mean face subtracted from each row in imSpace
% pcaEigVals - eigenvalues
% w - lower dimensional PCA subspace
% pcaProj - all images projected onto a subDim-dimensional space
%
% NOTES / COMMENTS
% * The following files must either be in the same path as this function
% or somewhere in Matlab's path:
% 1. listAll.mat - containing the list of all 3816 FERET images
%
% ** Each dimension of the resulting subspace is normalised to unit length
%
% *** Developed using Matlab 7
%
%
% REVISION HISTORY
% -
%
% RELATED FUNCTIONS (SEE ALSO)
% createDistMat, feret
%
% ABOUT
% Created: 03 Sep 2005
% Last Update: -
% Revision: 1.0
%
% AUTHOR: Kresimir Delac
% mailto: kdelac@ieee.org
% URL:
%
% WHEN PUBLISHING A PAPER AS A RESULT OF RESEARCH CONDUCTED BY USING THIS CODE
% OR ANY PART OF IT, MAKE A REFERENCE TO THE FOLLOWING PAPER:
% Delac K., Grgic M., Grgic S., Independent Comparative Study of PCA, ICA, and LDA
% on the FERET Data Set, International Journal of Imaging Systems and Technology,
% Vol. 15, Issue 5, 2006, pp. 252-260
%



% If subDim is not given, n - 1 dimensions are
% retained, where n is the number of training images
if nargin < 3
subDim = dim - 1;
end;


disp(' ')

load listAll;

% Constants
numIm = 3816;


% Memory allocation for DATA matrix
fprintf('Creating DATA matrix
')
tmp = imread ( [path char(listAll(1)) '.pgm'] );
[m, n] = size (tmp); % image size - used later also!!!
DATA = uint8 (zeros(m*n, numIm)); % Memory allocated
clear str tmp;

% Creating DATA matrix
for i = 1 : numIm
im = imread ( [path char(listAll(i)) '.pgm'] );
DATA(:, i) = reshape (im, m*n, 1);
end;
save DATA DATA;
clear im;

% Creating training images space
fprintf('Creating training images space
')
dim = length (trainList);
imSpace = zeros (m*n, dim);
for i = 1 : dim
index = strmatch (trainList(i), listAll);
imSpace(:, i) = DATA(:, index);
end;
save imSpace imSpace;
clear DATA;

% Calculating mean face from training images
fprintf('Zero mean
')
psi = mean(double(imSpace'))';
save psi psi;

% Zero mean
zeroMeanSpace = zeros(size(imSpace));
for i = 1 : dim
zeroMeanSpace(:, i) = double(imSpace(:, i)) - psi;
end;
save zeroMeanSpace zeroMeanSpace;
clear imSpace;

% PCA
fprintf('PCA
')
L = zeroMeanSpace' * zeroMeanSpace; % Turk-Pentland trick (part 1)
[eigVecs, eigVals] = eig(L);

diagonal = diag(eigVals);
[diagonal, index] = sort(diagonal);
index = flipud(index);

pcaEigVals = zeros(size(eigVals));
for i = 1 : size(eigVals, 1)
pcaEigVals(i, i) = eigVals(index(i), index(i));
pcaEigVecs(:, i) = eigVecs(:, index(i));
end;

pcaEigVals = diag(pcaEigVals);
pcaEigVals = pcaEigVals / (dim-1);
pcaEigVals = pcaEigVals(1 : subDim); % Retaining only the largest subDim ones

pcaEigVecs = zeroMeanSpace * pcaEigVecs; % Turk-Pentland trick (part 2)

save pcaEigVals pcaEigVals;

% Normalisation to unit length
fprintf('Normalising
')
for i = 1 : dim
pcaEigVecs(:, i) = pcaEigVecs(:, i) / norm(pcaEigVecs(:, i));
end;

% Dimensionality reduction.
fprintf('Creating lower dimensional subspace
')
w = pcaEigVecs(:, 1:subDim);
save w w;
clear w;

% Subtract mean face from all images
load DATA;
load psi;
zeroMeanDATA = zeros(size(DATA));
for i = 1 : size(DATA, 2)
zeroMeanDATA(:, i) = double(DATA(:, i)) - psi;
end;
clear psi;
clear DATA;

% Project all images onto a new lower dimensional subspace (w)
fprintf('Projecting all images onto a new lower dimensional subspace
')
load w;
pcaProj = w' * zeroMeanDATA;
clear w;
clear zeroMeanDATA;
save pcaProj pcaProj;

发的是一维lda

以下是LDA的m文件函数:
你稍稍改改就能用了!

function [eigvector, eigvalue, elapse] = LDA(gnd,options,data)
% LDA: Linear Discriminant Analysis
%
% [eigvector, eigvalue] = LDA(gnd, options, data)
%
% Input:
% data - Data matrix. Each row vector of fea is a data point.
% gnd - Colunm vector of the label information for each
% data point.
% options - Struct value in Matlab. The fields in options
% that can be set:
%
% Regu - 1: regularized solution,
% a* = argmax (a'X'WXa)/(a'X'Xa+ReguAlpha*I)
% 0: solve the sinularity problem by SVD
% Default: 0
%
% ReguAlpha - The regularization parameter. Valid
% when Regu==1. Default value is 0.1.
%
% ReguType - 'Ridge': Tikhonov regularization
% 'Custom': User provided
% regularization matrix
% Default: 'Ridge'
% regularizerR - (nFea x nFea) regularization
% matrix which should be provided
% if ReguType is 'Custom'. nFea is
% the feature number of data
% matrix
% Fisherface - 1: Fisherface approach
% PCARatio = nSmp - nClass
% Default: 0
%
% PCARatio - The percentage of principal
% component kept in the PCA
% step. The percentage is
% calculated based on the
% eigenvalue. Default is 1
% (100%, all the non-zero
% eigenvalues will be kept.
% If PCARatio > 1, the PCA step
% will keep exactly PCARatio principle
% components (does not exceed the
% exact number of non-zero components).
%
%
% Output:
% eigvector - Each column is an embedding function, for a new
% data point (row vector) x, y = x*eigvector
% will be the embedding result of x.
% eigvalue - The sorted eigvalue of LDA eigen-problem.
% elapse - Time spent on different steps
%
% Examples:
%
% fea = rand(50,70);
% gnd = [ones(10,1);ones(15,1)*2;ones(10,1)*3;ones(15,1)*4];
% options = [];
% options.Fisherface = 1;
% [eigvector, eigvalue] = LDA(gnd, options, fea);
% Y = fea*eigvector;
%
%
% See also LPP, constructW, LGE
%
%
%
%Reference:
%
% P. N. Belhumeur, J. P. Hespanha, and D. J. Kriegman, 揈igenfaces
% vs. fisherfaces: recognition using class specific linear
% projection,� IEEE Transactions on Pattern Analysis and Machine
% Intelligence, vol. 19, no. 7, pp. 711-720, July 1997.
%
% Deng Cai, Xiaofei He, Yuxiao Hu, Jiawei Han, and Thomas Huang,
% "Learning a Spatially Smooth Subspace for Face Recognition", CVPR'2007
%
% Deng Cai, Xiaofei He, Jiawei Han, "SRDA: An Efficient Algorithm for
% Large Scale Discriminant Analysis", IEEE Transactions on Knowledge and
% Data Engineering, 2007.
%
% version 2.1 --June/2007
% version 2.0 --May/2007
% version 1.1 --Feb/2006
% version 1.0 --April/2004
%
% Written by Deng Cai (dengcai2 AT cs.uiuc.edu)
%

if ~exist('data','var')
global data;
end

if (~exist('options','var'))
options = [];
end

if ~isfield(options,'Regu') | ~options.Regu
bPCA = 1;
if ~isfield(options,'PCARatio')
options.PCARatio = 1;
end
else
bPCA = 0;
if ~isfield(options,'ReguType')
options.ReguType = 'Ridge';
end
if ~isfield(options,'ReguAlpha')
options.ReguAlpha = 0.1;
end
end

tmp_T = cputime;

% ====== Initialization
[nSmp,nFea] = size(data);
if length(gnd) ~= nSmp
error('gnd and data mismatch!');
end

classLabel = unique(gnd);
nClass = length(classLabel);
Dim = nClass - 1;

if bPCA & isfield(options,'Fisherface') & options.Fisherface
options.PCARatio = nSmp - nClass;
end

if issparse(data)
data = full(data);
end
sampleMean = mean(data,1);
data = (data - repmat(sampleMean,nSmp,1));

bChol = 0;
if bPCA & (nSmp > nFea+1) & (options.PCARatio >= 1)
DPrime = data'*data;
DPrime = max(DPrime,DPrime');
[R,p] = chol(DPrime);

if p == 0
bPCA = 0;
bChol = 1;
end
end

%======================================
% SVD
%======================================
if bPCA
if nSmp > nFea
ddata = data'*data;
ddata = max(ddata,ddata');

[eigvector_PCA, eigvalue_PCA] = eig(ddata);
eigvalue_PCA = diag(eigvalue_PCA);
clear ddata;

maxEigValue = max(abs(eigvalue_PCA));
eigIdx = find(eigvalue_PCA/maxEigValue < 1e-12);
eigvalue_PCA(eigIdx) = [];
eigvector_PCA(:,eigIdx) = [];

[junk, index] = sort(-eigvalue_PCA);
eigvalue_PCA = eigvalue_PCA(index);
eigvector_PCA = eigvector_PCA(:, index);

%=======================================
if options.PCARatio > 1
idx = options.PCARatio;
if idx < length(eigvalue_PCA)
eigvalue_PCA = eigvalue_PCA(1:idx);
eigvector_PCA = eigvector_PCA(:,1:idx);
end
elseif options.PCARatio < 1
sumEig = sum(eigvalue_PCA);
sumEig = sumEig*options.PCARatio;
sumNow = 0;
for idx = 1:length(eigvalue_PCA)
sumNow = sumNow + eigvalue_PCA(idx);
if sumNow >= sumEig
break;
end
end
eigvalue_PCA = eigvalue_PCA(1:idx);
eigvector_PCA = eigvector_PCA(:,1:idx);
end
%=======================================

eigvalue_PCA = eigvalue_PCA.^-.5;
data = (data*eigvector_PCA).*repmat(eigvalue_PCA',nSmp,1);
else
ddata = data*data';
ddata = max(ddata,ddata');

[eigvector, eigvalue_PCA] = eig(ddata);
eigvalue_PCA = diag(eigvalue_PCA);
clear ddata;

maxEigValue = max(eigvalue_PCA);
eigIdx = find(eigvalue_PCA/maxEigValue < 1e-12);
eigvalue_PCA(eigIdx) = [];
eigvector(:,eigIdx) = [];

[junk, index] = sort(-eigvalue_PCA);
eigvalue_PCA = eigvalue_PCA(index);
eigvector = eigvector(:, index);

%=======================================
if options.PCARatio > 1
idx = options.PCARatio;
if idx < length(eigvalue_PCA)
eigvalue_PCA = eigvalue_PCA(1:idx);
eigvector = eigvector(:,1:idx);
end
elseif options.PCARatio < 1
sumEig = sum(eigvalue_PCA);
sumEig = sumEig*options.PCARatio;
sumNow = 0;
for idx = 1:length(eigvalue_PCA)
sumNow = sumNow + eigvalue_PCA(idx);
if sumNow >= sumEig
break;
end
end
eigvalue_PCA = eigvalue_PCA(1:idx);
eigvector = eigvector(:,1:idx);
end
%=======================================

eigvalue_PCA = eigvalue_PCA.^-.5;
eigvector_PCA = (data'*eigvector).*repmat(eigvalue_PCA',nFea,1);

data = eigvector;
clear eigvector;
end
else
if ~bChol
DPrime = data'*data;

% options.ReguAlpha = nSmp*options.ReguAlpha;

switch lower(options.ReguType)
case {lower('Ridge')}
for i=1:size(DPrime,1)
DPrime(i,i) = DPrime(i,i) + options.ReguAlpha;
end
case {lower('Tensor')}
DPrime = DPrime + options.ReguAlpha*options.regularizerR;
case {lower('Custom')}
DPrime = DPrime + options.ReguAlpha*options.regularizerR;
otherwise
error('ReguType does not exist!');
end

DPrime = max(DPrime,DPrime');
end
end

[nSmp,nFea] = size(data);

Hb = zeros(nClass,nFea);
for i = 1:nClass,
index = find(gnd==classLabel(i));
classMean = mean(data(index,:),1);
Hb (i,:) = sqrt(length(index))*classMean;
end

elapse.timeW = 0;
elapse.timePCA = cputime - tmp_T;

tmp_T = cputime;

if bPCA
[dumpVec,eigvalue,eigvector] = svd(Hb,'econ');

eigvalue = diag(eigvalue);
eigIdx = find(eigvalue < 1e-3);
eigvalue(eigIdx) = [];
eigvector(:,eigIdx) = [];

eigvalue = eigvalue.^2;
eigvector = eigvector_PCA*(repmat(eigvalue_PCA,1,length(eigvalue)).*eigvector);
else
WPrime = Hb'*Hb;
WPrime = max(WPrime,WPrime');

dimMatrix = size(WPrime,2);
if Dim > dimMatrix
Dim = dimMatrix;
end

if isfield(options,'bEigs')
if options.bEigs
bEigs = 1;
else
bEigs = 0;
end
else
if (dimMatrix > 1000 & Dim < dimMatrix/10) | (dimMatrix > 500 & Dim < dimMatrix/20) | (dimMatrix > 250 & Dim < dimMatrix/30)
bEigs = 1;
else
bEigs = 0;
end
end

if bEigs
%disp('use eigs to speed up!');
option = struct('disp',0);
if bChol
option.cholB = 1;
[eigvector, eigvalue] = eigs(WPrime,R,Dim,'la',option);
else
[eigvector, eigvalue] = eigs(WPrime,DPrime,Dim,'la',option);
end
eigvalue = diag(eigvalue);
else
[eigvector, eigvalue] = eig(WPrime,DPrime);
eigvalue = diag(eigvalue);

[junk, index] = sort(-eigvalue);
eigvalue = eigvalue(index);
eigvector = eigvector(:,index);

if Dim < size(eigvector,2)
eigvector = eigvector(:, 1:Dim);
eigvalue = eigvalue(1:Dim);
end
end
end

for i = 1:size(eigvector,2)
eigvector(:,i) = eigvector(:,i)./norm(eigvector(:,i));
end

elapse.timeMethod = cputime - tmp_T;
elapse.timeAll = elapse.timePCA + elapse.timeMethod;

建成 我给你顶一个。。。


哪位好心人可以提供给我一些图片网站啊.
某些站点要求 128-位的连接安全性。单击帮助菜单,然后单击关于 Internet Explorer 可以查看您所安装的安全强度。如果您要访问某安全站点,请确保您的安全设置能够支持。请单击工具菜单,然后单击 Internet 选项。在“高级”选项卡上,滚动到“安全”部分,复选 SSL 2.0、SSL 3.0、TLS 1.0、PCT 1.0...

哪位好心人可以提供三国志11爵位修改器
是这样的,每个爵位只能有一个人拥有 还有,你用san11editor修改完成后记得保存修改 另外,如果你修改爵位只是为了增加带兵数,那就直接用san11editor修改部队兵数和武器数就可以了,爵位改高了俸禄也就高了...负担不起 改王为汉中王貌似游戏会不认的,因为游戏本身就没有汉中这个王爵位 如你所说,需要...

哪位好心人可以提供给我FM2006的种子或者迅雷下载的地址
尊敬的迅雷用户,您好:您可以前往迅雷快传官网(http:\/\/kuai.xunlei.com\/),搜索您想要的资源进行下载。如果找不到的话,可以到游侠网或游民星空这里的FM足球经理专区进行搜索一下。感谢您对迅雷的支持,希望能够帮到您。更多疑问,欢迎您向迅雷网络平台提问。

...希望有一个权威的网站各位好心人可以提供给我做了解
选调生很少要考专业知识的,就算是法院、检察院的选调生,也很少考专业知识,但是要求所学专业符合。

哪位好心人可以提供莫斯电码表本人想学习啊
解:第一个字母,看以f开头第五行,对应明码表查找q字母所标示的字母为l。以此类推找出后面字母。所得明文为love。还有许多简单方便的例如应用书本:同版本图书的同一页上的并将其变成代码 一些新兴的密码形式:1、利用键盘 无论是计算机键盘,还是手机键盘,都是出密码的好工具哦,可以用错位、或者...

哪位好心人可以提供给小弟一个博购企业信息搜索商务版的注册码吗?或者...
你百度下 博购东莞 可以教你用最快的速度赚到 你买博购的费用!

哪位好心人告诉我关于桥的所有知识呀,古语,诗句,故事都可以呀...
桥东桥西好杨柳,人来人去唱歌行。(杂曲歌辞·竹枝)刘禹锡 扬州桥边小妇,长干市里商人。三年不得消息,各自拜鬼求神。(杂曲歌辞·江南三台其一)王建 金谷园中柳,春来已舞腰。那堪好风景,独上洛阳桥。(杂曲歌辞·祓禊曲)驱传渭桥上,观兵细柳屯。(赋西汉)魏徵 汉家伊洛九重城,御路...

...脸颊也总是湿湿的。哪位好心人能告诉我是什么原因造成的?该怎么办...
这是我在网上搜搜到的,希望能对你家泰迪有帮助。狗狗流眼泪的原因和解决方法 可能有很多狗主觉得狗狗泪眼汪汪,是一种深情款款的表现,可是,身为一个贴心尽责好家长的你可知道,一直流眼泪,很有可能是罹患眼睛的疾病喔!*原因一:耳道感染 许多人听到这会不免会怀疑眼睛的泪痕,究竟与耳朵有...

哪位好心人能发给我一份《简明法语教程》(修订版)上下册和参考答案的PD...
简明法语教程(修订版)上册.pdf http:\/\/vdisk.weibo.com\/s\/u6Im9kA1ZHAuJ 简明法语教程(修订版)下册.pdf http:\/\/vdisk.weibo.com\/s\/tIN70iYRV8xl 简明法语教程参考答案.pdf http:\/\/vdisk.weibo.com\/s\/ujCx39Af2R1r3

哪位好心人可以告诉我造纸厂对河水有什么污染谢谢!
人们便无法饮用河中的水,即使对其进行处理,也难以达到绝对无污染。但处理后的水对人或环境的影响相比之下小了,对我们来说,谁也不愿意喝被污染了的水,所以在建造纸厂或一些化工厂事都避免建在河边,尤其建在河流上游,但有些非法的经营者仍建在河边来减少污水处理的高额费用,这是违法的,所以...

矿区13915242809: LDA算法详解
尤芳鼻渊: 边肇祺的模式识别那本书里,第四章线性判别函数里的Fisher线性判别.就几页纸的内容,看看就够入门了

矿区13915242809: C++,PCA,OpenCV人脸识别 -
尤芳鼻渊: 《Mastering OpenCV with Practical Computer Vision Projects》.这本书是英文版的,第八章讲的就是采用PCA或者LDA的人脸识别.

矿区13915242809: 请问哪位好心人可以提供一些现代汉语的习题啊,多多益善.辛苦. -
尤芳鼻渊:[答案] 分析下面各段话辞格配合情况,并指出具体运用了哪些辞职格. 1、天上的云,真是姿态万千,变化无常.它们有的象羽毛,轻轻地飘在空中;有的象鱼鳞,一片片整整齐齐地排列着;有的象羊群,来来去去;有的象一床大棉被,满满地盖住了天空;...

矿区13915242809: 乐嘉性格色彩中的红加绿的性格特点是怎样的? -
尤芳鼻渊: 速写诠释基本原则本测试可以使你领取属于你的性格色彩,同时也可知道自己大概的组合.例如,你在红色上的总数是 20,几乎毫无疑问,你是标准的红色性格;又比如,你在黄色是15,红色是11,其它各为2,你将是黄+ 红的性格.总分...

矿区13915242809: 分类器的选择 -
尤芳鼻渊: 可以采用最近邻分类器试试.如果最近邻不好,可能是特征选择与提取不好,可以做一下PCA或者LDA,如果再不好,可以试着使用SVM或者ANN试下,这两个分类器对区分相似特征效果较好.也可以试试其它分类器,KNN、BYS、DT、MQDF等等,现在小字符集一般都使用多分类器方法.分类器正确率是一方面,误识率同样重要

矿区13915242809: 哪位好心人能提供一封解雇信!? -
尤芳鼻渊: 引用一封....先生(小姐):感谢你在本公司一直以来为工司做的贡献,现在由于公司作出行政架构的调整以及未来经营策略的改动,所以对你作出解除雇佣关系的决定,最后工作日为..月..日,请你于收信后十个工作日内回来本公司人事部办理相关离职手续........(公司名).......(日期)

矿区13915242809: 白色皮质包要怎样更好的清洁和保养? -
尤芳鼻渊: 真皮皮包的使用及保养 1、保持干燥、存放于通风清凉处. 2、切忌曝晒、火烤、水洗、锐物撞击和接触化学溶剂. 3、手袋未经任何防水处理程序,沾湿手袋,请即用软布抹干,以防留有污渍或水印而使表面出现皱摺.如果在雨天使用,应特...

矿区13915242809: 画出先变址再间址及先间址再变址的寻址过程示意图 - 上学吧普法考试
尤芳鼻渊: 公民居民身份证丢失、被盗的,可持居民户口簿到常住户口所在地公安机关申报挂失并办理补领手续;离开常住户口所在地的,可到就近的户籍派出所或者户政大厅申报挂失.符合居民身份证异地受理条件的,可在异地受理点办理补领手续.居民身份证挂失申报须由公民本人提出申请.负责挂失申报工作的公安机关应当核验公民的身份信息,核实的应当现场受理.居民身份证的挂失申报不收取费用.

矿区13915242809: 白色的皮制包怎么清洗
尤芳鼻渊: 拿棉花蘸上酒精擦拭.

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网