资源简介

pca特征降维,gabor小波变换,人脸识别的matlab程序

资源截图

代码片段和文件信息


clear all;
tic    %秒表定时器
f0=0.4;
allsamples=[];
for i=1:40
    for j=1:5
        a=imread(strcat(‘E:\orl\‘‘orl_0‘num2str(i)‘_‘‘00‘num2str(j)‘.bmp‘));  %从图像文件中读取图像数据  字符串连接
        b=[];
        for theta = [0pi/8pi/4pi*3/8pi/2pi*5/8pi*3/4pi*7/8];%用弧度0pi/4pi/2pi*3/4
            x = 0;
            for m = linspace(-8811)   %在-8和8之间产生11个点的线性空向量
                x = x + 1;
                y = 0;
                for n = linspace(-8811)
                    y = y + 1;
                    z(yx)=computer(mnf0theta);
                end
            end
            filtered = filter2(za‘valid‘);    %用二维Gabor滤波器对读入的人脸进行滤波,得到的只取那些非补零序列计算得到的相关序列,其长度小于I
            f = abs(filtered);       %取绝对值或复数模
            
            [cs]=wavedec2(f3‘db1‘);
            a3=appcoef2(cs‘db1‘3);             
            
            b=[b;a3]   ;
        end
        
        d=b(1:104*11) ;   
        allsamples=[allsamples;d];   %所有样本
    end
end


samplemean=mean(allsamples);%求阵列的均值 得到了均值行向量 其每个元素为矩阵allsamples相应列的均值  这时就有200列 
for i=1:200
    xmean(i:)=allsamples(i:)-samplemean;  %所有样本-样本均值
end;
%获取特征植及特征向量
sigma=xmean*xmean‘;  %协方差矩阵
[v d]=eig(sigma);   %求特征值和特征向量 v:特征值向量 d:特征值矩阵
d1=diag(d); %把特征值矩阵d主对角线上的元素组成一个列矩阵d1
%按特征值大小以降序排列
dsort=flipud(d1);  %矩阵上下翻转
vsort=fliplr(v);   %矩阵左右翻转

%以下选择90%的能量
dsum=sum(dsort);  %阵列元素求和  即所有特征值求和
dsum_extract=0;
p=0;
while(dsum_extract/dsum<0.96)
    p=p+1;
    dsum_extract=sum(dsort(1:p));
end    %选择90%的能量
i=1;
% (训练阶段)计算特征脸形成的坐标系
base = xmean‘ * vsort(:1:p) * diag(dsort(1:p).^(-1/2)); 
allcoor=allsamples*base;
accu = 0;
%测试过程
for i=1:40
    for j=6:10%读入测试图像
        a=imread(strcat(‘E:\orl\‘‘orl_0‘num2str(i)‘_‘‘00‘num2str(j)‘.bmp‘));
        b=[];
        for theta = [0pi/8pi/4pi*3/8pi/2pi*5/8pi*3/4pi*7/8];%用弧度0pi/4pi/2pi*3/4
            x = 0;
            for m = linspace(-8811)   %在-8和8之间产生11个点的线性空向量
                x = x + 1;
                y = 0;
                for n = linspace(-8811)
                    y = y + 1;
                    z(yx)=computer(mnf0theta);
                end
            end
            filtered = filter2(za‘valid‘);    %用二维Gabor滤波器对读入的人脸进行滤波,得到的只取那些非补零序列计算得到的相关序列,其长度小于I
            f = abs(filtered);       %取绝对值或复数模
            
            [cs]=wavedec2(f3‘db1‘);
            a3=appcoef2(cs‘db1‘3);
            
            b=[b;a3];
        end
        b=double(b);
        e=b(1:104*11);
        tcoor=e*base;
        for k=1:200
            mdist(k)=norm(tcoor-allcoor(k:));   %求矩阵的范数
        end;               %每一个测试图像的特征脸与训练图像相对比
         %三阶近邻
        [distindex2]=sort(mdist); %按升序排列元素
        class1=floor( (index2(1)-1)/5 )+1;  %floor:朝负无穷大方向取整
        class2=floor((index2(2)-1)/5)+1; 
        class3=floor((index2(3)-1)/5)+1; 
        if class1~=class2 && class2~=class3 
            class=class1; 
        elseif class1==class2 
            cla

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     文件        3646  2013-04-10 13:30  pca&gabor.m

评论

共有 条评论