A Java-based image processing library for biometric fingerprint analysis. This project implements the full pipeline from raw boolean images to feature-based matching without external CV libraries.
- Iterative Thinning: Implements a two-step morphological thinning algorithm to extract the 1-pixel wide skeleton of ridges.
- Minutiae Extraction: Detects ridge endings and bifurcations using transition counts (Crossing Number algorithm).
- Geometric Analysis: - Orientation Estimation: Computes ridge flow angles using linear regression over local pixel clusters.
- Spatial Transformations: Supports rotation and translation matrices to align disparate fingerprint captures.
- Feature Matching: A threshold-based matching engine that compares minutiae sets across different coordinate systems.
The project relies on several key mathematical concepts:
- Linear Regression: Used in
computeSlopeto determine the best-fit line for ridge orientation. - Euclidean Distance: For calculating proximity between feature points.
- Zhang-Suen Morphological Steps: To preserve topological properties during image thinning.
The core logic is contained within Fingerprint.java.
// Extract features from a thinned image
List<int[]> minutiae = Fingerprint.extract(skeletonImage);
// Compare two sets of minutiae
boolean isMatch = Fingerprint.match(minutiaeSetA, minutiaeSetB);