Beispiel #1
0
        public void run(List <SketchStroke> sample)
        {
            List <Tuple <string, double> > results = new List <Tuple <string, double> >();

            foreach (KeyValuePair <string, Sketch> pair in this.Templates)
            {
                bool[,] sampleImage         = VisionFeatureExtraction.SketchToArray(sample, this.frameLength);
                bool[,] templateImage       = VisionFeatureExtraction.SketchToArray(pair.Value.Strokes, this.frameLength);
                bool[,] sampleImageScaled   = VisionFeatureExtraction.Scale(sampleImage, 100);
                bool[,] templateImageScaled = VisionFeatureExtraction.Scale(templateImage, 100);
                int[] sampleHorizontalProjection   = VisionFeatureExtraction.TrimProjection(VisionFeatureExtraction.HorizontalProjection(sampleImageScaled));
                int[] sampleVerticalProjection     = VisionFeatureExtraction.TrimProjection(VisionFeatureExtraction.VerticalProjection(sampleImageScaled));
                int[] templateHorizontalProjection = VisionFeatureExtraction.TrimProjection(VisionFeatureExtraction.HorizontalProjection(templateImageScaled));
                int[] templateVerticalProjection   = VisionFeatureExtraction.TrimProjection(VisionFeatureExtraction.VerticalProjection(templateImageScaled));

                int distance = this.DtwDistance(sampleHorizontalProjection, templateHorizontalProjection)
                               + this.DtwDistance(sampleVerticalProjection, templateVerticalProjection);

                results.Add(new Tuple <string, double>(pair.Key, distance));
            }

            results.Sort((x, y) => y.Item2.CompareTo(x.Item2));

            this.labels = new List <string>();
            this.scores = new List <double>();

            for (int i = 0; i < results.Count; ++i)
            {
                string label = results[i].Item1;
                double score = results[i].Item2;

                this.labels.Add(label);
                this.scores.Add(score);
            }
        }