主题:请高人帮我看下这个掌纹识别的程序
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]
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]