public void Filter(SkeletonBuilder skeleton) { foreach (SkeletonBuilder.Minutia minutia in skeleton.Minutiae) { if (minutia.Ridges.Count == 2 && minutia.Ridges[0].Reversed != minutia.Ridges[1]) { SkeletonBuilder.Ridge extended = minutia.Ridges[0].Reversed; SkeletonBuilder.Ridge removed = minutia.Ridges[1]; if (extended.Points.Count < removed.Points.Count) { Calc.Swap(ref extended, ref removed); extended = extended.Reversed; removed = removed.Reversed; } extended.Points.RemoveAt(extended.Points.Count - 1); foreach (Point point in removed.Points) { extended.Points.Add(point); } extended.End = removed.End; removed.Detach(); } } DotRemover.Filter(skeleton); Logger.Log(skeleton); }
public void Filter(SkeletonBuilder skeleton) { foreach (SkeletonBuilder.Minutia minutia in skeleton.Minutiae) { if (minutia.Ridges.Count == 3) { for (int exit = 0; exit < 3; ++exit) { SkeletonBuilder.Ridge exitRidge = minutia.Ridges[exit]; SkeletonBuilder.Ridge arm1 = minutia.Ridges[(exit + 1) % 3]; SkeletonBuilder.Ridge arm2 = minutia.Ridges[(exit + 2) % 3]; if (arm1.End == arm2.End && exitRidge.End != arm1.End && arm1.End != minutia && exitRidge.End != minutia) { SkeletonBuilder.Minutia end = arm1.End; if (end.Ridges.Count == 3 && arm1.Points.Count <= MaxArmLength && arm2.Points.Count <= MaxArmLength) { arm1.Detach(); arm2.Detach(); SkeletonBuilder.Ridge merged = new SkeletonBuilder.Ridge(); merged.Start = minutia; merged.End = end; foreach (Point point in Calc.ConstructLine(minutia.Position, end.Position)) { merged.Points.Add(point); } } break; } } } } KnotRemover.Filter(skeleton); Logger.Log(skeleton); }
public void Filter(SkeletonBuilder skeleton) { foreach (SkeletonBuilder.Minutia minutia in skeleton.Minutiae) { if (minutia.Ridges.Count == 1) { SkeletonBuilder.Ridge ridge = minutia.Ridges[0]; if (ridge.End.Ridges.Count == 1 && ridge.Points.Count < MinFragmentLength) { ridge.Detach(); } } } DotRemover.Filter(skeleton); Logger.Log(skeleton); }