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

📄 fpextractdemo.m

📁 简单的指纹识别算法代码,带测试图片.非商业代码.
💻 M
📖 第 1 页 / 共 3 页
字号:
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 + -