Does NIST NBIS (mindtct + bozorth3) produce valid comparative match scores when benchmarking fingerprint enhancement pipelines at non-500 PPI?
11:02 20 Jun 2026

I am building a fingerprint enhancement pipeline (Gabor-based segmentation + enhancement) and using NIST NBIS 5.0.0 as our reference matcher to benchmark against a custom implementation of commercial SDK. My evaluation methodology:

  1. Take raw fingerprint image (500 PPI, 8-bit grayscale)

  2. Process through Pipeline A (SDK) and Pipeline B (our Deshmukh-based enhancer)

  3. Extract minutiae with mindtct, compare with bozorth3

  4. Cross-pipeline match score tells us how compatible our enhancer's output is compared to the SDK.

The problem: I am getting contradictory results depending on image format and resolution that make our benchmarking unreliable. Key findings from source code analysis:

1. mindtct's hardcoded 500 PPI assumption

All internal parameters are raw pixel values tuned for ~500 PPI with no runtime PPI adjustment:

  • MAP_BLOCKSIZE_V2 = 8 pixels, MAP_WINDOWSIZE_V2 = 24 pixels (`lfs.h:341,345`)

  • DIRBIN_GRID_W/H = 7x9 pixels (lfs.h:452-453)

  • MAX_HOOK_LEN_V2 = 30 pixels (lfs.h:552)

  • DEFAULT_PPI = 500 (lfs.h:293) ->fallback when no metadata

PPI from image headers is only consumed for ANSI/NIST Type-9 output and a quality radius calculation. The actual DFT analysis, binarization, and false minutiae removal all operate on raw pixel counts.

2. bozorth3 has zero PPI awareness

  • bozorth.h:129: #define DM 125 -> raw Euclidean pixel distance cap

  • .xyt format has no resolution field -> reads "%d %d %d %d" via sscanf

  • Confirmed via strings on the binary: no references to PPI, DPI, resolution, mm, or scale

3. WSQ compression artificially inflates cross-pipeline scores

When both pipelines outputs are converted to WSQ before mindtct, cross-pipeline self-match scores jump dramatically (e.g., 40 -> 490) compared to PNG matching - despite identical underlying pixels. We confirmed via a controlled experiment that this is NOT a PPI metadata effect: encoding the same raw pixels as WSQ at both 500 PPI and 100 PPI, then matching WSQ-to-WSQ, both yield 499 at both PPIs for self-match.

My specific questions:

  1. Is NBIS designed or validated for benchmarking enhancement algorithms, or only for end-to-end forensic matching of 500 PPI rolled/slap prints?

  2. When using NBIS to compare non-500 PPI or processed fingerprint images, what is the standard methodology? Should we resample all images to exactly 500 PPI before mindtct, or scale .xyt coordinates to a common PPI before bozorth3? If we need to resample, what technique should be used as DPI is physical world dependent?

  3. Is the WSQ inflation of cross-pipeline scores a known pitfall? The NIST evaluation reports (FpVTE, MINEX) appear to use WSQ throughout.

  4. Given bozorth3's DM=125 raw pixel cap, a 1000 PPI image effectively has half the spatial matching window (3.17mm vs 6.35mm at 500 PPI). How do researchers handle this when benchmarking on heterogeneous datasets?

image-processing fingerprint biometrics nist