예제 #1
0
        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);
        }