public object Clone() { MinutiaPairing clone = new MinutiaPairing(); clone.ProbeIndex = (PairInfo[])ProbeIndex.Clone(); clone.CandidateIndex = (PairInfo[])CandidateIndex.Clone(); clone.PairList = (PairInfo[])PairList.CloneItems(); clone.PairCount = PairCount; return clone; }
public object Clone() { MinutiaPairing clone = new MinutiaPairing(); clone.ProbeIndex = (PairInfo[])ProbeIndex.Clone(); clone.CandidateIndex = (PairInfo[])CandidateIndex.Clone(); clone.PairList = (PairInfo[])PairList.CloneItems(); clone.PairCount = PairCount; return(clone); }
public void SkipPaired(MinutiaPairing pairing) { while (Queue.Count > 0 && (pairing.IsProbePaired(Queue.Peek().Neighbor.Probe) || pairing.IsCandidatePaired(Queue.Peek().Neighbor.Candidate))) { EdgePair edge = Queue.Dequeue(); if (pairing.IsProbePaired(edge.Neighbor.Probe) && pairing.GetByProbe(edge.Neighbor.Probe).Pair.Candidate == edge.Neighbor.Candidate) { pairing.AddSupportByProbe(edge.Reference.Probe); pairing.AddSupportByProbe(edge.Neighbor.Probe); } } }
public void Analyze(MinutiaPairing pairing, EdgeLookup lookup, Template probe, Template candidate) { MaxDistanceError = lookup.MaxDistanceError; MaxAngleError = lookup.MaxAngleError; var innerDistanceRadius = Convert.ToInt32(DistanceErrorFlatness * MaxDistanceError); var innerAngleRadius = Convert.ToInt32(AngleErrorFlatness * MaxAngleError); PairCount = pairing.Count; EdgeCount = 0; SupportedCount = 0; CorrectTypeCount = 0; DistanceErrorSum = 0; AngleErrorSum = 0; for (int i = 0; i < PairCount; ++i) { PairInfo pair = pairing.GetPair(i); if (pair.SupportingEdges >= MinSupportingEdges) ++SupportedCount; EdgeCount += pair.SupportingEdges + 1; if (probe.Minutiae[pair.Pair.Probe].Type == candidate.Minutiae[pair.Pair.Candidate].Type) ++CorrectTypeCount; if (i > 0) { var probeEdge = EdgeConstructor.Construct(probe, pair.Reference.Probe, pair.Pair.Probe); var candidateEdge = EdgeConstructor.Construct(candidate, pair.Reference.Candidate, pair.Pair.Candidate); DistanceErrorSum += Math.Abs(probeEdge.Length - candidateEdge.Length); AngleErrorSum += Math.Max(innerDistanceRadius, Angle.Distance(probeEdge.ReferenceAngle, candidateEdge.ReferenceAngle)); AngleErrorSum += Math.Max(innerAngleRadius, Angle.Distance(probeEdge.NeighborAngle, candidateEdge.NeighborAngle)); } } float probeFraction = PairCount / (float)probe.Minutiae.Length; float candidateFraction = PairCount / (float)candidate.Minutiae.Length; PairFraction = (probeFraction + candidateFraction) / 2; }