public IEnumerable <Match> Match(IStoreProvider <TFeature> storage, Bitmap bitmap, int skip, int take) { var extract = Extract(ImageProvider.AdaptImage(bitmap)); var list = new List <Match>(); foreach (var candidate in storage.GetCandidates(skip, take)) { var retrieved = storage.Retrieve(candidate); var score = Match(extract, retrieved, out var matchingMtiae); if (Math.Abs(score) < double.Epsilon || matchingMtiae == null) { continue; } if (matchingMtiae.Count > 10) { list.Add(new Match { Confidence = score, EntryId = candidate, MatchingPoints = matchingMtiae.Count }); } } return(list); }
public override MtripletsFeature Extract(Bitmap image) { var minutiae = MinutiaeExtractor.ExtractFeatures(ImageProvider.AdaptImage(image)); var mtriplets = new List <MTriplet>(); var triplets = new Dictionary <int, int>(); foreach (var triangle in Delaunay2D.Triangulate(minutiae)) { var idxArr = new[] { (short)triangle.A, (short)triangle.B, (short)triangle.C }; var newMTriplet = new MTriplet(idxArr, minutiae); var newHash = newMTriplet.GetHashCode(); if (!triplets.ContainsKey(newHash)) { triplets.Add(newHash, 0); mtriplets.Add(newMTriplet); } } mtriplets.TrimExcess(); return(new MtripletsFeature(mtriplets, minutiae)); }
public void Store(IStoreProvider <TFeature> storage, Bitmap bitmap, string subjectId) { var extract = Extract(ImageProvider.AdaptImage(bitmap)); storage.Add(new Candidate <TFeature> { EntryId = subjectId, Feautures = extract }); }