MATLAB下人脸图像的PCA重构matlab代码(共5页)_第1页
MATLAB下人脸图像的PCA重构matlab代码(共5页)_第2页
MATLAB下人脸图像的PCA重构matlab代码(共5页)_第3页
MATLAB下人脸图像的PCA重构matlab代码(共5页)_第4页
MATLAB下人脸图像的PCA重构matlab代码(共5页)_第5页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、MATLAB下人脸图像的PCA重构matlab代码主函数clc; clear all;newimage=double(zeros(112*6,92*5); M,sort_V,avg_face = averageface( );%返回去均值的矩阵和协方差,以及排列好的特征向量 k=1; new_sort_V =sort_V(1:10304,1:30);%取特征向量的前30个,并进行显示 for i=1:112:5*112+1 for j=1:92:4*92+1 newimage(i:i+111,j:j+91)=reshape(new_sort_V(:,k),112,92); k=k+1; end

2、 end minum=min(min(newimage);%对特征向量进行标定 maxum=max(max(newimage); d=maxum-minum; newimage(:,:)=newimage(:,:)-minum; newimage(:,:)=newimage(:,:)/d; newimage(:,:)=newimage(:,:)*255; newimage=uint8(newimage); subplot(1,3,1); title(特征向量图); imshow(newimage);%显示前30个特征向量 avg_face=uint8(avg_face); subplot(1,

3、3,2) title(平均脸); imshow(avg_face); subplot(1,3,3) tyxs,re_newimage = touyingxishu( sort_V ,avg_face); imshow(re_newimage); 子函数function =img2txt()maindir = D:Image; subdir = dir( maindir ); % 先确定子文件夹 m=1;k=1;for i = 1 : length( subdir ) if( isequal( subdir( i ).name, . ) | isequal( subdir( i ).name,

4、. ) | subdir( i ).isdir ) % 如果不是目录跳过 continue; end subdirpath = fullfile( maindir, subdir( i ).name, *.pgm ); images = dir( subdirpath ); % 在这个子文件夹下找后缀为pgm的文件 % 遍历每张图片 for j = 1 : length( images ) imagepath = fullfile( maindir, subdir( i ).name, images( j ).name ); imgdata = imread( imagepath ); % 这

5、里进行你的读取操作 row, col=size(imgdata); %将数据写入txt中 fid = fopen(C:UsersAdministratorDesktop编程实验材料att_faces,s,int2str(m),int2str(k),.txt,w); %新建txt文件存储图像的坐标和灰度值 for I=1:row for J=1:col fprintf(fid,%03dt,imgdata(I,J); end fprintf(fid,n) ; end fclose(fid); k=k+1; end m=m+1; k=1;end function M,sort_V,avg_face

6、= averageface()big_array=double(zeros(10304,400);new_big_array=double(zeros(10304,400);avg_face=double(zeros(112,92);i=1; for m=1:40; for k=1:10 FileName = C:UsersAdministratorDesktop编程实验材料att_faces,s,int2str(m),int2str(k),.txt; p = load (FileName); big_array(:,i)=reshape(p,10304,1); %将400张脸转换成10304

7、*400的大矩阵 new_p=reshape(p,112,92); avg_face(:,:)=avg_face(:,:)+new_p(:,:)/400; %求平均脸 i=i+1; endend M=mean(big_array); %对矩阵的每一列求均值 for i=1:400 new_big_array(:,i)=big_array(:,i)-M(i);%去均值后的矩阵end %用SVD求特征向量C0=new_big_array*new_big_array;%求低维度的协方差V0,=eig(C0);k=0;V=new_big_array*V0;%特征向量 for i=1:400 %将特征向

8、量进行归一化10304*400 for j=1:10304 k=k+V(j,i)2; end k=k(0.5); V(1:10304,i)= V(1:10304,i)/k; k=0;end sort_V=double(zeros(10304,400);k=400;for i=1:400 %将特征向量的列按特征值从大到小排列好 sort_V(1:10304,i)=V(1:10304,k); k=k-1; end function tyxs,re_newimage = touyingxishu( sort_V ,avg_face) FileName = C:UsersAdministratorDe

9、sktop编程实验材料att_faces,s,int2str(1),int2str(1),.txt; p = load (FileName); avg_face=double(avg_face); big_array=reshape(p,1,10304); a_big_array=double(reshape(big_array,112,92); big_array=a_big_array(:,:)-avg_face(:,:); big_array=reshape(big_array,1,10304); tyxs=big_array*sort_V; re_newimage=double(zeros(10304,1); for i=1:400 re_newimage(:,:)= re_newimage(:,:)+tyxs(i)*sort_V(1:10304,i); end re_newimage= reshape(re_newimage,112,92); re_newimage=re_newimage(:,:)+avg_face(:,:); minum=min(min(re_newimage);%对特征向量进行标定 maxum=max(max(re_newimage); d=maxum-minu

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论