Each print is a procedurally generated ridge-flow field: a set of parallel-ish curves warped by a swirl core, the way a real papillary pattern flows around a loop or whorl. The detector walks every ridge line and flags two local events — a ridge ending, where a line simply stops, and a bifurcation, where one ridge splits into two — recording each as a minutia with a position and a local ridge direction.
score = Σ match(mᵢ, mⱼ) / max(|M_unknown|, |M_candidate|)
match(a,b) = pos_dist(a,b) < r AND angle_diff(a,b) < θ
- Match threshold — the score an AFIS system requires before declaring a hit; raise it to demand tighter agreement, lower it to see more false leads.
- Minutiae — toggle the coloured dots marking detected ridge endings (●) and bifurcations (▲) on both prints.
- Candidate database — pick any stored print to compare against the unknown latent print; the matcher pairs up minutiae by position and orientation and draws a line between each accepted pair.
- New print set — regenerates the unknown print and the whole candidate gallery, including exactly one true match so there is always a correct answer to find.
Real-world relevance: this is a simplified model of how AFIS (Automated Fingerprint Identification Systems) narrow millions of records to a shortlist — real systems add ridge-count and core/delta features, but minutiae-graph matching is still the backbone of the comparison.