Sie sind auf Seite 1von 12

Fingerprint Matching

Overview of fingerprint Matching Process


Registration Get person As fingerprint Image Extract Features and store against A is ID Verification Get A fingerprint Image Extract Features retrieve features stored in database for A Match both features (1 : 1] matching Identification Got some fingerprint image (who is this?) Extract features Match against every feature stored in the database Get the ID for the best matching features, he/she is the likely person (1 to N matching)

Fingerprint Matching
The Fingerprint Image
Scanners provides API to get the image Typical fingerprint has 256 gray scales, so needs 1 byte to represent each pixel. value 0 is BLACK and value 255 is WHITE Typical resolution is 500 PPI
Simple representation of an Image would be unsigned char image [Height] [Width];

Getting a pixel value in an Image is indexing unsigned char value = image[row] [column];

Fingerprint Matching
The Features
Fingerprint have ridges and valleys (the black are the ridges and white valleys) Ridge ending and Ridge Bifurcation are of interest. Find these ridge endings and bifurcations and store their position X,Y and angle These features are minutiae and the set of all the minutiae together is the ending template!! (with some additional info)
bifurcations

Fingerprint Matching
Feature Matching
Given two sets of features determine if they are of the same finger. Find the amount of similarity between features, if it is above some threshold then probably they are from the same finger. Point pattern Matching Problem.

Fingerprint Matching
Steps in feature extraction
-Reduce Noise from Image Histogram Equalization, Gaussian Filter -Segment Image (identify the background and foreground) Simple variance based to complex direction based -Binarize Image Simple Threshold or adaptive threshold or direction based -Image Thinning reduce to 1 pixel width without breaking lines. -Minutiae Detection Find pixel where ridge ends or bifurcates -Minutiae Post Processing Remove false minutiae such as border, artifacts generated by earlier processing, and not so sure!! -Store minutiae in database (along with persons ID)

Fingerprint Matching
Noise Reduction

Fingerprint Matching
Noise Reduction
Consider Image represented as 2 dimensional array of unsigned char with h as height and w as width. Following code filters the image and creates a new filtered image using Gaussian 3x3 kernel
unsigned char gfilt[3][3] = { { 1, 2, 1 }, { 2, 4, 2 }, { 1, 2, 1 } }; for ( int a = 1; a < height - 1; a++ ) { for ( int b = 1; b < width 1; b++ ) { value = 0; for ( int j = -1; j <= 1; j++ ) { for ( int k = -1; k <= 1; k++ ) { value += image[a+j][b+k] * gfilt[j+1][k+1]; } } newimage[a][b] = value / 16; } }

Fingerprint Matching
Binarization

Adaptive

Directional

Threshold

Fingerprint Matching
Thinning

Fingerprint Matching
Minutiae Detection

Fingerprint Matching
Minutiae Detection
Compute Crossing number for a black pixel in image. Crossing at P is define as CN(P) = half the sum of the differences between the adjacent pixels in the 8 neighborhood of P if CN = 1 then termination if CN = 3 then bifurcation above 3 is complex minutiae such as cross over etc.

CN(P) = j = 0..8 | val (P j mod 8) val (p j-1)|


Here P j are pixels belonging to the 8 neighborhood of P, for example if the current pixel we are considering is at row = 10 and column = 10 then we sum the pixel values at ABS(P(10,9) P(9,9)), ABS((P(11,9) P(10,9)), ABS((P(11,10) P(11,9)) and so on.
Check this out by actually drawing a 8X8 neighborhood!!!

Fingerprint Matching
// MINUTIAE COMPUTATION ON THINNED IMAGE #define PVAL(x) (x) == 0 ? 1 : 0 int FPDetectMinutiae ( unsigned char *image, int h, int w, char *minfile) { int r, c, count, cn; FILE *fp; if (( fp = fopen(minfile,"w")) == NULL )return -1; for ( r = 16; r < h - 16; r++ ) { for ( c = 16; c < w - 16; c++ ) { if ( image[r*w+c] == WHITE_PIXEL ) continue; cn = 0; cn += abs(PVAL(image[(r-1)*w+c]) - PVAL(image[(r-1)*w+(c-1)])); cn += abs(PVAL(image[(r-1)*w+(c+1)]) - PVAL(image[(r-1)*w+c])); cn += abs(PVAL(image[(r)*w+(c+1)]) - PVAL(image[(r-1)*w+(c+1)])); cn += abs(PVAL(image[(r+1)*w+(c+1)]) - PVAL(image[(r)*w+(c+1)])); cn += abs(PVAL(image[(r+1)*w+c]) - PVAL(image[(r+1)*w+(c+1)])); cn += abs(PVAL(image[(r+1)*w+(c-1)]) - PVAL(image[(r+1)*w+c])); cn += abs(PVAL(image[(r)*w+(c-1)]) - PVAL(image[(r+1)*w+(c-1)])); cn += abs(PVAL(image[(r-1)*w+(c-1)]) - PVAL(image[r*w+(c-1)])); cn /= 2; // Termination Minutia if ( cn == 1 ) fprintf(fp,"%d %d 0 0\n", c, r ); // Bifurcation or complex minutia else if ( cn >= 3 ) fprintf(fp,"%d %d 1 0\n", c, r ); } } fclose(fp); return 0; }

Das könnte Ihnen auch gefallen