📄 pca2d.m
字号:
clear all;
t0=clock;
class_num = 40;
class_sample = 10;
train_num = 5;
test_num = 5;
scale = 1;
path = ['D:\tool\FACE-ORL\ORL-'];
d = 8;
for i=1:class_num
for j =1:train_num
name =[path num2str(i,'%.3d') '\' num2str(j,'%.2d') '.BMP' ];
[a,map]=imread(name,'bmp');
a = imresize(a,scale);
Train_Image (:,:,(i-1)*train_num+j) = a;
end;
end;
ImageSize = size(a);
Train_Image = double(Train_Image);
Cov = zeros(ImageSize(2),ImageSize(2));
mean_Image = mean(Train_Image,3);
Train_ImageSub = zeros(ImageSize(1),ImageSize(2),class_num*train_num);
for i=1:class_num*train_num
Train_ImageSub(:,:,i) = Train_Image(:,:,i) - mean_Image(:,:);
Cov = Cov + Train_ImageSub(:,:,i)'*Train_ImageSub(:,:,i);
end;
Cov = Cov/(class_num*train_num);
[V,D] = eig(Cov);
d1 = diag(D);
[d2,index] = dsort(d1);
v_sort = zeros(ImageSize(2),d);
for i=1:d
d_sort(i) = d1(index(i));
v_sort(:,i) = V(:,index(i));
v_sort(:,i) = v_sort(:,i)./sqrt(sum(v_sort(:,i).^2));
end;
for i=1:class_num*train_num
Coe(:,:,i) = Train_Image(:,:,i)*v_sort;
end;
accu = 0;
for i=1:class_num
for j =train_num+1:class_sample
name =[path num2str(i,'%.3d') '\' num2str(j,'%.2d') '.BMP' ];
Image = double(imread(name));
Image = imresize(Image,scale);
CoeTest= Image*v_sort;
for k=1:class_num*train_num
dist(k) = sum(sum((CoeTest - Coe(:,:,k)).^2));
end;
[min_d,min_index] = min(dist);
if floor((min_index-1)/train_num)==(i-1)
accu = accu+1;
end;
end;
end;
accu/(class_num*test_num)
time1 = etime(clock,t0)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -