?? fpextractdemo.m
字號(hào):
tmp=CroppedPrint(i);
CroppedPrint(i)=whichsector(i);
if (CroppedPrint(i)==36 | CroppedPrint(i)==37)
CroppedPrint(i)=tmp/graylevmax;
else
CroppedPrint(i)=CroppedPrint(i)/64;
end
end
set(get(ud.hComponent1Axes, 'title'), 'string', 'SectorizedPrint');
set(ud.hComponent1Image, 'Cdata', CroppedPrint);
set(DemoFig,'Pointer','arrow');
setstatus(DemoFig,'Finished Sectorization');
ud.Component1ImageIsStale = 0;
set(DemoFig, 'UserData', ud);
drawnow
%==========================================================================
%%%
%%% 子函數(shù) - Normalize
%%%
function Normalize(DemoFig)
%
load 'informations.dat' -mat
if nargin<1
DemoFig = gcbf;
end
set(DemoFig,'Pointer','watch');
setstatus(DemoFig,'正在歸一化,請(qǐng)等待......');
ud=get(DemoFig,'Userdata');
fingerprint = getimage(ud.hOriginalImage);
fingerprint = fingerprint*graylevmax;
[BinarizedPrint,XofCenter,YofCenter]=centralizing(fingerprint,0);
[CroppedPrint]=cropping(XofCenter,YofCenter,fingerprint);
[NormalizedPrint,vector] = sector_norm( CroppedPrint , 0 , 0);
CroppedPrint = double(CroppedPrint)/graylevmax;
NormalizedPrint = double(NormalizedPrint)/100;
set(get(ud.hComponent1Axes, 'title'), 'string', 'Cropped Print');
set(ud.hComponent1Image, 'Cdata', CroppedPrint);
set(get(ud.hComponent8Axes, 'title'), 'string', 'Normalized Print');
set(ud.hComponent8Image, 'Cdata', NormalizedPrint);
set(DemoFig,'Pointer','arrow');
setstatus(DemoFig,'Finished normalization');
ud.Component1ImageIsStale = 0;
set(DemoFig, 'UserData', ud);
drawnow
%==========================================================================
%%%
%%% 子函數(shù) - Gaborfilter
%%%
function Gaborfilter(DemoFig)
%
if nargin<1
DemoFig = gcbf;
end
set(DemoFig,'Pointer','watch');
setstatus(DemoFig,'正在Gabor濾波,請(qǐng)等待......');
ud=get(DemoFig,'Userdata');
num_disk=8;
for (angle=0:1:num_disk-1)
gabor=gabor2d_sub(angle,num_disk);
gabor=gabor*128;
switch angle<num_disk
case (angle==0),
set(get(ud.hComponent1Axes, 'title'), 'string', '0 度 gabor');
set(ud.hComponent1Image, 'Cdata', gabor);
case (angle==1),
set(get(ud.hComponent2Axes, 'title'), 'string', '22.5 度 gabor');
set(ud.hComponent2Image, 'Cdata', gabor);
case (angle==2),
set(get(ud.hComponent3Axes, 'title'), 'string', '45 度 gabor');
set(ud.hComponent3Image, 'Cdata', gabor);
case (angle==3),
set(get(ud.hComponent4Axes, 'title'), 'string', '67.5 度 gabor');
set(ud.hComponent4Image, 'Cdata', gabor);
case (angle==4),
set(get(ud.hComponent5Axes, 'title'), 'string', '90 度 gabor');
set(ud.hComponent5Image, 'Cdata', gabor);
case (angle==5),
set(get(ud.hComponent6Axes, 'title'), 'string', '112.5 度 gabor');
set(ud.hComponent6Image, 'Cdata', gabor);
case (angle==6),
set(get(ud.hComponent7Axes, 'title'), 'string', '135 度 gabor');
set(ud.hComponent7Image, 'Cdata', gabor);
case (angle==7),
set(get(ud.hComponent8Axes, 'title'), 'string', '157.5 度 gabor');
set(ud.hComponent8Image, 'Cdata', gabor);
otherwise
error('Nothing !');
end
end
set(DemoFig,'Pointer','arrow');
setstatus(DemoFig,'Gabor Filters were shown');
ud.OriginalImageIsStale = 0;
set(DemoFig, 'UserData', ud);
drawnow
%==========================================================================
%%%
%%% 子函數(shù) - Convolute
%%%
function Convolute(DemoFig)
%
load 'informations.dat' -mat
if nargin<1
DemoFig = gcbf;
end
set(DemoFig,'Pointer','watch');
setstatus(DemoFig,'正在處理8個(gè)Gabor濾波器,旋轉(zhuǎn)......');
ud=get(DemoFig,'Userdata');
fingerprint = getimage(ud.hOriginalImage);
load 'informations.dat' -mat
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;
switch angle<8
case (angle==0),
set(get(ud.hComponent1Axes, 'title'), 'string', '0 度組成');
set(ud.hComponent1Image, 'Cdata', img);
case (angle==1),
set(get(ud.hComponent2Axes, 'title'), 'string', '22.5 度組成');
set(ud.hComponent2Image, 'Cdata', img);
case (angle==2),
set(get(ud.hComponent3Axes, 'title'), 'string', '45 度組成');
set(ud.hComponent3Image, 'Cdata', img);
case (angle==3),
set(get(ud.hComponent4Axes, 'title'), 'string', '67.5 度組成');
set(ud.hComponent4Image, 'Cdata', img);
case (angle==4),
set(get(ud.hComponent5Axes, 'title'), 'string', '90 度組成');
set(ud.hComponent5Image, 'Cdata', img);
case (angle==5),
set(get(ud.hComponent6Axes, 'title'), 'string', '112.5 度組成');
set(ud.hComponent6Image, 'Cdata', img);
case (angle==6),
set(get(ud.hComponent7Axes, 'title'), 'string', '135 度組成');
set(ud.hComponent7Image, 'Cdata', img);
case (angle==7),
set(get(ud.hComponent8Axes, 'title'), 'string', '157.5 度組成');
set(ud.hComponent8Image, 'Cdata', img);
otherwise
error('Nothing !');
end
end
set(DemoFig,'Pointer','arrow');
setstatus(DemoFig,'旋轉(zhuǎn)結(jié)束');
set(DemoFig, 'UserData', ud);
drawnow
%==========================================================================
%%%
%%% 子函數(shù) - Features
%%%
function Features(DemoFig)
%
load 'informations.dat' -mat
if nargin<1
DemoFig = gcbf;
end
set(DemoFig,'Pointer','watch');
setstatus(DemoFig,'正在處理8個(gè)Gabor濾波器,旋轉(zhuǎn)......');
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 度特征');
set(ud.hComponent1Image, 'Cdata', img1);
case (angle==1),
set(get(ud.hComponent2Axes, 'title'), 'string', '22.5 度特征');
set(ud.hComponent2Image, 'Cdata', img1);
case (angle==2),
set(get(ud.hComponent3Axes, 'title'), 'string', '45 度特征');
set(ud.hComponent3Image, 'Cdata', img1);
case (angle==3),
set(get(ud.hComponent4Axes, 'title'), 'string', '67.5 度特征');
set(ud.hComponent4Image, 'Cdata', img1);
case (angle==4),
set(get(ud.hComponent5Axes, 'title'), 'string', '90 度特征');
set(ud.hComponent5Image, 'Cdata', img1);
case (angle==5),
set(get(ud.hComponent6Axes, 'title'), 'string', '112.5 度特征');
set(ud.hComponent6Image, 'Cdata', img1);
case (angle==6),
set(get(ud.hComponent7Axes, 'title'), 'string', '135 度特征');
set(ud.hComponent7Image, 'Cdata', img1);
case (angle==7),
set(get(ud.hComponent8Axes, 'title'), 'string', '157.5 度特征');
set(ud.hComponent8Image, 'Cdata', img1);
otherwise
error('Nothing !');
end
end
set(DemoFig,'Pointer','arrow');
setstatus(DemoFig,'Features were extracted');
set(DemoFig, 'UserData', ud);
drawnow
%==========================================================================
%==========================================================================
%%%
%%% 子函數(shù) - FingerCode
%%%
function Fingercode(DemoFig)
%
load 'informations.dat' -mat
if nargin<1
DemoFig = gcbf;
end
set(DemoFig,'Pointer','watch');
setstatus(DemoFig,'正在指紋編碼......');
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('指紋編碼已經(jīng)成功加入數(shù)據(jù)庫(kù). 指紋編號(hào):',num2str(fp_number));
msgbox(message,'指紋數(shù)據(jù)庫(kù)','幫助');
set(DemoFig,'Pointer','arrow');
setstatus(DemoFig,'指紋編碼計(jì)算完成');
set(DemoFig, 'UserData', ud);
drawnow
%==========================================================================
%==========================================================================
%%%
%%% 子函數(shù) - Check
%%%
function Check(DemoFig)
%
load 'informations.dat' -mat
if nargin<1
DemoFig = gcbf;
end
set(DemoFig,'Pointer','watch');
setstatus(DemoFig,'正在搜索數(shù)據(jù)庫(kù)......');
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
% 輸入指紋的編碼已經(jīng)計(jì)算,檢查數(shù)據(jù)庫(kù)
if (exist('fp_database.dat')==2)
load('fp_database.dat','-mat');
%---- 申請(qǐng)內(nèi)存 -----------------------------------
ruoto1=zeros(36,1);
ruoto2=zeros(36,1);
vettore_d1=zeros(12,1);
vettore_d2=zeros(12,1);
best_matching=zeros(fp_number,1);
% 開始檢查 ---------------------------------------
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('數(shù)據(jù)庫(kù)中與輸入指紋最匹配的是:',num2str(posizione_minimo),...
' 其距離為: ',num2str(distanza_minima));
msgbox(message,'數(shù)據(jù)庫(kù)信息','幫助');
%-------------------------------------------------------
else
message='數(shù)據(jù)庫(kù)為空,無(wú)法檢查';
msgbox(message,'指紋編碼數(shù)據(jù)庫(kù)錯(cuò)誤','警告');
end
set(DemoFig,'Pointer','arrow');
setstatus(DemoFig,'數(shù)據(jù)庫(kù)搜索完畢');
set(DemoFig, 'UserData', ud);
drawnow
%==========================================================================
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -