Algorithm transparency

SourceAFIS » 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.

Visualizations constructed using algorithm transparency data.

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:

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.

KeyCodeMIMEFilename in ZIP
Algorithm versionversiontext/plain001-version.txt
Decoded imagedecoded-imageapplication/cbor002-decoded-image.cbor
Scaled imagescaled-imageapplication/cbor003-scaled-image.cbor
Blocksblocksapplication/cbor004-blocks.cbor
Block histogramhistogramapplication/cbor005-histogram.cbor
Smoothed histogramsmoothed-histogramapplication/cbor006-smoothed-histogram.cbor
Contrastcontrastapplication/cbor007-contrast.cbor
Absolute contrast maskabsolute-contrast-maskapplication/cbor008-absolute-contrast-mask.cbor
Relative contrast maskrelative-contrast-maskapplication/cbor009-relative-contrast-mask.cbor
Combined maskcombined-maskapplication/cbor010-combined-mask.cbor
Filtered maskfiltered-maskapplication/cbor011-filtered-mask.cbor
Equalized imageequalized-imageapplication/cbor012-equalized-image.cbor
Pixelwise orientationpixelwise-orientationapplication/cbor013-pixelwise-orientation.cbor
Block orientationblock-orientationapplication/cbor014-block-orientation.cbor
Smoothed orientationsmoothed-orientationapplication/cbor015-smoothed-orientation.cbor
Parallel smoothingparallel-smoothingapplication/cbor016-parallel-smoothing.cbor
Orthogonal smoothingorthogonal-smoothingapplication/cbor017-orthogonal-smoothing.cbor
Binarized imagebinarized-imageapplication/cbor018-binarized-image.cbor
Filtered binary imagefiltered-binary-imageapplication/cbor020-filtered-binary-image.cbor
Pixel maskpixel-maskapplication/cbor019-pixel-mask.cbor
Inner maskinner-maskapplication/cbor021-inner-mask.cbor
Binarized skeletonridges-binarized-skeleton
valleys-binarized-skeleton
application/cbor022-ridges-binarized-skeleton.cbor
030-valleys-binarized-skeleton.cbor
Thinned skeletonridges-thinned-skeleton
valleys-thinned-skeleton
application/cbor023-ridges-thinned-skeleton.cbor
031-valleys-thinned-skeleton.cbor
Traced skeletonridges-traced-skeleton
valleys-traced-skeleton
application/cbor024-ridges-traced-skeleton.cbor
032-valleys-traced-skeleton.cbor
Skeleton dotsridges-removed-dots
valleys-removed-dots
application/cbor025-ridges-removed-dots.cbor
033-valleys-removed-dots.cbor
Skeleton poresridges-removed-pores
valleys-removed-pores
application/cbor026-ridges-removed-pores.cbor
034-valleys-removed-pores.cbor
Skeleton gapsridges-removed-gaps
valleys-removed-gaps
application/cbor027-ridges-removed-gaps.cbor
035-valleys-removed-gaps.cbor
Skeleton tailsridges-removed-tails
valleys-removed-tails
application/cbor028-ridges-removed-tails.cbor
036-valleys-removed-tails.cbor
Skeleton fragmentsridges-removed-fragments
valleys-removed-fragments
application/cbor029-ridges-removed-fragments.cbor
037-valleys-removed-fragments.cbor
Skeleton minutiaeskeleton-minutiaeapplication/cbor038-skeleton-minutiae.cbor
Inner minutiaeinner-minutiaeapplication/cbor039-inner-minutiae.cbor
Minutia cloudsremoved-minutia-cloudsapplication/cbor040-removed-minutia-clouds.cbor
Top minutiaetop-minutiaeapplication/cbor041-top-minutiae.cbor
Shuffled minutiaeshuffled-minutiaeapplication/cbor042-shuffled-minutiae.cbor
Edge tableedge-tableapplication/cbor043-edge-table.cbor
Edge hashedge-hashapplication/cbor044-edge-hash.cbor
Root minutiaerootsapplication/cbor045-roots.cbor
Pairing graphpairing
best-pairing
application/cbor046-pairing.cbor (+59)
166-best-pairing.cbor
Score componentsscore
best-score
application/cbor047-score.cbor (+59)
167-best-score.cbor
Best match offsetbest-matchtext/plain168-best-match.txt