Пример #1
0
        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();
        }
Пример #2
0
 public Sample GetTrainingSampleFromShapeFeatures(ShapeFeatures shapeFeatures, ShapeType shapeType)
 {
     return(new Sample
     {
         InputVector = GetInputVectorFromShapeFeatures(shapeFeatures),
         OutputClass = shapeType.ToString()
     });
 }
Пример #3
0
        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);
        }