7/27/2019 FP_IITB.pdf
1/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 Featuresretrieve features stored in database for A
Match both features
(1 : 1] matching
IdentificationGot 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)
7/27/2019 FP_IITB.pdf
2/12
Fingerprint Matching
The Fingerprint ImageScanners 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];
7/27/2019 FP_IITB.pdf
3/12
Fingerprint Matching
The FeaturesFingerprint 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 angleThese features are minutiae and the
set of all the minutiae together is the
template!! (with some additional info)
bifurcations
ending
7/27/2019 FP_IITB.pdf
4/12
Fingerprint Matching
Feature MatchingGiven 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.
7/27/2019 FP_IITB.pdf
5/12
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
7/27/2019 FP_IITB.pdf
6/12
Fingerprint Matching
Noise Reduction
7/27/2019 FP_IITB.pdf
7/12
Fingerprint Matching
Noise ReductionConsider 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 < width1; b++ ) {
value = 0;
for ( int j = -1; j
7/27/2019 FP_IITB.pdf
8/12
Fingerprint Matching
Binarization
Adaptive Directional Threshold
7/27/2019 FP_IITB.pdf
9/12
Fingerprint Matching
Thinning
7/27/2019 FP_IITB.pdf
10/12
Fingerprint Matching
Minutiae Detection
7/27/2019 FP_IITB.pdf
11/12
Fingerprint Matching
Minutiae DetectionCompute Crossing number for a black pixel in image.
Crossing at P is define as CN(P) = half the sum of the differences between the
adjacentpixels 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!!!
7/27/2019 FP_IITB.pdf
12/12
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 minutiaelse if ( cn >= 3 )
fprintf(fp,"%d %d 1 0\n", c, r );
}
}
fclose(fp);
return 0;
}