matlab做pca人脸识别,[转载]一个修改后的PCA进行人脸识别的Matlab代码,识
一個(gè)修改后的PCA進(jìn)行人臉識(shí)別的Matlab代碼,識(shí)別率達(dá)到88%
% calc xmean,sigma and its eigen
decomposition
allsamples=[];%所有訓(xùn)練圖像
for i=1:40
for
j=1:5
a=imread(strcat('D:rawdataORLs',num2str(i),'',num2str(j),'.pgm'));
% imshow(a);
b=a(1:112*92);?% b是行矢量
1×N,其中N=10304,提取順序是先列后行,即從上到下,從左到右
b=double(b);
allsamples=[allsamples; b];?% allsamples 是一個(gè)M * N
矩陣,allsamples 中每一行數(shù)據(jù)代表一張圖片,其中M=200
end
end
samplemean=mean(allsamples);?% 平均圖片,1 × N
for i=1:200
xmean(i,:)=allsamples(i,:)-samplemean;?% xmean是一個(gè)M
× N矩陣,xmean每一行保存的數(shù)據(jù)是“每個(gè)圖片數(shù)據(jù)-平均圖片”
end;
sigma=xmean*xmean';?% M * M
階矩陣
[v d]=eig(sigma);
d1=diag(d);
[d2 index]=sort(d1); %以升序排序
cols=size(v,2);% 特征向量矩陣的列數(shù)
for i=1:cols
vsort(:,i) =
v(:, index(cols-i+1) ); % vsort
是一個(gè)M*col(注:col一般等于M)階矩陣,保存的是按降序排列的特征向量,每一列構(gòu)成一個(gè)特征向量
dsort(i)?= d1( index(cols-i+1)
);?% dsort 保存的是按降序排列的特征值,是一維行向量
end?%完成降序排列
%以下選擇90%的能量
dsum = sum(dsort);
dsum_extract
= 0;
p = 0;
while(
dsum_extract/dsum < 0.9)
p = p + 1;
dsum_extract = sum(dsort(1:p));
end
i=1;
% (訓(xùn)練階段)計(jì)算特征臉形成的坐標(biāo)系
while (i<=p
&& dsort(i)>0)
base(:,i) =
dsort(i)^(-1/2) * xmean' *
vsort(:,i);?%
base是N×p階矩陣,除以dsort(i)^(1/2)是對(duì)人臉圖像的標(biāo)準(zhǔn)化,詳見《基于PCA的人臉識(shí)別算法研究》p31
i = i +
1;
end
% add by?wolfsky
就是下面兩行代碼,將訓(xùn)練樣本對(duì)坐標(biāo)系上進(jìn)行投影,得到一個(gè) M*p 階矩陣allcoor
allcoor = allsamples * base;
accu = 0;
% 測(cè)試過(guò)程
for i=1:40
for j=6:10 %讀入40 x 5 副測(cè)試圖像
a=imread(strcat('e:ORLs',num2str(i),'',num2str(j),'.jpg'));
b=a(1:10304);
b=double(b) - samplemean;
tcoor= b * base;
%計(jì)算坐標(biāo),是1×p階矩陣
for
k=1:200
mdist(k)=norm(tcoor-allcoor(k,:));
end;
%三階近鄰
[dist,index2]=sort(mdist);
class1=floor( (index2(1)-1)/5
)+1;
class2=floor((index2(2)-1)/5)+1;
class3=floor((index2(3)-1)/5)+1;
if
class1~=class2 &&
class2~=class3?ID
=
class1;
elseif
(class1==class2)?ID =
class2;
elseif
(class2==class3)?ID
= class3;
end;
if?ID==i
accu=accu+1;
end;
end;
end;
accuracy=accu/200 %輸出識(shí)別率
總結(jié)
以上是生活随笔為你收集整理的matlab做pca人脸识别,[转载]一个修改后的PCA进行人脸识别的Matlab代码,识的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: matlab计算每个细胞面积,手把手教你
- 下一篇: matlab碎纸拼接相似函数,基于蒙特卡