Exemple #1
0
        public static ModelParams GetClosestTo(ModelParams model)
        {
            Func <short, short, float> scaleDistFunc = (a, b) => (float)Math.Abs(a - b);
            Func <short, short, float> angleDistFunc = (a, b) => (float)Math.Abs(a - b);//(float)Angle.DistanceDeg(a, b);

            var templateIdx  = model.ModelTypeIndex;
            var closestScale = getClosestValue(sortedScales[templateIdx], model.Scale, scaleDistFunc);
            var closestAngle = getClosestValue(sortedAngles[templateIdx], model.Angle, angleDistFunc);

            return(new ModelParams(templateIdx, closestScale, closestAngle));
        }
        private static void createRange(Dictionary<ModelParams, ITemplate> dict, Gray<byte>[,] templateImg,
                                        int templateIdx, IEnumerable<int> scaleRange, IEnumerable<int> rotationRange, string label = "")
        {
            var contour = findContour(templateImg);
            var pts = contour.GetEqualyDistributedPoints(N_SAMPLE_POINTS, treatAsClosed: false);
            pts = pts.Normalize();

            foreach(var s in scaleRange)
            {
                foreach(var r in rotationRange)
                {
                    var template = create(pts, s, r, label);
                    var mParams = new ModelParams(templateIdx, (short)s, (short)r);

                    dict.Add(mParams, template);
                }
            }
        }
        public static ModelParticle FromParameters(params double[] arr)
        {
            var mParams = new ModelParams(modelTypeIndex: (int)arr[0], 
                                         scale:         (short)arr[1], 
                                         angle:         (short)arr[2]);

            mParams = ModelRepository.GetMostSimilarTo(mParams);

            var p = new ModelParticle
            {
                ModelParameters = mParams,
                Weight = 0
            };

            var template = mParams.TryGetTemplate();
            p.updateTemplateData(template);

            return p;
        }
        private static void createRange(Dictionary <ModelParams, ITemplate> dict, Gray <byte>[,] templateImg,
                                        int templateIdx, IEnumerable <int> scaleRange, IEnumerable <int> rotationRange, string label = "")
        {
            var contour = findContour(templateImg);
            var pts     = contour.GetEqualyDistributedPoints(N_SAMPLE_POINTS, treatAsClosed: false);

            pts = pts.Normalize();

            foreach (var s in scaleRange)
            {
                foreach (var r in rotationRange)
                {
                    var template = create(pts, s, r, label);
                    var mParams  = new ModelParams(templateIdx, (short)s, (short)r);

                    dict.Add(mParams, template);
                }
            }
        }
        public static ModelParticle FromParameters(params double[] arr)
        {
            var mParams = new ModelParams(modelTypeIndex: (int)arr[0],
                                          scale:         (short)arr[1],
                                          angle:         (short)arr[2]);

            mParams = ModelRepository.GetMostSimilarTo(mParams);

            var p = new ModelParticle
            {
                ModelParameters = mParams,
                Weight          = 0
            };

            var template = mParams.TryGetTemplate();

            p.updateTemplateData(template);

            return(p);
        }