PCA+2DPCA+DCT

  • i5_744415
    了解作者
  • 4.4MB
    文件大小
  • rar
    文件格式
  • 0
    收藏次数
  • VIP专享
    资源类型
  • 0
    下载次数
  • 2022-05-06 03:38
    上传日期
Matlab程序,利用了PCA和2DPCA,中间还用了DCT进行处理,使得程序运行速度加快
matlab】单样本PCA+2DPCA人脸识别代码.rar
  • 【matlab】单样本PCA+2DPCA人脸识别代码
  • test3
  • 2.BMP
    10.8KB
  • 3.BMP
    10.8KB
  • 1.BMP
    10.8KB
  • s1
  • 2.BMP
    10.8KB
  • 5.BMP
    10.8KB
  • 7.BMP
    10.8KB
  • 3.BMP
    10.8KB
  • 1.BMP
    10.8KB
  • Thumbs.db
    23.5KB
  • 6.BMP
    10.8KB
  • 5.1.bmp
    10.8KB
  • 4.BMP
    10.8KB
  • rebuildfaces
  • 人脸重建8__2.tif
    6.5KB
  • 人脸重建12.tif
    6.5KB
  • 人脸重建15__3.tif
    6.5KB
  • 人脸重建8__4.tif
    6.5KB
  • 人脸重建24__6.tif
    6.5KB
  • 人脸重建19__5.tif
    6.5KB
  • 人脸重建22.tif
    6.5KB
  • 人脸重建38.tif
    6.5KB
  • 人脸重建41__7.tif
    6.5KB
  • 人脸重建46__5.tif
    6.5KB
  • 人脸重建2__3.tif
    6.5KB
  • 人脸重建25__4.tif
    6.5KB
  • 人脸重建2.tif
    6.5KB
  • 人脸重建41__4.tif
    6.5KB
  • 人脸重建41.tif
    6.5KB
  • 人脸重建40__7.tif
    6.5KB
  • 人脸重建9.tif
    6.5KB
  • 人脸重建39__6.tif
    6.5KB
  • 人脸重建40__4.tif
    6.5KB
  • 人脸重建40__5.tif
    6.5KB
  • 人脸重建24__3.tif
    6.5KB
  • 人脸重建17__5.tif
    6.5KB
  • 人脸重建42__2.tif
    6.5KB
  • 人脸重建25__2.tif
    6.5KB
  • 人脸重建15__7.tif
    6.5KB
  • 人脸重建28.tif
    6.5KB
  • 人脸重建30__2.tif
    6.5KB
  • 人脸重建3__4.tif
    6.5KB
  • 人脸重建19__2.tif
    6.5KB
  • 人脸重建16__4.tif
    6.5KB
  • 人脸重建36.tif
    6.5KB
  • 人脸重建4__2.tif
    6.5KB
  • 人脸重建28__3.tif
    6.5KB
  • 人脸重建37__7.tif
    6.5KB
  • 人脸重建27__3.tif
    6.5KB
  • 人脸重建34__4.tif
    6.5KB
  • 人脸重建49__7.tif
    6.5KB
  • 人脸重建12__5.tif
    6.5KB
  • 人脸重建30__6.tif
    6.5KB
  • 人脸重建34__6.tif
    6.5KB
  • 人脸重建31__3.tif
    6.5KB
  • 人脸重建24__2.tif
    6.5KB
  • 人脸重建44__2.tif
    6.5KB
  • 人脸重建7__6.tif
    6.5KB
  • 人脸重建22__5.tif
    6.5KB
  • 人脸重建8__6.tif
    6.5KB
  • 人脸重建39__5.tif
    6.5KB
  • 人脸重建44__4.tif
    6.5KB
  • 人脸重建21__7.tif
    6.5KB
  • 人脸重建33__7.tif
    6.5KB
  • 人脸重建34__2.tif
    6.5KB
  • 人脸重建17__2.tif
    6.5KB
  • 人脸重建27.tif
    6.5KB
  • 人脸重建30__4.tif
    6.5KB
  • 人脸重建13__2.tif
    6.5KB
  • 人脸重建34__7.tif
    6.5KB
  • 人脸重建42__4.tif
    6.5KB
  • 人脸重建36__4.tif
    6.5KB
  • 人脸重建27__4.tif
    6.5KB
  • 人脸重建8__5.tif
    6.5KB
  • 人脸重建36__5.tif
    6.5KB
  • 人脸重建32__3.tif
    6.5KB
  • 人脸重建17__3.tif
    6.5KB
  • 人脸重建4__5.tif
    6.5KB
  • 人脸重建38__6.tif
    6.5KB
  • 人脸重建14__3.tif
    6.5KB
  • 人脸重建43__5.tif
    6.5KB
  • 人脸重建9__3.tif
    6.5KB
  • 人脸重建20__7.tif
    6.5KB
  • 人脸重建49.tif
    6.5KB
  • 人脸重建50__2.tif
    6.5KB
  • 人脸重建50__3.tif
    6.5KB
  • 人脸重建40__6.tif
    6.5KB
  • 人脸重建16__6.tif
    6.5KB
  • 人脸重建25__6.tif
    6.5KB
  • 人脸重建47__3.tif
    6.5KB
  • 人脸重建31__2.tif
    6.5KB
  • 人脸重建30.tif
    6.5KB
  • 人脸重建10__6.tif
    6.5KB
  • 人脸重建2__4.tif
    6.5KB
  • 人脸重建25__3.tif
    6.5KB
  • 人脸重建39__7.tif
    6.5KB
  • 人脸重建32__5.tif
    6.5KB
  • 人脸重建23__7.tif
    6.5KB
