📄 fpextractdemo.m
字号:
switch angle<8
case (angle==0),
set(get(ud.hComponent1Axes, 'title'), 'string', '0 degree Component');
set(ud.hComponent1Image, 'Cdata', img);
case (angle==1),
set(get(ud.hComponent2Axes, 'title'), 'string', '22.5 degree Component');
set(ud.hComponent2Image, 'Cdata', img);
case (angle==2),
set(get(ud.hComponent3Axes, 'title'), 'string', '45 degree Component');
set(ud.hComponent3Image, 'Cdata', img);
case (angle==3),
set(get(ud.hComponent4Axes, 'title'), 'string', '67.5 degree Component');
set(ud.hComponent4Image, 'Cdata', img);
case (angle==4),
set(get(ud.hComponent5Axes, 'title'), 'string', '90 degree Component');
set(ud.hComponent5Image, 'Cdata', img);
case (angle==5),
set(get(ud.hComponent6Axes, 'title'), 'string', '112.5 degree Component');
set(ud.hComponent6Image, 'Cdata', img);
case (angle==6),
set(get(ud.hComponent7Axes, 'title'), 'string', '135 degree Component');
set(ud.hComponent7Image, 'Cdata', img);
case (angle==7),
set(get(ud.hComponent8Axes, 'title'), 'string', '157.5 degree Component');
set(ud.hComponent8Image, 'Cdata', img);
otherwise
error('Nothing !');
end
end
set(DemoFig,'Pointer','arrow');
setstatus(DemoFig,'Finished Convolution');
set(DemoFig, 'UserData', ud);
drawnow
%==========================================================================
%%%
%%% Sub-Function - Features
%%%
function Features(DemoFig)
%
load 'informations.dat' -mat
if nargin<1
DemoFig = gcbf;
end
set(DemoFig,'Pointer','watch');
setstatus(DemoFig,'Convoluting with eight Gabor filters in process...');
ud=get(DemoFig,'Userdata');
fingerprint = getimage(ud.hOriginalImage);
fingerprint = fingerprint*graylevmax;
N=175;
num_disk=8;
[BinarizedPrint,XofCenter,YofCenter]=centralizing(fingerprint,0);
[CroppedPrint]=cropping(XofCenter,YofCenter,fingerprint);
[NormalizedPrint,vector]=sector_norm(CroppedPrint,0,1);
for (angle=0:1:num_disk-1)
gabor=gabor2d_sub(angle,num_disk);
z2=gabor;
z1=NormalizedPrint;
z1x=size(z1,1);
z1y=size(z1,2);
z2x=size(z2,1);
z2y=size(z2,2);
ComponentPrint=real(ifft2(fft2(z1,z1x+z2x-1,z1y+z2y-1).*fft2(z2,z1x+z2x-1,z1y+z2y-1)));
px=((z2x-1)+mod((z2x-1),2))/2;
py=((z2y-1)+mod((z2y-1),2))/2;
ComponentPrint=ComponentPrint(px+1:px+z1x,py+1:py+z1y);
[disk,vector]=sector_norm(ComponentPrint,1,0);
img = double(ComponentPrint)/graylevmax;
img1 = double(disk)/51200;
switch angle<8
case (angle==0),
set(get(ud.hComponent1Axes, 'title'), 'string', '0 degree Features');
set(ud.hComponent1Image, 'Cdata', img1);
case (angle==1),
set(get(ud.hComponent2Axes, 'title'), 'string', '22.5 degree Features');
set(ud.hComponent2Image, 'Cdata', img1);
case (angle==2),
set(get(ud.hComponent3Axes, 'title'), 'string', '45 degree Features');
set(ud.hComponent3Image, 'Cdata', img1);
case (angle==3),
set(get(ud.hComponent4Axes, 'title'), 'string', '67.5 degree Features');
set(ud.hComponent4Image, 'Cdata', img1);
case (angle==4),
set(get(ud.hComponent5Axes, 'title'), 'string', '90 degree Features');
set(ud.hComponent5Image, 'Cdata', img1);
case (angle==5),
set(get(ud.hComponent6Axes, 'title'), 'string', '112.5 degree Features');
set(ud.hComponent6Image, 'Cdata', img1);
case (angle==6),
set(get(ud.hComponent7Axes, 'title'), 'string', '135 degree Features');
set(ud.hComponent7Image, 'Cdata', img1);
case (angle==7),
set(get(ud.hComponent8Axes, 'title'), 'string', '157.5 degree Features');
set(ud.hComponent8Image, 'Cdata', img1);
otherwise
error('Nothing !');
end
end
set(DemoFig,'Pointer','arrow');
setstatus(DemoFig,'Features were extracted');
set(DemoFig, 'UserData', ud);
drawnow
%==========================================================================
%==========================================================================
%%%
%%% Sub-Function - FingerCode
%%%
function Fingercode(DemoFig)
%
load 'informations.dat' -mat
if nargin<1
DemoFig = gcbf;
end
set(DemoFig,'Pointer','watch');
setstatus(DemoFig,'FingerCode in process...');
ud=get(DemoFig,'Userdata');
fingerprint = getimage(ud.hOriginalImage);
fingerprint = fingerprint*graylevmax;
N=175;
num_disk=8;
[BinarizedPrint,XofCenter,YofCenter]=centralizing(fingerprint,0);
[CroppedPrint]=cropping(XofCenter,YofCenter,fingerprint);
[NormalizedPrint,vector]=sector_norm(CroppedPrint,0,1);
for (angle=0:1:num_disk-1)
gabor=gabor2d_sub(angle,num_disk);
z2=gabor;
z1=NormalizedPrint;
z1x=size(z1,1);
z1y=size(z1,2);
z2x=size(z2,1);
z2y=size(z2,2);
ComponentPrint=real(ifft2(fft2(z1,z1x+z2x-1,z1y+z2y-1).*fft2(z2,z1x+z2x-1,z1y+z2y-1)));
px=((z2x-1)+mod((z2x-1),2))/2;
py=((z2y-1)+mod((z2y-1),2))/2;
ComponentPrint=ComponentPrint(px+1:px+z1x,py+1:py+z1y);
[disk,vector]=sector_norm(ComponentPrint,1,0);
%img = double(ComponentPrint)/graylevmax;
%img1 = double(disk)/51200;
finger_code1{angle+1}=vector(1:36);
end
load('informations.dat','img','-mat');
img=imrotate(img,22.5/2);
imgN=size(img,1);
imgM=size(img,2);
modN=mod(imgN,8);
modM=mod(imgM,8);
fingerprint=double(img(modN+1:imgN,modM+1:imgM));
[BinarizedPrint,XofCenter,YofCenter]=centralizing(fingerprint,0);
[CroppedPrint]=cropping(XofCenter,YofCenter,fingerprint);
[NormalizedPrint,vector]=sector_norm(CroppedPrint,0,1);
for (angle=0:1:num_disk-1)
gabor=gabor2d_sub(angle,num_disk);
z2=gabor;
z1=NormalizedPrint;
z1x=size(z1,1);
z1y=size(z1,2);
z2x=size(z2,1);
z2y=size(z2,2);
ComponentPrint=real(ifft2(fft2(z1,z1x+z2x-1,z1y+z2y-1).*fft2(z2,z1x+z2x-1,z1y+z2y-1)));
px=((z2x-1)+mod((z2x-1),2))/2;
py=((z2y-1)+mod((z2y-1),2))/2;
ComponentPrint=ComponentPrint(px+1:px+z1x,py+1:py+z1y);
[disk,vector]=sector_norm(ComponentPrint,1,0);
%img = double(ComponentPrint)/graylevmax;
%img1 = double(disk)/51200;
finger_code2{angle+1}=vector(1:36);
end
% FingerCode added to database
if (exist('fp_database.dat')==2)
load('fp_database.dat','-mat');
fp_number=fp_number+1;
data{fp_number,1}=finger_code1;
data{fp_number,2}=finger_code2;
save('fp_database.dat','data','fp_number','-append');
else
fp_number=1;
data{fp_number,1}=finger_code1;
data{fp_number,2}=finger_code2;
save('fp_database.dat','data','fp_number');
end
message=strcat('FingerCode was succesfully added to database. Fingerprint no. ',num2str(fp_number));
msgbox(message,'FingerCode DataBase','help');
set(DemoFig,'Pointer','arrow');
setstatus(DemoFig,'FingerCode calculated');
set(DemoFig, 'UserData', ud);
drawnow
%==========================================================================
%==========================================================================
%%%
%%% Sub-Function - Check
%%%
function Check(DemoFig)
%
load 'informations.dat' -mat
if nargin<1
DemoFig = gcbf;
end
set(DemoFig,'Pointer','watch');
setstatus(DemoFig,'DataBase Scanning...');
ud=get(DemoFig,'Userdata');
fingerprint = getimage(ud.hOriginalImage);
fingerprint = fingerprint*graylevmax;
N=175;
num_disk=8;
[BinarizedPrint,XofCenter,YofCenter]=centralizing(fingerprint,0);
[CroppedPrint]=cropping(XofCenter,YofCenter,fingerprint);
[NormalizedPrint,vector]=sector_norm(CroppedPrint,0,1);
for (angle=0:1:num_disk-1)
gabor=gabor2d_sub(angle,num_disk);
z2=gabor;
z1=NormalizedPrint;
z1x=size(z1,1);
z1y=size(z1,2);
z2x=size(z2,1);
z2y=size(z2,2);
ComponentPrint=real(ifft2(fft2(z1,z1x+z2x-1,z1y+z2y-1).*fft2(z2,z1x+z2x-1,z1y+z2y-1)));
px=((z2x-1)+mod((z2x-1),2))/2;
py=((z2y-1)+mod((z2y-1),2))/2;
ComponentPrint=ComponentPrint(px+1:px+z1x,py+1:py+z1y);
[disk,vector]=sector_norm(ComponentPrint,1,0);
%img = double(ComponentPrint)/graylevmax;
%img1 = double(disk)/51200;
finger_code{angle+1}=vector(1:36);
end
% FingerCode of input fngerprint has just been calculated.
% Checking with BadaBase
if (exist('fp_database.dat')==2)
load('fp_database.dat','-mat');
%---- alloco memoria -----------------------------------
ruoto1=zeros(36,1);
ruoto2=zeros(36,1);
vettore_d1=zeros(12,1);
vettore_d2=zeros(12,1);
best_matching=zeros(fp_number,1);
% start checking ---------------------------------------
for scanning=1:fp_number
fcode1=data{scanning,1};
fcode2=data{scanning,2};
for rotazione=0:1:11
d1=0;
d2=0;
for disco=1:8
f1=fcode1{disco};
f2=fcode2{disco};
% ora ruoto f1 ed f2 della rotazione ciclica ----------
for old_pos=1:12
new_pos=mod(old_pos+rotazione,12);
if (new_pos==0)
new_pos=12;
end
ruoto1(new_pos)=f1(old_pos);
ruoto1(new_pos+12)=f1(old_pos+12);
ruoto1(new_pos+24)=f1(old_pos+24);
ruoto2(new_pos)=f2(old_pos);
ruoto2(new_pos+12)=f2(old_pos+12);
ruoto2(new_pos+24)=f2(old_pos+24);
end
%-------------------------------------------------------
d1=d1+norm(finger_code{disco}-ruoto1);
d2=d2+norm(finger_code{disco}-ruoto2);
end
vettore_d1(rotazione+1)=d1;
vettore_d2(rotazione+1)=d2;
end
[min_d1,pos_min_d1]=min(vettore_d1);
[min_d2,pos_min_d2]=min(vettore_d2);
if min_d1<min_d2
minimo=min_d1;
else
minimo=min_d2;
end
best_matching(scanning)=minimo;
end
[distanza_minima,posizione_minimo]=min(best_matching);
beep;
message=strcat('The nearest fingerprint present in DataBase which matchs input fingerprint is : ',num2str(posizione_minimo),...
' with a distance of : ',num2str(distanza_minima));
msgbox(message,'DataBase Info','help');
%-------------------------------------------------------
else
message='DataBase is empty. No check is possible.';
msgbox(message,'FingerCode DataBase Error','warn');
end
set(DemoFig,'Pointer','arrow');
setstatus(DemoFig,'DataBase Scanning completed');
set(DemoFig, 'UserData', ud);
drawnow
%==========================================================================
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -