回 帖 发 新 帖 刷新版面

主题:请高人帮我看下这个掌纹识别的程序

Folder=['E:\orl\s01';'E:\orl\s02';'E:\orl\s03';'E:\orl\s04';'E:\orl\s05';'E:\orl\s06';];
BMPPath = ['\01.bmp';'\02.bmp';'\03.bmp';'\04.bmp';'\05.bmp';'\06.bmp';'\07.bmp';'\08.bmp';'\09.bmp';'\10.bmp'];
persons=6;                      
pictures=10;                     
row=36;                                             
col=28;                         
d=10;                           
ctr=8;                          
cts=pictures-ctr;              
ptr=persons*ctr;               
pts=persons*cts;   
 for i=1:persons                                          
        for j=1:ctr                                        
            img_path=[Folder(i,:),BMPPath(j,:)];           
            img=double(imread(img_path));             
          img=imresize(img,[36 28],'bilinear');      
          A(:,:,(i-1)*ctr+j)=img;
          [Uq,Sq,Vq]=svd(A(:,:,(i-1)*ctr+j));
           [ld,ind]=sort(diag(Sq));                        
    landa=ld(end:-1:1);                             
    Ind=ind(end:-1:1);                            
    for i=1:d
        Xq(:,i)=Uq(:,Ind(i));                       
        Xqq(:,i)=Vq(:,Ind(i));
    end
           [C,S]=wavedec2(img,3,'bior6.8');       
               cH2=double(detcoef2('h',C,S,2));      
               cV2=double(detcoef2('v',C,S,2));        
               cH1=double(detcoef2('h',C,S,1));    
               cV1=double(detcoef2('v',C,S,1));       
               AGH1=cH1; 
         Z1=zeros(26,6);Z2=zeros(21,9);Z3=zeros(10,28);Z4=zeros(15,28);Z5=zeros(19,10);Z6=zeros(17,28);
         AGHZ1=[AGH1,Z1];
            AGHZ11=[AGHZ1      
                Z3]; AGHZ112(:,:,(i-1)*ctr+j)=AGHZ11;    AGHZ111=reshape(AGHZ11,row*col,1);AGHZ111(:,(i-1)*ctr+j)=AGHZ111; 
            AGH2=cH2;  AGHZ2=[AGH2,Z2];AGHZ22=[AGHZ2
                Z4];AGHZ221(:,:,(i-1)*ctr+j)=AGHZ22;  AGHZ222=reshape(AGHZ22,row*col,1); AGHZ222(:,(i-1)*ctr+j)=AGHZ222; 
            AGV1=cV1;  AGVZ1=[AGV1,Z1]; AGVZ11=[AGVZ1
                Z3];AGVZ112(:,:,(i-1)*ctr+j)=AGVZ11;AGVZ111=reshape(AGVZ11,row*col,1); AGVZ111(:,(i-1)*ctr+j)=AGVZ111; 
            AGV2=cV2; AGVZ2=[AGV2,Z2]; AGVZ22=[AGVZ2
                Z4];AGVZ221(:,:,(i-1)*ctr+j)=AGHZ22; AGVZ222=reshape(AGVZ22,row*col,1); AGVZ222(:,(i-1)*ctr+j)=AGVZ222; 
        end
    end
    ef=zeros(36,28);
    for i=1:ptr
        ef=ef+A(:,:,i);                         
    end
    ef=ef/ptr;                          
    for i=1:ptr
        AA(:,:,i)=A(:,:,i)-ef-AGHZ11-AGHZ22-AGVZ11-AGVZ22;  
    end    
        for i=1:persons
        efw(:,:,i)=zeros(row,col);
    end
    for i=1:persons
        for j=1:ctr
            efw(:,:,i)=efw(:,:,i)+A(:,:,(i-1)*ctr+j);
        end
        efw(:,:,i)=efw(:,:,i)/ctr;
    end
    Sb=zeros(col,col);    
    for i=1:persons
        tmp=efw(:,:,i)-ef;
        tmp=tmp*ctr;
        Sb=Sb+tmp'*tmp;
    end
    Sb=Sb/ptr;
    Sw=zeros(col,col);   
    for i=1:persons
        for j=1:ctr
           wmp(:,:,i)=A(:,:,(i-1)*ctr+j)-efw(:,:,i);
       end
        wmp(:,:,i)=wmp(:,:,i)+A(:,:,(i-1)*ctr+j)-efw(:,:,i);
    end
    
    for i=1:persons
               Sw=Sw+wmp(:,:,i)'*wmp(:,:,i);
           end
    Sw=Sw/ptr;
       [V,D]=eig(Sw);                                   
 Db=1/(sqrt(diag(D)));
 Db=diag(Db);
   Sbb=Db*V'*Sb*V*Db;
   [VV,DD]=eig(Sbb);
 [ld,ind]=sort(diag(DD));                         
    landa=ld(end:-1:1);                            
    Ind=ind(end:-1:1);                             
    for i=1:d
        X(:,i)=VV(:,Ind(i));                        
    end
 X'==X'*Db*V';
 toc
for i=1:ptr    
        Y(:,:,i)=AA(:,:,i)*X;                      
        Yq(:,:,i)=Xq*Sq*Xqq; 
    end
for i=1:persons                                          
        for j=(ctr+1):pictures                                                    
            img_path=[Folder(i,:),BMPPath(j,:)];           
            img=double(imread(img_path)); 
             img=imresize(img,[46 46],'bilinear');       
            B(:,:,cts*(i-1)+(j-ctr))=img;          
        end
    end
    for i=1:pts
        B(:,:,i)=B(:,:,i)-ef;                       
        [Uq,Sq,Vq]=svd(AA(:,:,i));
    end
    for i=1:pts    
        YT(:,:,i)=B(:,:,i)*X;                      
        YTq(:,:,i)=Uq*Sq*Vq; 
    end
err=0;                                  
Aclass=zeros(ptr,1);                        
Bclass=zeros(pts,1);                       
Bresult=zeros(pts,1);                     

for ac=1:ptr
    Aclass(ac)=ceil(ac/ctr);            
end

for bc=1:pts
    Bclass(bc)=ceil(bc/cts);               
end

for i=1:pts
    Dij=zeros(ptr,1);                       
    for j=1:ptr
        YD=YT(:,:,i)-Y(:,:,j)+(YTq(:,:,i)-Yq(:,:,j));             
        for k=1:d
            Dij(j)=Dij(j)+norm(YD(:,k));   
        end
    end
    [Min,IND]=sort(Dij);                    
    Bresult(i)=Aclass(IND(1));
    if Bresult(i)~=Bclass(i)               
        err=err+1;
    end
end
    
disp('错判率:'),disp(err/pts);






运行后出现错误
??? Index exceeds matrix dimensions.
Error in ==> D:\MATLAB6p5\work\Untitled.m
On line 52  ==>         ef=ef+A(:,:,i);      


[em10][em10]

回复列表 (共1个回复)

沙发

ef和A的维数不一致,ef是二维的,A是三维的,怎么相加?当然为出错了。

我来回复

您尚未登录,请登录后再回复。点此登录或注册