Пример #1
0
        private void btnEuclidean_Click(object sender, EventArgs e)
        {
            var featureExtractor = new PointFloatShapeFeatureExtractor();
            var preProc          = new PreProcessing();

            var traceGroup        = _drawingInk.Ink.ToTraceGroup();
            var sampledTraceGroup = preProc.ResampleTraceGroup(chkIsNormalized.Checked?preProc.NormalizeSize(traceGroup): traceGroup);
            var features          = featureExtractor.ExtractFeature(sampledTraceGroup);

            var testTraceGroup        = _resultInk.Ink.ToTraceGroup();
            var sampledTestTraceGroup = preProc.ResampleTraceGroup(chkIsNormalized.Checked?preProc.NormalizeSize(testTraceGroup): testTraceGroup);
            var testFeatures          = featureExtractor.ExtractFeature(sampledTestTraceGroup);

            var eucDistance = featureExtractor.ComputeEuclideanDistance(features, testFeatures);

            MessageBox.Show(@"Euclidean Distance = " + eucDistance);
        }
Пример #2
0
        public IList <RecoResult> Recognize(TraceGroup testTraceGroup)
        {
            var testPreProcTraceGroup = _preProc.PreProcess(testTraceGroup);
            var testFeature           = _featureExtractor.ExtractFeature(testPreProcTraceGroup);

            var distanceList = new List <KeyValuePair <int, float> >();

            foreach (var train in _trainList)
            {
                var d = _featureExtractor.ComputeEuclideanDistance(train.ShapeFeatures, testFeature);
                distanceList.Add(new KeyValuePair <int, float>(train.ClassId, d));
            }

            distanceList.Sort((f1, f2) => f1.Value.CompareTo(f2.Value));

            var tempRecoResult = new List <RecoResult>();
            var sumSimiliarity = 0f;

            for (var i = 0; i < distanceList.Count; i++)
            {
                var foundDuplicated = tempRecoResult.Find(c => c.ShapeId == distanceList[i].Key);
                if (foundDuplicated == null)
                {
                    sumSimiliarity += distanceList[i].Value;
                    tempRecoResult.Add(new RecoResult {
                        ShapeId = distanceList[i].Key, ConfidenceLevel = distanceList[i].Value
                    });

                    if (tempRecoResult.Count == _numOfChoice)
                    {
                        break;
                    }
                }
            }

            for (var i = 0; i < _numOfChoice; i++)
            {
                tempRecoResult[i].ConfidenceLevel = (sumSimiliarity - tempRecoResult[i].ConfidenceLevel) / sumSimiliarity;
            }

            return(tempRecoResult);
        }