I am trying to check whether a fingerprint exists/matches in a huge collection of fingerprints (100,000 fingerprints). It will take more time to search for matches sequentially. is there any better way to search for match? is it possible to organize the fingerprints in a binary tree structure so that the number of comparisons can be reduced? if yes how can we do it? it would be helpful if the answers are in Java perspective.
edit:
I have all the fingerprints as .gif images. how can i convert the finger print images into data?
Thanks.
1) You need to use Wavelet compression algorithm to encode the fingerprint in sequence of wavelet compression parameters:
0, -1, 2.4, 5.6.7.7, 32.-1.5, e.t.c.
2) You need to define match function, which will find some similarities, there are two options:
-the geometry approach (compare qudrants to qudrants, all field are spaced in continuous blocks by some space algorithm)
Pros:
hardware accelerated (SSE) pixel matching algorithm, normalization all fingerprints to a standart basis using affine transformation, f.e. to square 512x512 px
Cons:
Hight sensitivity in fingerprint quality (if a part of searched fingerprint is omittet totally)
-the topology approach (the connectivity of lines, arcs, the breakpoints, mutual positioning each other)
Pros:
Low sensibility to angle, position, and quality of fingerprint, can use the original image scale and direction;
Cons:
Low speed of analysis, highly dependent upon quality of an classification function,
3) You need to define some sort of a genetic algorithm to train the evaluate function on a known set of fingerprints
You knowledge system will be able to find fingerprints by the given sample, not known by the system, but trained to find some particular differences/matches, raises the probability of a successful search, lovering the probability of false matches upon the search.