Exemple #1
0
        //Not good
        public static void ReduceColor(Mat mat, int div = 64)
        {
            var data = RoadDetector.GetMatData(mat);

            for (int i = 0; i < data.Length; i++)
            {
                data[i] = (byte)(data[i] / div * div);
            }
            RoadDetector.SetMatData(mat, data);
        }
Exemple #2
0
        public static RoadStruc FilterRoadByMean(Mat mat)
        {
            var data = RoadDetector.GetMatData(mat);

            const int SPACING      = 100;
            int       xspaceEnd    = mat.Cols - SPACING;
            int       ystart       = 400;
            int       yspacingNoe2 = 2;

            bool[,] spacing = new bool[yspacingNoe2, (xspaceEnd / SPACING) + 1];
            int aty = 0;

            for (var y = ystart; y < ystart + (yspacingNoe2 * SPACING); y += SPACING, aty++)
            {
                for (var x = 0; x < xspaceEnd; x += SPACING)
                {
                    spacing[aty, x / SPACING] = GetRoadMean(data, mat, x, y, SPACING, SPACING);
                }
            }


            int middle = xspaceEnd / SPACING / 2;

            int[] leftX  = new int[2];
            int[] rightX = new int[2];
            for (int y = 0; y < yspacingNoe2; y++)
            {
                if (spacing[y, middle])
                {
                    int left = middle;
                    while (left >= 1 && spacing[y, left - 1])
                    {
                        left--;
                    }
                    leftX[y] = left;
                    int right = middle;
                    while (right <= spacing.GetUpperBound(1) - 1 && spacing[y, right + 1])
                    {
                        right++;
                    }
                    rightX[y] = right;
                }
            }
            RoadDetector.SetMatData(mat, data);
            Func <int, int> tran = x => x + (SPACING / 2);

            return(new RoadStruc
            {
                leftStart = new System.Drawing.Point(tran(leftX[0] * 100), tran(ystart)),
                leftEnd = new System.Drawing.Point(tran(leftX[1] * 100), tran(ystart + SPACING)),

                rightStart = new System.Drawing.Point(tran(rightX[0] * 100), tran(ystart)),
                rightEnd = new System.Drawing.Point(tran(rightX[1] * 100), tran(ystart + SPACING)),
            });
        }
Exemple #3
0
        public static void FilterRoadByColor(Mat mat)
        {
            var data = RoadDetector.GetMatData(mat);
            int pos  = 0;

            //const int TOODARK = 120;

            for (var y = 0; y < mat.Rows; y++)
            {
                for (var x = 0; x < mat.Cols; x++)
                {
                    var b         = data[pos];
                    var g         = data[pos + 1];
                    var r         = data[pos + 2];
                    var gbdiff    = g - b;
                    var grdiff    = g - r;
                    var gbdiffabs = Math.Abs(gbdiff);
                    var grdiffabs = Math.Abs(grdiff);
                    if (gbdiff > MAXGDIFF && grdiff > MAXGDIFF)
                    {
                        data[pos]     = data[pos + 1] = data[pos + 2] = 0;
                        data[pos + 1] = 255;
                    }
                    else if (g > MAXTOP && b > MAXTOP && r > MAXTOP)
                    {
                        data[pos] = data[pos + 1] = data[pos + 2] = 255;
                    }
                    else
                    if (gbdiffabs < MAXDIFF && grdiffabs < MAXDIFF)
                    {
                        data[pos] = data[pos + 1] = data[pos + 2] = GRAY;
                    }
                    pos += mat.ElementSize;
                }
            }
            RoadDetector.SetMatData(mat, data);
        }