This C++ program provides a fast and automated method to compare multiple (X, Y) fingerprint minutia coordinate pairs against a database of stored entries and identify the closest match. The solution supports both simple 1-pair matching and advanced 5-pair per ID matching, making it suitable for scalable biometric identification systems.
The project consists of multiple versions with iterative improvements:
- ChallengeSolution_MinutiaMatching
- ChallengeSolution_MinutiaMatching_Version2 – Optimized execution
- ChallengeSolution_MinutiaMatching_Version3 – Extended support for multiple minutia pairs per ID
During runtime, the program loads:
- A sample CSV file (containing sample minutia points)
- A database CSV file (containing stored fingerprint data)
It uses arrays to store and compare coordinate data for fast matching. For large datasets, users must adjust array sizes by modifying the following variables in the .cpp files:
SampleArraySize– number of sample entriesDataBaseSize– number of database entries
CSV files must be placed in: ...\ChallengeSolution_MinutiaMatching_Version3\out\build\x64-debug\
- Fast minutia point comparison using array-based distance calculations
- CSV input support for both sample and database files
- Adjustable sample/database size for dynamic scalability
- Precision matching even with increasing minutia count per ID
- Written in C++ using CMake (cross-platform), compiled on Windows using MSVC
- Baseline comparison of 1 X-Y minutia pair per sample against database
- Used nested loops and Euclidean distance matching
- Efficiency upgrade: Pre-processes the database into memory before sample comparison
- Greatly reduces execution time for larger databases
- Introduced
DataBaseSizeas a tunable parameter
- Extended logic to support 5 minutia pairs per ID
- Samples are now compared to groups of 5 pairs per database entry
- Updated matching algorithm to compute cumulative distances across pairs
All input files must be in
.csvformat
- Sample CSV: each row should contain an
X, Ypair - Database CSV:
- Version 1 & 2: one
X, Ypair per row - Version 3: five
X, Ypairs per row grouped under a single ID
- Version 1 & 2: one
- C++ compiler (tested with MSVC)
- CMake (for building across platforms)
- Open the solution in Microsoft Visual Studio
- Use the
x64-Debugconfiguration - Place your
samples.csvanddb.csvin: ...\out\build\x64-debug\ - Adjust
SampleArraySizeandDataBaseSizeif needed - Build and run the executable
The repository includes example input files:
samples.csv– sample minutia pointsdb.csv– database minutia entries
Use these to test and validate the program's accuracy.
- Version 3 supports 5-pair matching per ID
- This system is designed for closed-set matching (i.e., the correct match is assumed to exist in the database)
- Matching is based on Euclidean distance
- Program currently runs on Windows but is structured using CMake for Linux portability
- Improve performance with KD-Trees or spatial indexing
- Allow user to specify CSV file paths from the console
- Support matching with variable number of minutia pairs per ID
- Add GUI frontend or CLI enhancements for usability