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:
Take raw fingerprint image (500 PPI, 8-bit grayscale)
Process through Pipeline A (SDK) and Pipeline B (our Deshmukh-based enhancer)
Extract minutiae with
mindtct, compare withbozorth3Cross-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 = 8pixels,MAP_WINDOWSIZE_V2 = 24pixels (`lfs.h:341,345`)DIRBIN_GRID_W/H = 7x9pixels (lfs.h:452-453)MAX_HOOK_LEN_V2 = 30pixels (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.xytformat has no resolution field -> reads"%d %d %d %d"viasscanfConfirmed via
stringson 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:
Is NBIS designed or validated for benchmarking enhancement algorithms, or only for end-to-end forensic matching of 500 PPI rolled/slap prints?
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
.xytcoordinates to a common PPI before bozorth3? If we need to resample, what technique should be used as DPI is physical world dependent?Is the WSQ inflation of cross-pipeline scores a known pitfall? The NIST evaluation reports (FpVTE, MINEX) appear to use WSQ throughout.
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?