KOV ACS-VAJNA: A FINGERPRINT VERIFICATION SYSTEM BASED ON TRIANGULAR MATCHING AND DYNAMIC TIME WARPING 1271Fig. 7. Original image <strong>on</strong> the left, distorted image <strong>on</strong> the right with local deformati<strong>on</strong> less than 10 percent, but c<strong>on</strong>sequent global deformati<strong>on</strong>reaching 45 percent.45 percent extensi<strong>on</strong> of edge GH. This simple (<strong>and</strong>exaggerated) example shows the idea of the model, whichdefines the distorti<strong>on</strong> of <str<strong>on</strong>g>fingerprint</str<strong>on</strong>g> images where a smalllocal distorti<strong>on</strong> is amplified <strong>on</strong> a global basis.The following algorithm (written in a pseudo C code) isused to extract a possible minutiae set where the <strong>matching</strong> isestablished. The result is a number of <strong>matching</strong> minutiaepairs <strong>on</strong> the reference <strong>and</strong> test images, which according tothe required number of pairs, forms the basis of theidentificati<strong>on</strong>. By generating a map of already c<strong>on</strong>sideredminutiae, it is possible to significantly reduce the number oftentative <strong>matching</strong> maps <strong>and</strong> employ a very short computati<strong>on</strong>time in this phase.The following list c<strong>on</strong>tains the functi<strong>on</strong>s <strong>and</strong> proceduresused in the algorithm:. GetNextMinutiae() gets the next, already notc<strong>on</strong>sidered, reference minutiae from the ordered setdefined in Secti<strong>on</strong> 2.1.3.. GetNextTestMinutiae(ref) gets the next, alreadynot c<strong>on</strong>sidered, test minutiae corresp<strong>on</strong>ding toref minutiae from the ordered set with decreasingsimilarity between test <strong>and</strong> reference regi<strong>on</strong>s accordingto Secti<strong>on</strong> 2.2.1.. LineLength(ref1, ref2, test1, test2) computesthe length difference between the linesc<strong>on</strong>necting two minutiae in the reference image <strong>and</strong>two in the test image. This procedure may includethe <str<strong>on</strong>g>verificati<strong>on</strong></str<strong>on</strong>g> phase shown in the next secti<strong>on</strong> toimprove performance.. ComputeAngle(ref1, ref2, test1, test2)computes the angle between two lines c<strong>on</strong>nectingminutiae pair ref1, ref2 <strong>and</strong> pair test1, test2,respectively.. AddMatchedMinutiae(ref1, test1, ref2,test2) adds the pairs of matched minutiae inreference image <strong>and</strong> in test image to the alreadymatched minutiae list.. GetNextMinutiaePair(ref1, test1, ref2,test2) gets the next minutiae pair bel<strong>on</strong>ging to analready matched line both in reference <strong>and</strong> testimages.. GetNextCloseMinutiae(ref1, ref2) gets thenext,already not c<strong>on</strong>sidered reference minutiae fromthe ordered minutiae list minimizing the functi<strong>on</strong>max(L2(ref1, ref3), L2(ref2, ref3)), wheremax() is the larger between two real numbers <strong>and</strong>L2() is the Euclidean norm <strong>on</strong> the bidimensi<strong>on</strong>alCartesian plane.. ComputeTestCoordinates(X, Y, ref3, ref1,test1, ref2, test2) computes the …X; Y † coordinatescorresp<strong>on</strong>ding to ref3 using the linearroto-translati<strong>on</strong> defined by the mapping ref1 >test1, ref2 > test2 according to the formulae:whereX ˆ x 3 ‡ y 3 ‡ x Y ˆx 3 ‡ y 3 ‡ y ; ˆ …X 2 X 1 †…x 2 x 1 †‡…Y 2 Y 1 †…y 2 y 1 †…x 2 x 1 † 2 ‡…y 2 y 1 † 2 ˆ …X 2 X 1 †…y 2 y 1 †…Y 2 Y 1 †…x 2 x 1 †…x 2 x 1 † 2 ‡…y 2 y 1 † 2 x ˆ X 1 x 1 y 1 y ˆ Y 1 y 1 ‡ x 1with the uppercase variables referring to the testcoordinate space <strong>and</strong> the lowercase coordinates tothe reference coordinate space.. OrderTestMinutiae(ref, x, y) orders the testminutiae corresp<strong>on</strong>ding to the reference minutiae refaccording to the increasing distance from point ofcoordinate (x, y) in the test image.. NumberOfMatchedMinutiae() computes thenumber of already matched minutiae.. MaxDistance is the maximum allowable deformati<strong>on</strong>between segments (for example, 10 percent or6 pixels).. MaxAngle allows to c<strong>on</strong>trol the maximum rotati<strong>on</strong>(for example, 20 degrees).. MinimumMatch is the minimum number of requiredminutiae to match (for example, 14) for a valididentificati<strong>on</strong>.
1272 IEEE TRANSACTIONS ON PATTERN ANALYSIS AND MACHINE INTELLIGENCE, VOL. 22, NO. 11, NOVEMBER 2000Fig. 8. Matching triangle-<str<strong>on</strong>g>based</str<strong>on</strong>g> graphs: reference image <strong>on</strong> the left, test image <strong>on</strong> the right./* Triangular Matching Algorithm*/:do/* sets two minutiae <strong>on</strong> reference image */ref1 =GetNextMinutiae();ref2= GetNextMinutiae();/* sets the corresp<strong>on</strong>ding two minutiae<strong>on</strong> test image */dotest1 = GetNextTestMinutiae(ref1);dotest2 = GetNextTestMinutiae(ref2);if (test2 != null)dist = LineLength(ref1, ref2, test1,test2);angle = ComputeAngle(ref1, ref2, test1,test2);endif/* the corresp<strong>on</strong>dence is valid ifdeformati<strong>on</strong> issmall <strong>and</strong> rotati<strong>on</strong> is allowed */until (dist < MaxDistance ANDangle < MaxAngle)OR test2 == nulluntil test2 != null OR test1 == nullif (test1 == null OR test2 == null)goto end_NO_MATCH; /* no <strong>matching</strong> can bedefined */endif/* adds minutiae pair to alreadymatched list */AddMatchedMinutiae(ref1, test1, ref2,test2);/* sets third minutiae for each pairof reference <strong>and</strong>test <strong>matching</strong> minutiae pairs according toroto-translati<strong>on</strong> defined bythe minutiae pairs */dovalidpair=GetNextMinutiaePair(&ref1,&test1,&ref2, &test2);if (validpair)doref3 = GetNextCloseMinutiae(ref1, ref2);if (ref3 != null)/* defines third minutiae corresp<strong>on</strong>dingarea <strong>on</strong> test image */ComputeTestCoordinates(&x,&y, ref3,ref1,test1,ref2, test2);OrderTestMinutiae(ref3, x, y);endifdotest3 = GetNextTestMinutiae(ref3);if (test3 != null)dist1 = LineLength(ref1, ref3,test1, test3);dist2 = LineLength(ref2, ref3,test2, test3);angle1 = ComputeAngle(ref1, ref3,test1, test3);angle2 = ComputeAngle(ref2, ref3,test2, test3);endif/* the corresp<strong>on</strong>dence is validif deformati<strong>on</strong> issmall <strong>and</strong> rotati<strong>on</strong> is allowed */until (dist1 < MaxDistance ANDdist2 < MaxDistance ANDangle1 < MaxAngle ANDangle2 < MaxAngle) ORtest3 == nulluntil test3 != null OR ref3 == nullif (ref3 != null AND test3 != null)AddMatchedMinutiae(ref1, test1,ref3, test3);AddMatchedMinutiae(ref2, test2,ref3, test3);endifendifuntil validpair == falseuntil NumberOfMatchedMinutiae() >MinimumMatch/* c<strong>on</strong>tinue with validati<strong>on</strong> procedure of nextsecti<strong>on</strong> */