Skip to content

Repository files navigation

Fingerprint_Minutia_Matching

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.

Repository Structure

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

How It Works

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 entries
  • DataBaseSize – number of database entries

CSV files must be placed in: ...\ChallengeSolution_MinutiaMatching_Version3\out\build\x64-debug\


Features

  • 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

Version Updates

🔹 Version 1

  • Baseline comparison of 1 X-Y minutia pair per sample against database
  • Used nested loops and Euclidean distance matching

🔹 Version 2

  • Efficiency upgrade: Pre-processes the database into memory before sample comparison
  • Greatly reduces execution time for larger databases
  • Introduced DataBaseSize as a tunable parameter

🔹 Version 3

  • 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

File Format Requirements

All input files must be in .csv format

  • Sample CSV: each row should contain an X, Y pair
  • Database CSV:
    • Version 1 & 2: one X, Y pair per row
    • Version 3: five X, Y pairs per row grouped under a single ID

Getting Started

Prerequisites

  • C++ compiler (tested with MSVC)
  • CMake (for building across platforms)

Build Steps

  1. Open the solution in Microsoft Visual Studio
  2. Use the x64-Debug configuration
  3. Place your samples.csv and db.csv in: ...\out\build\x64-debug\
  4. Adjust SampleArraySize and DataBaseSize if needed
  5. Build and run the executable

Example Files (for testing)

The repository includes example input files:

  • samples.csv – sample minutia points
  • db.csv – database minutia entries

Use these to test and validate the program's accuracy.


Notes

  • 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

Future improvements

  • 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

About

This programs compares sample minutia to a large data base of minutia and finds the closest match

Resources

Stars

0 stars

Watchers

2 watching

Forks

Releases

Packages

Contributors

Languages