📄 fpextractdemo.m
字号:
switch name
case 'Right loop',
namefile='37_7.bmp';
[img,map]=imread(namefile);
case 'Whorl',
namefile='19_7.bmp';
[img,map]=imread(namefile);
case 'Left loop',
namefile='37_3.bmp';
[img,map]=imread(namefile);
case 'Twin loop',
namefile='37_5_2.bmp';
[img,map]=imread(namefile);
case 'Other image',
[namefile,pathname]=uigetfile('*.bmp','Chose BMP GrayScale Image');
if namefile~=0
[img,map]=imread(strcat(pathname,namefile));
else
disp(' Chose a file! ');
[img,map]=imread('37_7.bmp');
end
otherwise
error('fpextractdemo: Unknown Image Option!');
end
% If image is N x M with mod(N,8)~=0 or mod(M,8)~=0
% input image is resized.
imgN=size(img,1);
imgM=size(img,2);
modN=mod(imgN,8);
modM=mod(imgM,8);
%----------------------------------------
% save informations in informations.dat
if isa(img,'uint8')
graylevmax=2^8-1;
end
if isa(img,'uint16')
graylevmax=2^16-1;
end
if isa(img,'uint32')
graylevmax=2^32-1;
end
save('informations.dat','graylevmax','img');
%-----------------------------------------
% resize
%-----------------------------------------
img=img(modN+1:imgN,modM+1:imgM);
%-----------------------------------------
img = double(img)/graylevmax;
set(get(ud.hOriginalAxes, 'title'), 'string', 'Original FingerPrint');
set(get(ud.hComponent1Axes, 'title'), 'string', '0 degree Component');
set(get(ud.hComponent6Axes, 'title'), 'string', '112.5 degree Component');
set(ud.hOriginalImage, 'Cdata', img);
set(DemoFig,'Pointer','arrow');
setstatus(DemoFig,'Please select a step to process...');
return;
%========================================
%%%
%%% Sub-Function - SelectExtractingStep
%%%
function SelectExtractingStep(DemoFig)
% Load a step
if nargin<1
DemoFig = gcbf;
end
set(DemoFig,'Pointer','watch');
ud=get(DemoFig,'Userdata');
v = get(ud.hSelectStepPop,{'value','String'});
name = deblank(v{2}(v{1},:));
drawnow
switch name
case 'Centralize',
Centralize(DemoFig);
case 'Crop',
Crop(DemoFig);
case 'Sectorize',
Sectorize(DemoFig);
case 'Normalize',
Normalize(DemoFig);
case 'Gabor filters',
Gaborfilter(DemoFig);
case 'Convolute',
Convolute(DemoFig);
case 'Features',
Features(DemoFig);
case 'FingerCode',
Fingercode(DemoFig);
case 'Check',
Check(DemoFig);
otherwise
error('fpextractdemo: Unknown Image Option!');
end
return;
%==========================================================================
%%%
%%% Sub-Function - Centralize
%%%
function Centralize(DemoFig)
load 'informations.dat' -mat
if nargin<1
DemoFig = gcbf;
end
set(DemoFig,'Pointer','watch');
setstatus(DemoFig,'Centralizing..., please wait !!!');
ud=get(DemoFig,'Userdata');
fingerprint = getimage(ud.hOriginalImage);
fingerprint = fingerprint*graylevmax;
[BinarizedPrint,XofCenter,YofCenter] = centralizing(fingerprint,0);
set(get(ud.hComponent8Axes, 'title'), 'string', 'Binarized Print');
set(ud.hComponent8Image, 'Cdata', BinarizedPrint);
set(DemoFig,'Pointer','arrow');
setstatus(DemoFig,'Finished centralization');
ud.OriginalImageIsStale = 0;
set(DemoFig, 'UserData', ud);
drawnow
%==========================================================================
%%%
%%% Sub-Function - Crop
%%%
function Crop(DemoFig)
%
load 'informations.dat' -mat
if nargin<1
DemoFig = gcbf;
end
set(DemoFig,'Pointer','watch');
setstatus(DemoFig,'Cropping..., please wait !!!');
ud=get(DemoFig,'Userdata');
fingerprint = getimage(ud.hOriginalImage);
fingerprint = fingerprint*graylevmax;
[BinarizedPrint,XofCenter,YofCenter]=centralizing(fingerprint,0);
[CroppedPrint]=cropping(XofCenter,YofCenter,fingerprint);
CroppedPrint = double(CroppedPrint)/graylevmax;
set(get(ud.hComponent1Axes, 'title'), 'string', 'Cropped Print');
set(ud.hComponent1Image, 'Cdata', CroppedPrint);
set(get(ud.hComponent8Axes, 'title'), 'string', 'Binarized Print');
set(ud.hComponent8Image, 'Cdata', BinarizedPrint);
set(DemoFig,'Pointer','arrow');
setstatus(DemoFig,'Finished Crop');
ud.Component1ImageIsStale = 0;
set(DemoFig, 'UserData', ud);
drawnow
%==========================================================================
%%%
%%% Sub-Function - Sectorize
%%%
function Sectorize(DemoFig)
%
load 'informations.dat' -mat
if nargin<1
DemoFig = gcbf;
end
set(DemoFig,'Pointer','watch');
setstatus(DemoFig,'Sectorizing..., please wait !!!');
ud=get(DemoFig,'Userdata');
fingerprint = getimage(ud.hOriginalImage);
fingerprint = fingerprint*graylevmax;
[BinarizedPrint,XofCenter,YofCenter]=centralizing(fingerprint,0);
[CroppedPrint]=cropping(XofCenter,YofCenter,fingerprint);
for ( i=1:1:175*175)
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
%==========================================================================
%%%
%%% Sub-Function - Normalize
%%%
function Normalize(DemoFig)
%
load 'informations.dat' -mat
if nargin<1
DemoFig = gcbf;
end
set(DemoFig,'Pointer','watch');
setstatus(DemoFig,'Normalizing..., please wait !!!');
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
%==========================================================================
%%%
%%% Sub-Function - Gaborfilter
%%%
function Gaborfilter(DemoFig)
%
if nargin<1
DemoFig = gcbf;
end
set(DemoFig,'Pointer','watch');
setstatus(DemoFig,'Gabor filter will be shown..., please wait !!!');
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 degree gabor');
set(ud.hComponent1Image, 'Cdata', gabor);
case (angle==1),
set(get(ud.hComponent2Axes, 'title'), 'string', '22.5 degree gabor');
set(ud.hComponent2Image, 'Cdata', gabor);
case (angle==2),
set(get(ud.hComponent3Axes, 'title'), 'string', '45 degree gabor');
set(ud.hComponent3Image, 'Cdata', gabor);
case (angle==3),
set(get(ud.hComponent4Axes, 'title'), 'string', '67.5 degree gabor');
set(ud.hComponent4Image, 'Cdata', gabor);
case (angle==4),
set(get(ud.hComponent5Axes, 'title'), 'string', '90 degree gabor');
set(ud.hComponent5Image, 'Cdata', gabor);
case (angle==5),
set(get(ud.hComponent6Axes, 'title'), 'string', '112.5 degree gabor');
set(ud.hComponent6Image, 'Cdata', gabor);
case (angle==6),
set(get(ud.hComponent7Axes, 'title'), 'string', '135 degree gabor');
set(ud.hComponent7Image, 'Cdata', gabor);
case (angle==7),
set(get(ud.hComponent8Axes, 'title'), 'string', '157.5 degree 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
%==========================================================================
%%%
%%% Sub-Function - Convolute
%%%
function Convolute(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);
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;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -