private double Eval(Tico2003Features query, Tico2003Features template, List <MinutiaPair> matchingPair) { if (matchingPair == null) { return(0); } var qCenterMtia = matchingPair[matchingPair.Count - 1].QueryMtia; var tCenterMtia = matchingPair[matchingPair.Count - 1].TemplateMtia; // Computing query bounding region var qPolygon = GetBounds(query); qPolygon = (new PolygonMapper(qCenterMtia, tCenterMtia)).Map(qPolygon); var qBoundingRegion = new FingerprintRegion(qPolygon); // Computing template bounding region var tPolygon = GetBounds(template); var tBoundingRegion = new FingerprintRegion(tPolygon); // Mapping query minutiae var mtiaMapper = new MtiaMapper(qCenterMtia, tCenterMtia); var qMtiae = new List <Minutia>(query.Minutiae.Count); for (int i = 0; i < query.Minutiae.Count; i++) { var mtia = query.Minutiae[i]; qMtiae.Add(mtiaMapper.Map(mtia)); } int qCount = 0; for (int i = 0; i < qMtiae.Count; i++) { var mtia = qMtiae[i]; if (tBoundingRegion.Contains(mtia)) { qCount++; } } int tCount = 0; foreach (var mtia in template.Minutiae) { if (qBoundingRegion.Contains(mtia)) { tCount++; } } double sum = 0; foreach (var mtiaPair in matchingPair) { sum += mtiaPair.MatchingValue; } return(qCount >= MtiaCountThr && tCount >= MtiaCountThr ? 1.0 * sum * sum / (qCount * tCount) : 0); }
private double Eval(Qi2005Features query, Qi2005Features template, List <MinutiaPair> matchingPair, double[,] simArr) { var qIndex = new Dictionary <Minutia, int>(query.Minutiae.Count); for (int i = 0; i < query.Minutiae.Count; i++) { qIndex.Add(query.Minutiae[i], i); } var tIndex = new Dictionary <Minutia, int>(template.Minutiae.Count); for (int i = 0; i < template.Minutiae.Count; i++) { tIndex.Add(template.Minutiae[i], i); } var qCenterMtia = matchingPair[matchingPair.Count - 1].QueryMtia; var tCenterMtia = matchingPair[matchingPair.Count - 1].TemplateMtia; // Computing query bounding region var qPolygon = GetBounds(query); qPolygon = (new PolygonMapper(qCenterMtia, tCenterMtia)).Map(qPolygon); var qBoundingRegion = new FingerprintRegion(qPolygon); // Computing template bounding region var tPolygon = GetBounds(template); var tBoundingRegion = new FingerprintRegion(tPolygon); // Mapping query minutiae var mtiaMapper = new MtiaMapper(qCenterMtia, tCenterMtia); var qMtiae = new List <Minutia>(query.Minutiae.Count); for (int i = 0; i < query.Minutiae.Count; i++) { var mtia = query.Minutiae[i]; qMtiae.Add(mtiaMapper.Map(mtia)); } int qCount = 0; for (int i = 0; i < qMtiae.Count; i++) { var mtia = qMtiae[i]; if (tBoundingRegion.Contains(mtia)) { qCount++; } } int tCount = 0; foreach (var mtia in template.Minutiae) { if (qBoundingRegion.Contains(mtia)) { tCount++; } } double sum = 0; foreach (var mtiaPair in matchingPair) { int i = qIndex[mtiaPair.QueryMtia]; int j = tIndex[mtiaPair.TemplateMtia]; sum += simArr[i, j]; } return(qCount >= 6 && tCount >= 6 ? 1.0 * sum / Math.Max(qCount, tCount) : 0); }