/// <summary> /// Extract features of type <see cref="PNFeatures"/> from the specified minutiae. /// </summary> /// <param name="minutiae"> /// The list of <see cref="Minutia"/> to extract the features from. /// </param> /// <returns> /// Features of type <see cref="PNFeatures"/> extracted from the specified minutiae. /// </returns> public PNFeatures ExtractFeatures(List <Minutia> minutiae) { List <MtiaTriplet> result = new List <MtiaTriplet>(); if (minutiae.Count > 3) { foreach (var triangle in Delaunay2D.Triangulate(minutiae)) { var idxArr = new short[] { (short)triangle.A, (short)triangle.B, (short)triangle.C }; MtiaTriplet newMTriplet = new MtiaTriplet(idxArr, minutiae); result.Add(newMTriplet); idxArr = new short[] { (short)triangle.A, (short)triangle.C, (short)triangle.B }; newMTriplet = new MtiaTriplet(idxArr, minutiae); result.Add(newMTriplet); idxArr = new short[] { (short)triangle.B, (short)triangle.A, (short)triangle.C }; newMTriplet = new MtiaTriplet(idxArr, minutiae); result.Add(newMTriplet); idxArr = new short[] { (short)triangle.B, (short)triangle.C, (short)triangle.A }; newMTriplet = new MtiaTriplet(idxArr, minutiae); result.Add(newMTriplet); idxArr = new short[] { (short)triangle.C, (short)triangle.A, (short)triangle.B }; newMTriplet = new MtiaTriplet(idxArr, minutiae); result.Add(newMTriplet); idxArr = new short[] { (short)triangle.C, (short)triangle.B, (short)triangle.A }; newMTriplet = new MtiaTriplet(idxArr, minutiae); result.Add(newMTriplet); } } result.TrimExcess(); return(new PNFeatures(result, minutiae)); }
public PNFeatures ExtractFeatures1(List <Minutia> minutiae) { List <MtiaTriplet> result = new List <MtiaTriplet>(); if (minutiae.Count > 3) { List <int[]> triplets; SHullDelaunay.Triangulate(minutiae, out triplets); foreach (var triangle in triplets) { var idxArr = new short[] { (short)triangle[0], (short)triangle[1], (short)triangle[2] }; MtiaTriplet newMTriplet = new MtiaTriplet(idxArr, minutiae); result.Add(newMTriplet); idxArr = new short[] { (short)triangle[0], (short)triangle[1], (short)triangle[2] }; newMTriplet = new MtiaTriplet(idxArr, minutiae); result.Add(newMTriplet); idxArr = new short[] { (short)triangle[0], (short)triangle[1], (short)triangle[2] }; newMTriplet = new MtiaTriplet(idxArr, minutiae); result.Add(newMTriplet); idxArr = new short[] { (short)triangle[0], (short)triangle[1], (short)triangle[2] }; newMTriplet = new MtiaTriplet(idxArr, minutiae); result.Add(newMTriplet); idxArr = new short[] { (short)triangle[0], (short)triangle[1], (short)triangle[2] }; newMTriplet = new MtiaTriplet(idxArr, minutiae); result.Add(newMTriplet); idxArr = new short[] { (short)triangle[0], (short)triangle[1], (short)triangle[2] }; newMTriplet = new MtiaTriplet(idxArr, minutiae); result.Add(newMTriplet); } } result.TrimExcess(); return(new PNFeatures(result, minutiae)); }