Пример #1
0
        private float Correct(double value, ref KalmanFilter filter)
        {
            if (filter == null)
            {
                filter = factory.Create();
            }

            var corrected = new float[2, 1];
            var measurement = new Matrix<float>(1, 1)
            {
                [0, 0] = (float) value
            };
Пример #2
0
        public static Rgb PostProcessPixel(System.Drawing.Point centralPixel, Mat data, double[, ,] edgeMat)
        {
            System.Drawing.Point[] neighbours = GetNeighbours(centralPixel);

            if (neighbours != null)
            {
                var centralRgb = GetRgb(centralPixel, data);

                var rgb1 = GetRgb(neighbours[0], data);
                var rgb2 = GetRgb(neighbours[1], data);
                var rgb3 = GetRgb(neighbours[2], data);
                var rgb4 = GetRgb(neighbours[3], data);
                var rgb5 = GetRgb(neighbours[4], data);
                var rgb6 = GetRgb(neighbours[5], data);
                var rgb7 = GetRgb(neighbours[6], data);
                var rgb8 = GetRgb(neighbours[7], data);

                var d0 = Math.Abs(rgb4.Red - rgb5.Red) + Math.Abs(rgb4.Green - rgb5.Green) + Math.Abs(rgb4.Blue - rgb5.Blue);
                var d45 = Math.Abs(rgb6.Red - rgb3.Red) + Math.Abs(rgb6.Green - rgb3.Green) + Math.Abs(rgb6.Blue - rgb3.Blue);
                var d90 = Math.Abs(rgb7.Red - rgb2.Red) + Math.Abs(rgb7.Green - rgb2.Green) + Math.Abs(rgb7.Blue - rgb2.Blue);
                var d135 = Math.Abs(rgb8.Red - rgb1.Red) + Math.Abs(rgb8.Green - rgb1.Green) + Math.Abs(rgb8.Blue - rgb1.Blue);

                var dList = new[] { d0, d45, d90, d135 };

                var maxD = dList.Max();

                System.Drawing.Point point = new System.Drawing.Point();


                if (maxD == d0)
                {
                    var distance1 = ColorDistance(rgb4, centralRgb);
                    var distance2 = ColorDistance(rgb5, centralRgb);

                    if (distance1 < distance2)
                    {
                        point = neighbours[3];
                    }
                    else
                    {
                        point = neighbours[4];
                    }
                }
                else if (maxD == d45)
                {
                    var distance1 = ColorDistance(rgb6, centralRgb);
                    var distance2 = ColorDistance(rgb3, centralRgb);

                    if (distance1 < distance2)
                    {
                        point = neighbours[5];
                    }
                    else
                    {
                        point = neighbours[2];
                    }
                }
                else if (maxD == d90)
                {
                    var distance1 = ColorDistance(rgb7, centralRgb);
                    var distance2 = ColorDistance(rgb2, centralRgb);

                    if (distance1 < distance2)
                    {
                        point = neighbours[6];
                    }
                    else
                    {
                        point = neighbours[1];
                    }
                }
                else if (maxD == d135)
                {
                    var distance1 = ColorDistance(rgb8, centralRgb);
                    var distance2 = ColorDistance(rgb1, centralRgb);

                    if (distance1 < distance2)
                    {
                        point = neighbours[7];
                    }
                    else
                    {
                        point = neighbours[0];
                    }
                }

                var edgeVal = edgeMat[point.Y, point.X, 0];
                var centerEdgeVal = edgeMat[centralPixel.Y, centralPixel.X, 0];

                if (centerEdgeVal > edgeVal)
                {
                    return GetRgb(point, data);
                }
            }

            return GetRgb(centralPixel, data);
        }