Algorithm transparency
Algorithm transparency in SourceAFIS is an API that lets applications capture all intermediate data structures that are created during feature extraction and matching, including images in various stages of filtering, extracted minutiae and ridges, pairing constructed by matcher, and score breakdown. Learning basics of how the algorithm works is recommended before using transparency API.
Motivation
The simple API exposed by SourceAFIS is generally an advantage, because the job of SourceAFIS is to abstract away details of fingerprint matching. There are however occasions when seeing what the algorithm is doing is beneficial. Specifically, algorithm transparency can be used to:
- explain how the algorithm reached its decision,
- create rich visualizations of fingerprints and their matches,
- check quality of captured fingerprints,
- use fingerprint features creatively for something other than matching,
- support fingerprint experts in manual matching,
- reconstruct damaged fingerprints in forensics,
- diagnose issues with sensors, outlier populations, and algorithm itself, and
- export data for use in another biometric system.
Transparency data is also used internally to ensure consistency of language ports of SourceAFIS and to perform basic sanity checks in unit tests.
Algorithm transparency is rare in commercial matchers, because it weakens intellectual property protection. SourceAFIS, being fully opensource, doesn't need to hide anything from you. Algorithm transparency is its unique advantage.
Capture
Every language port of SourceAFIS has core transparency API, which is introduced in its tutorial:
Some language ports can produce transparency ZIP.
Dedicated library for manipulating transparency data is usually more convenient:
If all you need is visualization, you can use visualization library:
Excluded data
Transparency data does not include data that is available in some other way. Specifically, it excludes the original fingerprint image, source byte array during deserialization, the resulting template (which is documented elsewhere), and the final similarity score. You have to capture this data separately.
Data keys
Available transparency data is documented on subpages linked below.
Key | Code | MIME | Filename in ZIP |
---|---|---|---|
Algorithm version | version | text/plain | 001-version.txt |
Decoded image | decoded-image | application/cbor | 002-decoded-image.cbor |
Scaled image | scaled-image | application/cbor | 003-scaled-image.cbor |
Blocks | blocks | application/cbor | 004-blocks.cbor |
Block histogram | histogram | application/cbor | 005-histogram.cbor |
Smoothed histogram | smoothed-histogram | application/cbor | 006-smoothed-histogram.cbor |
Contrast | contrast | application/cbor | 007-contrast.cbor |
Absolute contrast mask | absolute-contrast-mask | application/cbor | 008-absolute-contrast-mask.cbor |
Relative contrast mask | relative-contrast-mask | application/cbor | 009-relative-contrast-mask.cbor |
Combined mask | combined-mask | application/cbor | 010-combined-mask.cbor |
Filtered mask | filtered-mask | application/cbor | 011-filtered-mask.cbor |
Equalized image | equalized-image | application/cbor | 012-equalized-image.cbor |
Pixelwise orientation | pixelwise-orientation | application/cbor | 013-pixelwise-orientation.cbor |
Block orientation | block-orientation | application/cbor | 014-block-orientation.cbor |
Smoothed orientation | smoothed-orientation | application/cbor | 015-smoothed-orientation.cbor |
Parallel smoothing | parallel-smoothing | application/cbor | 016-parallel-smoothing.cbor |
Orthogonal smoothing | orthogonal-smoothing | application/cbor | 017-orthogonal-smoothing.cbor |
Binarized image | binarized-image | application/cbor | 018-binarized-image.cbor |
Filtered binary image | filtered-binary-image | application/cbor | 020-filtered-binary-image.cbor |
Pixel mask | pixel-mask | application/cbor | 019-pixel-mask.cbor |
Inner mask | inner-mask | application/cbor | 021-inner-mask.cbor |
Binarized skeleton | ridges-binarized-skeleton valleys-binarized-skeleton | application/cbor | 022-ridges-binarized-skeleton.cbor 030-valleys-binarized-skeleton.cbor |
Thinned skeleton | ridges-thinned-skeleton valleys-thinned-skeleton | application/cbor | 023-ridges-thinned-skeleton.cbor 031-valleys-thinned-skeleton.cbor |
Traced skeleton | ridges-traced-skeleton valleys-traced-skeleton | application/cbor | 024-ridges-traced-skeleton.cbor 032-valleys-traced-skeleton.cbor |
Skeleton dots | ridges-removed-dots valleys-removed-dots | application/cbor | 025-ridges-removed-dots.cbor 033-valleys-removed-dots.cbor |
Skeleton pores | ridges-removed-pores valleys-removed-pores | application/cbor | 026-ridges-removed-pores.cbor 034-valleys-removed-pores.cbor |
Skeleton gaps | ridges-removed-gaps valleys-removed-gaps | application/cbor | 027-ridges-removed-gaps.cbor 035-valleys-removed-gaps.cbor |
Skeleton tails | ridges-removed-tails valleys-removed-tails | application/cbor | 028-ridges-removed-tails.cbor 036-valleys-removed-tails.cbor |
Skeleton fragments | ridges-removed-fragments valleys-removed-fragments | application/cbor | 029-ridges-removed-fragments.cbor 037-valleys-removed-fragments.cbor |
Skeleton minutiae | skeleton-minutiae | application/cbor | 038-skeleton-minutiae.cbor |
Inner minutiae | inner-minutiae | application/cbor | 039-inner-minutiae.cbor |
Minutia clouds | removed-minutia-clouds | application/cbor | 040-removed-minutia-clouds.cbor |
Top minutiae | top-minutiae | application/cbor | 041-top-minutiae.cbor |
Shuffled minutiae | shuffled-minutiae | application/cbor | 042-shuffled-minutiae.cbor |
Edge table | edge-table | application/cbor | 043-edge-table.cbor |
Edge hash | edge-hash | application/cbor | 044-edge-hash.cbor |
Root minutiae | roots | application/cbor | 045-roots.cbor |
Pairing graph | pairing best-pairing | application/cbor | 046-pairing.cbor (+59)166-best-pairing.cbor |
Score components | score best-score | application/cbor | 047-score.cbor (+59)167-best-score.cbor |
Best match offset | best-match | text/plain | 168-best-match.txt |