ipca_jc_3.m

来自「又一种增量人脸学习算法——参考文献“Candid Covariance-Free」· M 代码 · 共 110 行

M
110
字号
% IPCA_JC_3.m   25th, May, 2008  made by J.Chen
% Candid Covariance-Free Incremental Principal Component Analysis. Juyang
% Weng, Yilu Zhang, Wey-Shiuan Hwang.

k = 70;
l = 0;
%%u = zeros(10304,2,k);
%%v = zeros(10304,2,k);
x = zeros(10304,40);
m = 200;                                                                   % the No.of Samples
m1 = 40;
n = 1;
for i = 1:40
    for j = 6:6
        a = imread(strcat('E:\FaceDataBase\ORL\s',num2str(i),'\',num2str(j),'.pgm'));   %a是112*92的矩阵                                                                        
        x(:,n) = (a(1:112*92))'; 
        x = double(x);
        n = n+1;                                                                  
    end
end

%中心化数据
%%%%%%%Xm = mean(x');                                                             %x转置后每行代表一张图片,按列求平均,返回一个行向量1*10304
for j = 1:m1         
    Xcter(:,j) = x(:,j)-Xm';
end
x=Xcter(:,1:m1);  

for n=201:240
    if mod(n,2)~=0        %奇数
        u(:,1,1) = x(:,n-200);
    else                  %偶数
        u(:,2,1) = x(:,n-200);
    end
    for i=1:k
        if i==n
            if mod(n,2)~=0
                v(:,1,i) = u(:,1,i);
            else
                v(:,2,i) = u(:,2,i);
            end
        else
            if mod(n,2)~=0
                v(:,1,i) = ((n-1-l)/n)*v(:,2,i)+((1+l)/n)*u(:,1,i)*u(:,1,i)'*(v(:,2,i)/norm(v(:,2,i)));      % Euclidean length
                u(:,1,i+1) = u(:,1,i)-u(:,1,i)'*(v(:,1,i)/norm(v(:,1,i)))*(v(:,1,i)/norm(v(:,1,i)));            
            else
                v(:,2,i) = ((n-1-l)/n)*v(:,1,i)+((1+l)/n)*u(:,2,i)*u(:,2,i)'*(v(:,1,i)/norm(v(:,1,i)));      % Euclidean length
                u(:,2,i+1) = u(:,2,i)-u(:,2,i)'*(v(:,2,i)/norm(v(:,2,i)))*(v(:,2,i)/norm(v(:,2,i))); 
            end
        end
    end
    n
end

P = [];
for i=1:k
    P(:,i) = v(:,2,i)/norm(v(:,2,i));
end
Y = P'*x;

accu = 0; 

%-------------------------------IPCA & Test--------------------------------
for i=1:40
    for j=7:10                                                             %读入40 x 5 副测试图像
        a=imread(strcat('E:\FaceDataBase\ORL\s',num2str(i),'\',num2str(j),'.pgm'));
        b=(a(1:10304))';
        b=double(b);
        bm = b - Xm';                                                      %将测试图片中心化!!!
        t=P'*bm;                                                           %计算测试图片在新特征空间中的坐标,是k*1阶矩阵
        mdist = [];
        for s=1:m1
            mdist(s)=norm(t'-Y(:,s)');
        end;
       
        %三阶近邻
        [dist,index2]=sort(mdist); 
        class1=floor((index2(1)-1)/5 )+1; 
        class2=floor((index2(2)-1)/5)+1; 
        class3=floor((index2(3)-1)/5)+1; 
        if class1~=class2 && class2~=class3 
            class=class1; 
        elseif class1==class2 
            class=class1; 
        elseif class2==class3 
            class=class2; 
        end; 
        if class==i 
            accu=accu+1; 
        end; 
    end; 
end; 

accuracy = accu/160                                                        % 输出识别率

%-------------------------------IPCA & Test--------------------------------

    
    
    
    
    
    
    
    
    
    
    

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?