private List <Head> DetectHeads(CameraSpacePoint[] noiseFilteredFrame) { _stopwatch.Restart(); var haarDetector = new HaarDetector(noiseFilteredFrame); List <int> headCandidatesHaar = haarDetector.GetHeadCandidates(); if (Logger.LogTimeHaar) { _stopwatch.Stop(); Console.WriteLine("Haar: {0}", _stopwatch.ElapsedMilliseconds); } _stopwatch.Restart(); var candidatesHighestConnectingPoints = new List <int>(); for (int i = 0; i < headCandidatesHaar.Count; i++) { if (Logger.ShowCandidateHeadpixel) { GraphicsUtils.DrawPoint(headCandidatesHaar[i]); } int headCandidateIndex = headCandidatesHaar[i]; if (headCandidateIndex != -1) { int highestPointIndex = ClassificationUtils.GetHighestConnectingPoint(headCandidateIndex, Thresholds.ClassificationHighestPointSearchDepth); candidatesHighestConnectingPoints.Add(highestPointIndex); if (Logger.ShowTopHeadpixel) { GraphicsUtils.DrawPoint(highestPointIndex); } } } var groupedHighestIndexes = ClassificationUtils.GroupCandidatesHighestPoints(candidatesHighestConnectingPoints, Thresholds.ClassificationHighestPointGroupingDistance); List <Head> validatedCandidateHeads = ValidateCandidateHeads(groupedHighestIndexes); GlobVar.ValidatedCandidateHeads = validatedCandidateHeads; if (Logger.LogTimeClassificationValidation) { _stopwatch.Stop(); Console.WriteLine("ClassificationValidation: {0}", _stopwatch.ElapsedMilliseconds); } return(validatedCandidateHeads); }
private List<Head> DetectHeads(CameraSpacePoint[] noiseFilteredFrame) { _stopwatch.Restart(); var haarDetector = new HaarDetector(noiseFilteredFrame); List<int> headCandidatesHaar = haarDetector.GetHeadCandidates(); if (Logger.LogTimeHaar) { _stopwatch.Stop(); Console.WriteLine("Haar: {0}", _stopwatch.ElapsedMilliseconds); } _stopwatch.Restart(); var candidatesHighestConnectingPoints = new List<int>(); for (int i = 0; i < headCandidatesHaar.Count; i++) { if (Logger.ShowCandidateHeadpixel) { GraphicsUtils.DrawPoint(headCandidatesHaar[i]); } int headCandidateIndex = headCandidatesHaar[i]; if (headCandidateIndex != -1) { int highestPointIndex = ClassificationUtils.GetHighestConnectingPoint(headCandidateIndex, Thresholds.ClassificationHighestPointSearchDepth); candidatesHighestConnectingPoints.Add(highestPointIndex); if (Logger.ShowTopHeadpixel) { GraphicsUtils.DrawPoint(highestPointIndex); } } } var groupedHighestIndexes = ClassificationUtils.GroupCandidatesHighestPoints(candidatesHighestConnectingPoints, Thresholds.ClassificationHighestPointGroupingDistance); List<Head> validatedCandidateHeads = ValidateCandidateHeads(groupedHighestIndexes); GlobVar.ValidatedCandidateHeads = validatedCandidateHeads; if (Logger.LogTimeClassificationValidation) { _stopwatch.Stop(); Console.WriteLine("ClassificationValidation: {0}", _stopwatch.ElapsedMilliseconds); } return validatedCandidateHeads; }