📄 fvs_matching.c
字号:
/*############################################################################# * 文件名:fvs_minutia.c * 功能: 指纹图像细节点提取 * modified by PRTsinghua@hotmail.com#############################################################################*/#include "fvs.h"
#include <time.h>int main(int argc, char *argv[]){ FvsImage_t mask1;
FvsImage_t image1;
FvsFloatField_t direction1;
FvsFloatField_t frequency1;
FvsMinutiaSet_t minutia1;
FvsImage_t mask2;
FvsImage_t image2;
FvsFloatField_t direction2;
FvsFloatField_t frequency2;
FvsMinutiaSet_t minutia2;
FvsByte_t bmfh[14];
BITMAPINFOHEADER bmih;
RGBQUAD rgbq[256];
clock_t start,finish; if (argc!=3) { printf("Usage: fvs input.bmp output.bmp\n"); return -1; } direction1 = FloatFieldCreate();
frequency1 = FloatFieldCreate();
mask1 = ImageCreate();
image1 = ImageCreate();
minutia1 = MinutiaSetCreate(1000);
direction2 = FloatFieldCreate();
frequency2 = FloatFieldCreate();
mask2 = ImageCreate();
image2 = ImageCreate();
minutia2 = MinutiaSetCreate(1000); if (direction1!=NULL && frequency1!=NULL && mask1!=NULL && image1!=NULL && minutia1!=NULL &&
direction2!=NULL && frequency2!=NULL &&
mask2!=NULL && image2!=NULL && minutia2!=NULL) { FvsImageImport(image1, argv[1],bmfh,&bmih,rgbq); (void)ImageSoftenMean(image1, 3);
fprintf(stdout, "1/8 Determining the ridge direction\n"); (void)FingerprintGetDirection(image1, direction1, 5, 8); fprintf(stdout, "2/8 Determining the ridge frequency\n"); (void)FingerprintGetFrequency(image1, direction1, frequency1); fprintf(stdout, "3/8 Creating the mask\n"); (void)FingerprintGetMask(image1, direction1, frequency1, mask1); fprintf(stdout, "4/8 Enhancing the fingerprint image\n"); (void)ImageEnhanceGabor(image1, direction1, frequency1, mask1, 4.0); fprintf(stdout, "5/8 Binarize\n"); (void)ImageBinarize(image1, (FvsByte_t)0x80); fprintf(stdout, "6/8 Thinning\n"); (void)ImageThinHitMiss(image1);
fprintf(stdout, "7/8 Detecting minutia\n"); (void)MinutiaSetExtract(minutia1, image1, direction1, mask1); fprintf(stdout, "8/8 Drawing minutia\n"); (void)ImageClear(image1); (void)MinutiaSetDraw(minutia1, image1);
FvsImageExport(image1,"d:\\temp\\input1minutia.bmp",bmfh,&bmih,rgbq);
FvsImageImport(image2, argv[2],bmfh,&bmih,rgbq);
(void)ImageSoftenMean(image2, 3);
fprintf(stdout, "1/8 Determining the ridge direction\n");
(void)FingerprintGetDirection(image2, direction2, 5, 8);
fprintf(stdout, "2/8 Determining the ridge frequency\n");
(void)FingerprintGetFrequency(image2, direction2, frequency2);
fprintf(stdout, "3/8 Creating the mask\n");
(void)FingerprintGetMask(image2, direction2, frequency2, mask2);
fprintf(stdout, "4/8 Enhancing the fingerprint image\n");
(void)ImageEnhanceGabor(image2, direction2, frequency2, mask2, 4.0);
fprintf(stdout, "5/8 Binarize\n");
(void)ImageBinarize(image2, (FvsByte_t)0x80);
fprintf(stdout, "6/8 Thinning\n");
(void)ImageThinHitMiss(image2);
fprintf(stdout, "7/8 Detecting minutia\n");
(void)MinutiaSetExtract(minutia2, image2, direction2, mask2);
fprintf(stdout, "8/8 Drawing minutia\n");
(void)ImageClear(image2);
(void)MinutiaSetDraw(minutia2, image2);
FvsImageExport(image2,"d:\\temp\\input2minutia.bmp",bmfh,&bmih,rgbq);
start=clock();
MatchingCompareMinutiaSets (minutia1,minutia2,NULL);
finish=clock();
printf("Elapse time: %dms\n",finish-start); } fprintf(stdout, "Cleaning up and exiting...\n"); MinutiaSetDestroy(minutia1); ImageDestroy(image1); ImageDestroy(mask1); FloatFieldDestroy(frequency1); FloatFieldDestroy(direction1);
MinutiaSetDestroy(minutia2);
ImageDestroy(image2);
ImageDestroy(mask2);
FloatFieldDestroy(frequency2);
FloatFieldDestroy(direction2); return 0;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -