private List <double> PrepareFeatures() { List <double> features = null; BitMatrix matrix = new BitMatrix(m_ProcessedImage); List <Point> path = m_HandAnalyzer.FindLongestPath(matrix); // find centroid Point centroid = m_HandAnalyzer.FindCentroid(matrix, path); // find min/max points List <APair <int, double> > minimums, maximums; bool result = m_HandAnalyzer.FindFingerPoints(path, centroid, out maximums, out minimums); if (result) { // find finger features features = m_HandAnalyzer.FindFingerFeatures(matrix, path, centroid, maximums, minimums); } // path preview BitMatrix pathMatrix = new BitMatrix(matrix.Width, matrix.Height); pathMatrix.SetPoints(path, true); // centroid preview m_FeaturesImage = pathMatrix.ToImage(); m_FeaturesImage.DrawMarker(centroid, Color.Magenta, 4); // finger points preview for (int i = 0; i < maximums.Count; ++i) { Point p = path[maximums[i].First]; m_FeaturesImage.DrawMarker(p, Color.Green, 4); } for (int i = 0; i < minimums.Count; ++i) { Point p = path[minimums[i].First]; m_FeaturesImage.DrawMarker(p, Color.Yellow, 4); } return(features); }