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); }
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); }