⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fld_xiugai.m

📁 fisher辨别分析方法的修改版
💻 M
字号:
clear
allsamples=[];
Sw = [];       %类内散度矩阵
Sb = [];       %类间散度矩阵
q=60;          %选取的特征向量的维数
n = 3 ;         %每个类别的样本数目
tic
for i=1:100         %读入训练样本
  for j=[1 2 3]
  a=imread(strcat('E:\王选\palmprint_database\palmprint_database\P_',num2str(i),'_',num2str(j),'.bmp'));
  a=histeq(a);   %直方图均衡化
  a=double(a);
%   [CA,CH,CV,CD] = dwt2(a,'db4');
%  [CA1,CH1,CV1,CD1] = dwt2(CA,'db4');
%   a=log10(a+1);              %进行对数变换
   b=a(1:128*128);
%    b=CA1(1:37*37);
  allsamples=[allsamples;b];%生成行向量
  end
end


xunlian = zeros(100,128*128);   %计算各类的均值
% xunlian = zeros(100,37*37);
for i = 1:n:(100*(n-1)+1)
    for j = 0:(n-1)
        xunlian((i-1)/n+1,:) = (xunlian((i-1)/n+1,:) + allsamples(i+j,:));
    end
end
xunlian =1/n * xunlian;  

% Sw = allsamples;
% for i = 1:n:(100*(n-1)+1)    %计算类内散度矩阵为Sw'*Sw
%     for j = 0:(n-1)
%         Sw((i+j),:) = Sw((i+j),:) - xunlian((i-1)/n+1,:);
%     end
% end
samplemean=mean(allsamples);
for i = 1:100                 %计算雷间散度矩阵为Sb'*Sb
xunlian(i,:) =xunlian(i,:) - samplemean;
end
Sb =xunlian;
Sb = Sb * n;

for i=1:100*n               %对训练样本归一化
    allsamples(i,:) = allsamples(i,:)-samplemean;
end;
%xmean = allsamples;

    

%获取K_L变化的特征植及特征向量

sigma = xunlian*xunlian';
[v d]=eig(sigma);
%以下选择特征值不为0的向量

  p=rank(sigma);
  
  [v d]=eig(sigma);
[ld,ind]=sort(diag(d));         % 对特征值进行索引排序
landa=ld(end:-1:1);                             % 从大到小排序
    Ind=ind(end:-1:1);                              % 把对应的序号排序
    for i=1:p
        X(:,i)=v(:,Ind(i));                         % 由大到小排前 p 个特征值的特征向量
    end
     base = xunlian' * X(:,1:p);    %主成分分析的投影向量16384*n
  
 
% 以下计算fld的投影向量
% Sw_1 = base' * Sw' * Sw * base;
Sw_1 = base' * allsamples' * allsamples * base;
Sb_1 = base' * Sb' * Sb *base;
[fld_vectors,fld_values] = eig(Sb_1,Sw_1);

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%————————————————————选取90%的能量
% d2=diag(fld_values);
% dsort1=flipud(d2);
% vsort1=fliplr(fld_vectors);
% %以下选择90%的能量
%  dsum=sum(dsort1);
%  dsum_extract=0;
%  q=0;
%   while(dsum_extract/dsum<0.9)
%     q=q+1;
%     dsum_extract=sum(dsort1(1:q));
%  end
% 
%  fld_values = vsort1(:,1:(q-1));
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
 %%%%%%%**************************************************************
 %——————————选取前q个特征向量
 [ld,ind]=sort(diag(fld_values));         % 对特征值进行索引排序
landa=ld(end:-1:1);                             % 从大到小排序
    Ind=ind(end:-1:1);                              % 把对应的序号排序
    for i=1:q
        fld_values(:,i) = fld_vectors(:,Ind(i));                         % 由大到小排前 p 个特征值的特征向量
    end
 %%%%%%%%*************************************************************
 
 fld_base = base * fld_values;
 allcoor=allsamples * fld_base;


t1=toc;     %计算特征提取时间
accu = 0;
%测试过程
tic
for i=1:100
  for j=[4 5 6]   %读入100 x (6-n) 副测试图像
  a=imread(strcat('E:\王选\palmprint_database\palmprint_database\P_',num2str(i),'_',num2str(j),'.bmp'));
  a=histeq(a);   %直方图均衡化
   a=double(a);
%    [CA,CH,CV,CD] = dwt2(a,'db4');
%   [CA1,CH1,CV1,CD1] = dwt2(CA,'db4');
%   a=log10(a+1);              %进行对数变换
   b=a(1:128*128);      %生成行向量 
%  b=CA1(1:37*37);
  tcoor=(b-samplemean)*fld_base;
  for k=1:100*n
    mdist(k)=norm(tcoor-allcoor(k,:));
  end;
   %三阶近邻
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% [dist,index2]=sort(mdist); 
% class1=floor( (index2(1)-1)/n)+1; 
% class2=floor((index2(2)-1)/n)+1; 
% class3=floor((index2(3)-1)/n)+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; 
% t3=toc;       %计算测试时间
% accuracy=accu/(100*(6-n)) % 输出识别率 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%最近邻
[dist,index2]=sort(mdist);
class1=floor( (index2(1)-1)/n)+1; 
class=class1;
if class==i 
accu=accu+1; 
end; 
end; 
end;
t2=toc;       %计算测试时间
accuracy=accu/(100*(6-n)) % 输出识别率 

⌨️ 快捷键说明

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