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

📄 gabor2pca.m

📁 指纹识别系统设计全过程实现 matlab软件环境实现
💻 M
字号:
function [out_time]=gabor2pca(P_2N,P_1N)

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Based on Gabor wavelets and 2DPCA+PCA
% wenchangzhi 2006/9/16     
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
N=100; % 手掌数
M=6; % 每个手掌的图像数目
MM=3; % 训练样本数 

% % 输入所有图像,由gabor_palm 函数得到运算结果.并将其保存
% for i=0:99
%     for j=1:6
%        i
%        j     
%         im=imread(strcat('P_',num2str(i),'_',num2str(j),'.bmp')); 
%         im=double(im);
% %         h=fspecial('gaussian');
%          H = fspecial('gaussian',[5 5],0.5);
%         imagein=filter2(H,im)/255;  
%         result_gabor=gaborpalm(imagein);     
%         eval(['save  Gabor_four_eight\G' num2str(i)  '_' num2str(j)  '  result_gabor ' ';']);%save the result matrix   
%     end
% end
% 训练,输入所有的训练图像,计算其平均值

tic;%计时开始
Sum=zeros(256,40);
Temp=[];
for i=0:99
    for j=1:MM
        eval(['load Gabor_four_eight\G' num2str(i) '_' num2str(j) ';']);
        Sum=Sum+result_gabor;
        Temp=[Temp; result_gabor];
        clear result_gabor;
    end
end
result_mean=Sum/(N*MM);

for i=0:299
    
Temp(256*i+1:256*(i+1),:)=Temp(256*i+1:256*(i+1),:)-result_mean;

end
% 计算协方差矩阵A
 A=Temp'*Temp/(N*MM);  

 % 计算此协方差矩阵的特征值和特征向量
 
 [vector value]=eig(A);
 [val index]=sort(diag(value)); %  将特征值以升序排列
 colum_size=size(vector,2);  % 求出特征向量的维数
 
for i=1:colum_size
    vector_sort(:,i)=vector(:,index(colum_size-i+1)); 
    % 将特征向量以特征值的降序排列
    value_sort(i)=val(index(colum_size-i+1));
    % 将特征值降序排列
end
p=0; % 提取特值的个数
value_sum=sum(value_sort);
value_extract=0;
while(p<P_2N)
    p=p+1;
    value_extract=sum(value_sort(1:p));
end
X= vector_sort(:,1:p); %提取出的特征向量矩阵

 
%计算每个gabor_result在特征空间的投影并将其存储
for i=0:99
    for j=1:6
        eval(['load Gabor_four_eight\G' num2str(i) '_' num2str(j) ';']);
        covol_result=result_gabor*X;
        eval(['save  Cov_mag\Cov_re' num2str(i) '_' num2str(j) ' covol_result ;']);
        clear covol_result;
    end
end
% 计算2DPCA的特征向量在1DPCA上的投影
allsamples=[];
for i=0:99
    for j=1:MM     
       eval(['load Cov_mag\Cov_re' num2str(i) '_' num2str(j) ';']);       
       temp=covol_result(1:end);
       clear covol_result;
       allsamples=[allsamples;temp];
    end
end
% calculate the mean image in the training set
m=mean(allsamples,1);
% caculate the cov matrix and its eigen values and eigen vectors
for i=0:99
    for j=1:MM
        xmean(j+(i)*MM,:)=allsamples(j+(i)*MM,:)-m;
    end
end
% covariance matrix C=xmean'*mean, A=xmean*xmean'
A=xmean*xmean';
[vector,value]=eig(A);
[val,index]=sort(diag(value));  % sort the eigen values in ascend sequence
col=size(vector,2);
for i=1:col
    vecsort(:,i)=vector(:,index(col-i+1));    
    valsort(i)=val(index(col-i+1));    
end

valsum=sum(valsort);
valextract=0;
pp=0;
%%%%% extract 90% energy
while(pp<P_1N)
    pp=pp+1;
    valextract=sum(valsort(1:pp));
end
%%%%% calculate the eigen vector of the matrix C
for i=1:pp
    vect(:,i)=xmean'*vecsort(:,i)/sqrt(valsort(i));
    co_base(:,i)=vect(:,i)./sqrt(sum(vect(:,i).^2));    
end
% save  co_base.mat co_base;

% load co_base.mat
for i=0:99
    for j=1:6     
       eval(['load Cov_mag\Cov_re' num2str(i) '_' num2str(j) ';']);       
       Temp=covol_result(1:end);
       clear covol_result;
       im_weight=Temp*co_base;
       eval(['save  palmpca_weight\im_' num2str(i) '_',num2str(j) '  im_weight ' ';'])
    end
end
out_time=toc;

% %测试
% acc=0;
% for i=0:99
%     for j=4:6
%         eval(['load palmpca_weight\im_' num2str(i) '_',num2str(j) ';']);
%         covol_test=im_weight;  %计算测试样本在特征空间的投影
%         clear im_weight;
%         D_all=[];
%         for ii=0:99
%             for jj=1:MM
%                 eval(['load palmpca_weight\im_' num2str(ii) '_',num2str(jj) ';']);
%                 distance=norm(covol_test-im_weight); % 计算测试样本点与所有的训练样本点之间的距离
%                 D_all=[D_all distance];                
%                 clear im_weight;
%             end
%         end
%        distance_all=min(D_all); % 求出最小距离 
%        D_part=[];
%        for jjj=1:MM %计算测试样本点与该同一样本的训练样本点之间的距离       
%            eval(['load palmpca_weight\im_' num2str(i) '_',num2str(jjj) ';']);                
%            dist=norm(covol_test-im_weight);
%            D_part=[D_part dist];
%            clear im_weight;
%        end
%        distance_part=min(D_part);%求出最小距离
%        if(distance_all==distance_part) %比较两个最小距离是否相等
%            acc=acc+1;  %若相等则正确,否则错误
%        else 
%            i   %输出识别错误的图像的标号
%            j 
%        end
%    end
% end
% accurate=acc/300 %输出正确识别率

⌨️ 快捷键说明

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