内容介绍
%PCA+DCT+2DPCA im=20;%先用20张图片测试,之后要用200张图片实验 %train_img=7;%表示读入一个人的7张图片,其中包括训练图片01,图片02-07用来做测试 allfaces=[]; allgrayfaces=[]; %多个人的人脸图片 l=1;%表示读入人脸的第一张图片,作为训练集 %应用2D-DCT时,变换矩阵C, 对重建图像进行DCT变换 %tic img=imread(strcat('F:\单样本识别\ORL\FERET-001\01.tif')); X=double(img); M=size(X,1); N=size(X,2); %Y=zeros(M,N); %M=80; Cm=zeros(M,M); Cn=zeros(N,N); %C(:,1)=1/sqrt(M); for k=1:M for m=1:M if k==1 Cm(m,k)=1/sqrt(M)*cos(pi*(2*m+1)*k/(2*M)); else Cm(m,k)=sqrt(2)/sqrt(M)*cos(pi*(2*m+1)*k/(2*M)); end end end for m=1:N for k=1:N if m==1 Cn(m,k)=1/sqrt(N)*cos(pi*(2*k+1)*m/2/N); else Cn(m,k)=sqrt(2)/sqrt(N)*cos(pi*(2*k+1)*m/2/N); end end end %Y=Cm'*X*Cn'; %M和N表示DCT的逆变换后的维度,即提取的DCT系数 p=50; M=p; N=p; Dm=zeros(M,p); Dn=zeros(p,N); for x=1:p for u=1:M if u==1 Dm(u,x)=1/sqrt(M)*cos((2*x+1)*u*pi/2/M); else Dm(u,x)=sqrt(2)/sqrt(M)*cos((2*x+1)*u*pi/2/M); end end end for y=1:p for v=1:N if v==1 Dn(y,v)=1/sqrt(N)*cos((2*y+1)*v*pi/2/N); else Dn(y,v)=sqrt(2)/sqrt(N)*cos((2*y+1)*v*pi/2/N); end end end %X=Dm'*Y(1:M,1:N)*Dn'; %imwrite(mat2gray(Y),strcat('F:\单样本识别\【matlab】单样本PCA+2DPCA人脸识别代码\DCT重建人脸\人脸重建FERET-001-02.tif')); %imwrite(mat2gray(X),strcat('F:\单样本识别\【matlab】单样本PCA+2DPCA人脸识别代码\DCT重建人脸\人脸重建FERET-001-002-20.tif')); %toc allsamples=[]; %所有训练图像 xmean=[]; %% 训练样本应用PCA重建人脸图像,再用DCT for i=1:im%先用20张图片做实验 if i<10 img=imread(strcat('F:\单样本识别\ORL\FERET-00',num2str(i),'\0',num2str(l),'.tif'));%读文件夹FERET-001~FERET-009的第一张人脸图片01.tif else if i<100 img=imread(strcat('F:\单样本识别\ORL\FERET-0',num2str(i),'\0',num2str(l),'.tif'));%读文件夹FERET-010~FERET-099的第一张人脸图片01.tif else img=imread(strcat('F:\单样本识别\ORL\FERET-',num2str(i),'\0',num2str(l),'.tif'));%读文件夹FERET-100~FERET-200的第一张人脸图片01.tif end end b=img( 1:80*80 ); % b是行矢量 1×N,其中N=80*80=6400,提取顺序是先列后行,即从上到下,从左到右 b=double(b); allsamples=[ allsamples; b ]; % allsamples是一个M*N 矩阵,allsamples中每一行数据代表一张图片,其中M=20 fprintf('读入第 %d 个人的第 %d 张人脸图片\n',i,l); end samplemean=mean(allsamples); % 平均图片,1 × N for i=1:im xmean(i,:)=allsamples(i,:)-samplemean; % xmean 是一个M × N 矩阵,xmean每一行保存的数据是“每个图片数据-平均图片” end; % 获取特征值及特征向量 sigma=xmean*xmean'; % M * M 阶矩阵 [v d]=eig(sigma); d1=diag(d); % 按特征值大小以降序排列 dsort = flipud(d1); vsort = fliplr(v); %以下选择90%的能量 dsum = sum(dsort); dsum_extract = 0; p1 = 0; while( dsum_extract/dsum < 0.9) p1 = p1+ 1; dsum_extract = sum(dsort(1:p1)); end i=1; % (训练阶段)计算特征脸形成的坐标系 base = xmean' * vsort(:,1:p1) * diag(dsort(1:p1).^(-1/2)); % base 是N×p 阶矩阵,除以dsort(i)^(1/2)是对人脸图像的标准化(使其方差为1) % 详见《基于PCA 的人脸识别算法研究》p31 % xmean' * vsort(:,i)是小矩阵的特征向量向大矩阵特征向量转换的过程 % while (i<=p && dsort(i)>0) % base(:,i) = dsort(i)^(-1/2) * xmean' * vsort(:,i); % base 是N×p 阶矩阵,除以dsort(i)^(1/2)是对人脸图像的标准化(使其方差为1) % i = i + 1; % xmean' * vsort(:,i)是小矩阵的特征向量向大矩阵特征向量转换的过程 % end % 将训练样本对坐标系上进行投影,得到一个 M*p 阶矩阵allcoor allcoor = allsamples * base; % allcoor 里面是每张训练人脸图片在 M*p 子空间中的一个点,即在子空间中的组合系数, %利用PCA算法rebuild face images % 根据特征系数及特征脸重建图( p=6 : 6个特征脸,即:6个特征值和特征向量) c=xmean*base; allsamples=[]; a_allsamples=[]; t=6; for i=1:im temp=base(:,1:t)*c(i,1:t)'; % temp=base(:,1:t)*allcoor(i,1:t)'; temp=temp+samplemean'; allfaces=[allfaces;reshape(temp,80,80)]; imwrite(mat2gray(reshape(temp, 80,80)),strcat('F:\单样本识别\【matlab】单样本PCA+2DPCA人脸识别代码\rebuildfaces\人脸重建',num2str(i),'.tif')); allgrayfaces=[allgrayfaces;mat2gray(reshape(temp, 80,80))]; %DCT变换的一幅人脸图片 DCTface=Cm'*reshape(temp,80,80)*Cn'; imwrite(mat2gray(DCTface),strcat('F:\单样本识别\【matlab】单样本PCA+2DPCA人脸识别代码\DCT重建人脸\1人脸重建0',num2str(i),'.tif')); %DCT逆变换的一幅人脸图片 NDCTface=Dm'*DCTface(1:p,1:p)*Dn'; imwrite(mat2gray(NDCTface),strcat('F:\单样本识别\【matlab】单样本PCA+2DPCA人脸识别代码\DCT重建人脸\1人脸重建',num2str(i),'.tif')); allsamples=[allsamples;NDCTface]; a_allsamples=[a_allsamples;reshape(NDCTface,1,p*p)]; end %% 直接对人脸图像用DCT % a_allsamples=[]; % for i=1:im%先用20张图片做实验 % if i<10 % img=imread(strcat('F:\单样本识别\ORL\FERET-00',num2str(i),'\0',num2str(l),'.tif'));%读文件夹FERET-001~FERET-009的第一张人脸图片01.tif % else % if i<100 % img=imread(strcat('F:\单样本识别\ORL\FERET-0',num2str(i),'\0',num2str(l),'.tif'));%读文件夹FERET-010~FERET-099的第一张人脸图片01.tif % else % img=imread(strcat('F:\单样本识别\ORL\FERET-',num2str(i),'\0',num2str(l),'.tif'));%读文件夹FERET-100~FERET-200的第一张人脸图片01.tif % end % end % % b=img( 1:80*80 ); % b是行矢量 1×N,其中N=80*80=6400,提取顺序是先列后行,即从上到下,从左到右 % b=double(img); % DCTface=Cm'*b*Cn'; % imwrite(mat2gray(DCTface),strcat('F:\单样本识别\【matlab】单样本PCA+2DPCA人脸识别代码\DCT重建人脸\2人脸重建0',num2str(i),'.tif')); % %DCT逆变换的一幅人脸图片 % NDCTface=Dm'*DCTface(1:p,1:p)*Dn'; % imwrite(mat2gray(NDCTface),strcat('F:\单样本识别\【matlab】单样本PCA+2DPCA人脸识别代码\DCT重建人脸\2人脸重建',num2str(i),'.tif')); % allsamples=[allsamples;NDCTface]; % a_allsamples=[a_allsamples;reshape(NDCTface,1,p*p)]; % % %allsamples=[ allsamples; b ]; % allsamples是一个M*N 矩阵,allsamples中每一行数据代表一张图片,其中M=20 % % fprintf('读入第 %d 个人的第 %d 张人脸图片\n',i,l); % end %% a_samplemean=mean(a_allsamples); a_samplemean=reshape(a_samplemean,size(a_samplemean,1)*p,p);%得到训练样本--人脸平均矩阵A,为80*80维的 xmean=[]; sigma=zeros(p,p); for i=0:(im-1) xmean=allsamples(i*p+1:i*p+p,:)-a_samplemean; sigma=sigma+xmean'*xmean; end sigma=sigma/im; % % 获取特征值及特征向量 % sigma=xmean*xmean'; % M * M 阶矩阵 [v d]=eig(sigma); d1=diag(d); % 按特征值大小以降序排列 dsort = flipud(d1); vsort = fliplr(v); %以下选择60%的能量 dsum = sum(dsort); dsum_extract = 0; p1 = 0; while( dsum_extract/dsum < 0.5) p1 = p1 + 1; dsum_extract = sum(dsort(1:p1)); end i=1; % (训练阶段)计算特征脸形成的坐标系 %base = xmean' * vsort(:,1:p) * diag(dsort(1:p).^(-1/2)); base1 = vsort(:,1:p1) * diag(dsort(1:p1).^(-1/2)); allcoor1 = allsamples * base1; % allcoor 里面是每张训练人脸图片在 M*p 子空间中的一个点,即在子空间中的组合系数, accu = 0; % 下面的人脸识别过程中就是利用这些组合系数来进行识别 %% % 测试过程 %alltest=[]; %所有测试图像 test_img=7;%表示读入一个人的6张图片,其中包括训练图片02-07用来做测试 mdist=[]; %多个人的人脸图片 %l=1;%表示读入人脸的第一张图片,作为训练集 for l=2:test_img for i=1:im%先用20张图片做实验 if i<10 img=imread(strcat('F:\单样本识别\ORL\FERET-00',num2str(i),'\0',num2str(l),'.tif'));%读文件夹FERET-001~FERET-009的第一张人脸图片01.tif else if i<100 img=imread(strcat('F:\单样本识别\ORL\FERET-0',num2str(i),'\0',num2str(l),'.tif'));%读文件夹FERET-010~FERET-099的第一张人脸图片01.tif else img=imread
评论
    相关推荐
    • Matlab合集
      冈萨雷斯数字图像处理MATLAB版.中文版+数字图像处理第二版中文版(冈萨雷斯)+MATLAB-R2014a完全自学一本通+MATLAB R2016a完全自学一本通 素材文件+[模式识别与智能计算:MATLAB技术实现(第2版)].杨淑莹.扫描版
    • MATLAB教程
      MATLAB教程MATLAB教程MATLAB教程MATLAB教程MATLAB教程MATLAB教程
    • MATLAB
      MATLAB 该项目是在matlab上完成的,涉及创建和移动宇宙飞船和机器人。 太空飞船和机器人是使用Matlab中的简单几何形状创建的,并通过连续变换矩阵进行移动。 这个项目教我如何使用变换矩阵(旋转,平移等)的概念...
    • MATLAB基础
      一本学习matlab的一本好书
    • MATLAB编译器
      基于MATLAB 2018b版本介绍MATLAB编译器。介绍如何利用编译器将MATLAB代码编译为独立应用程序或组件,并在没有安装MATLAB的计算机上进行部署。
    • matlabruntime
      通过奇点容器运行您的matlab项目 可以在没有MATLAB的容器中运行matlab代码。 为此,我们首先需要通过Matlab编译器在本地构建相应的Matlab代码的独立应用程序,然后使用具有Matlab运行时( 的容器)运行该应用程序 )...
    • matlab实现
      matlab实现 matlab实现matlab实现matlab实现matlab实现
    • matlab 教程
      matlab 信号处理资料,里面包含信号处理pdf文档,一些杂乱的程序和命令等
    • matlab教程
      matlab教程,PPT格式,包含 matlab基本知识、matlab入门、matlab作图、线性规划、无约束优化、非线性规划、统计工具箱、差值、微分方程等多项知识点,并且每个知识点独立成为PPT,内还含有matlab信号处理详解等文档...
    • matlab简介
      1.MATLAB 开发环境 1.1 MATLAB 的视窗环境 进入MATLAB之后,会看到一个视窗MATLAB Command Window称为指令视窗,它是你键入指令的地方同时 MATLAB也将计算结果显示在此。 1.2 简易计算 我们先从MATLAB的...