⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pcadesign.m

📁 PCA、LDA人脸检测
💻 M
字号:
function Wt=PCADesign(n,m,sampleset,eignum)
% PCADESIGN will return the PCA transformation matrix on the basis of
% sample set
% n denotes the dimension of the problem 
% m is the number of samples
% sampleset represents the sample set,i.e.sampleset(i,j) denote the i-th
% component of the j-th sample
% eignum is the number of eigvectors that are required
% the function will write the transformation matrix into special file if
% the output argument is not demanded

if nargout>1
    error('Too many output arguments.');
end
if nargin~=4
    error('Wrong number of input arguments.');
end
[cn,cm]=size(sampleset);
if cm~=m | cn~=n
    error('Wrong input data.');
end

%求解所有样本整体的平均值
average=zeros(n,1);
for j=1:m
    average=average+sampleset(:,j);
end
average=average/m;

%中心化以后得到的图象
for j=1:m
    sampleset(:,j)=sampleset(:,j)-average;
end

%构造St矩阵的相关阵
c=sampleset'*sampleset;
c=c/m;

%求解St的所有特征值和特征向量并按照从大到小的的顺序排序
[v,d]=eig(c);

for j=1:(m-1)
    k=j;
    for i=(j+1):m
        if d(i,i)>d(k,k)
            k=i;
        end
    end
    if k~=j
        temp1=d(j,j);
        d(j,j)=d(k,k);
        d(k,k)=temp1;
        temp=v(:,j);
        v(:,j)=v(:,k);
        v(:,k)=temp;
    end
end

%确保不会取到为零的特征值
default=rank(sampleset);
if eignum>default
    eignum=default;
end

%求解St矩阵的前eignum个特征向量并归一化组成变换矩阵Wt
Wt1=zeros(eignum,n);
for j=1:eignum
    Wt1(j,:)=(sampleset*v(:,j))'/sqrt(m*d(j,j));
end

%如果没有指定输出参数就将变换矩阵写入文件
if nargout==1
    Wt=Wt1;
else
    fid=fopen('pcawt','w');
    count=fwrite(fid,eignum,'short');
    count=fwrite(fid,Wt1,'float');
    if count~=eignum*n
        error('file write error');
    end
    fclose(fid);
end

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -