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

📄 fvs_matching.c

📁 c代码
💻 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 + -