matlab代码
%输入数据格式
filename_m='E:/database/yalefaces/yalefaces/s%d.gif';
%记录所有数据的矩阵
info=zeros(243*320,166);
%输入,将图片保存为一列
k=20;
for i=1:166
filename=sprintf(filename_m,i);
img = imread(filename,'gif');
info(:,i)=img(:);
end
%进行PCA分析
coeff=pca(info);
%只保留前k个特征
coeff(:,k+1:165)=0;
info=info* (coeff * coeff');
filename_m='E:/database/yalefaces/result/s%d.gif';%我是自己先创建该文件夹存放输出
%输出图片
for i=1:166
filename=sprintf(filename_m,i);
img=reshape(info(:,i),243,320);
imwrite(img,filename,'gif');
end
文件改名的python3脚本
数据集目前的命名和后缀非常凌乱,所以使用脚本
import os
import re
import sys
fileList = os.listdir(r"E:/database/yalefaces/yalefaces")
# 输出此文件夹中包含的文件名称
print("修改前:" + str(fileList)[1])
# 得到进程当前工作目录
currentpath = os.getcwd()
# 将当前工作目录修改为待修改文件夹的位置
os.chdir(r"E:/database/yalefaces/yalefaces")
# 名称变量
num = 1
# 遍历文件夹中所有文件
for fileName in fileList:
# 匹配文件名正则表达式
pat = ".+\."
# 进行匹配
pattern = re.findall(pat, fileName)
# 文件重新命名
os.rename(fileName, ('s'+str(num) + '.' + 'gif'))
# 改变编号,继续下一项
num = num + 1
print("***************************************")
# 改回程序运行前的工作目录
os.chdir(currentpath)
# 刷新
sys.stdin.flush()
# 输出修改后文件夹中包含的文件名称
print("修改后:" + str(os.listdir(r"E:/database/yalefaces/yalefaces"))[1])