private void ExtractFeaturesButton_Click(object sender, EventArgs e) { if (!strokes.Any()) { return; } ComputeCenterOfGravity(); significantPointsAfterRayIntersection = RayIntersection.GetSignificanPointsAfterRayIntersection(strokes, centerOfGravityPoint); foreach (var point in significantPointsAfterRayIntersection) { graphics.DrawLine(rayPen, centerOfGravityPoint, point); DrawPoint(point, 9); } DrawSegmentsAfterRaysIntersection(); currentShapeFeatures = FeatureExtraction.GetShapeFeatures(significantPointsAfterRayIntersection); acuteAnglesLabel.Text += currentShapeFeatures.AcuteAngles; rightAnglesLabel.Text += currentShapeFeatures.RightAngles; wideAnglesLabel.Text += currentShapeFeatures.WideAngles; straightAnglesLabel.Text += currentShapeFeatures.StraightAngles; recognizedShapeTypeLabel.Text = GetRecognizedClass(); }
public Sample GetTrainingSampleFromShapeFeatures(ShapeFeatures shapeFeatures, ShapeType shapeType) { return(new Sample { InputVector = GetInputVectorFromShapeFeatures(shapeFeatures), OutputClass = shapeType.ToString() }); }
public List <int> GetInputVectorFromShapeFeatures(ShapeFeatures shapeFeatures) { var acuteSerialCode = SerialCoding.GetSeriallyCodedValue(shapeFeatures.AcuteAngles, serialCodeLength); var rightSerialCode = SerialCoding.GetSeriallyCodedValue(shapeFeatures.RightAngles, serialCodeLength); var wideSerialCode = SerialCoding.GetSeriallyCodedValue(shapeFeatures.WideAngles, serialCodeLength); var straightSerialCode = SerialCoding.GetSeriallyCodedValue(shapeFeatures.StraightAngles, serialCodeLength); return(acuteSerialCode.Concat(rightSerialCode).Concat(wideSerialCode).Concat(straightSerialCode).ToList()); }
public ShapeFeatures GetShapeFeatures(List <Point> significantPoints) { var segments = GetSegments(significantPoints); var shapeFeatures = new ShapeFeatures(); for (int i = 1; i < segments.Count; i++) { var segment1 = segments[i - 1]; var segment2 = segments[i]; var angleInRadians = GetAngleBetweenSegments(segment1.Item2, segment1.Item1, segment2.Item1, segment2.Item2); var angle = Math.Abs(angleInRadians * 180 / Math.PI); if (angle > 180) { angle = 360 - angle; } if (angle < 75) { shapeFeatures.AcuteAngles++; } else if (angle < 105) { shapeFeatures.RightAngles++; } else if (angle < 165) { shapeFeatures.WideAngles++; } else { shapeFeatures.StraightAngles++; } } return(shapeFeatures); }