2 duanduan0212 duanduan0212 于 2014.07.31 14:44 提问

大家帮忙看看我这段matlab,用pca处理图像,但是输出的图片为什么会是重复的三张?

function y=mypca()
%%%%%%%%%%%%%%%%%%%%%%%%%PCA算法对人脸图像处理提取主成分程序
path = ['.\']; % 提取当前目录
%读取图像
numimage=4; %4张人脸
imagepath=[path 'ORL\ORL001' '.bmp']; %第一张人脸文件的路径及文件名:D:\PCA\ORL\ORL001.bmp
immatrix=imread(imagepath); % 读入第一张人脸文件,构成矩阵immatrix
[m,n]=size(immatrix); % 计算矩阵immatrix的行数m、列数n
DATA = uint8 (rand(m*n, numimage)); %随机生成m*n行、numimage列的矩阵,并取uint8
for i=1:numimage
s1=floor(i/100); % 取整,求第3位
tem=rem(i,100); % i除以100的余数,取后两位
s2=floor(tem/10); % 取第2位
s3=rem(tem,10); % 取第1位

imagepath=[path 'ORL\ORL' int2str(s1) int2str(s2) int2str(s3) '.bmp']; % 构成图像文件的路径即文件名
immatrix=imread(imagepath); % 读入每一张人脸文件,构成矩阵immatrix
imVector=reshape(immatrix,m*n,1); % 将矩阵immatrix转化为一个列向量,长度为m*n
DATA(:,i)=imVector; % 将列向量imVector依次加入到DATA矩阵的列中.DATA先随机生成过的

end

clear i;clear j;
save DATA DATA; % 保存DATA
mn=mean(double(DATA'))'; % 计算DATA的行向量的均值
save mn mn; % 保存DATA的行向量的均值
%image substracted by mean of all train images
DATAzeromean=double(DATA)-repmat(mn,1,numimage);
save DATAzeromean DATAzeromean;
clear DATA;

L=DATAzeromean'*DATAzeromean;
[V,D]=eig(L);
enginvalue=diag(D);
[enginvalue,ix]=sort(enginvalue);%按升序排列矩阵元素
ix=flipud(ix);%从上到下翻转矩阵,即按降序
V=V(:,ix); %对V的特征向量位置调整
facespace=DATAzeromean*V; %脸空间

for t=1:numimage
facespace(:,t)=facespace(:,t)/norm(facespace(:,t));%Normalisation to unit length
end

subdim=4;
facespace=facespace(:,1:subdim);%选择子特征向量的协方差矩阵
projdata=facespace'*DATAzeromean;

save projdata projdata;
save facespace facespace;

datareconstruct=facespace*projdata;
fprintf('正在保存 Wakesplace中的图片数据\n');
save datareconstruct datareconstruct;
for i=1:numimage-1
imdata=datareconstruct(:,i);
imdata=reshape(imdata,m,n);
imwrite(imdata,['.\生成的特征脸\' int2str(i) '.bmp'],'bmp');%得到重构图像1.bmp---4.bmp
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

1个回答

xtt342628393
xtt342628393   2014.08.05 11:13

immatrix=imread(imagepath); % 读入第一张人脸文件,构成矩阵immatrix的封号去掉

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!