Exemple #1
0
        public List<AnalyzedObject> analyzeImage(Bitmap origImage)
        {
            ColorRange redRange = new ColorRange();
            redRange.redMin = 150;
            redRange.redMax = 256;
            redRange.greenMin = 0;
            redRange.greenMax = 80;
            redRange.blueMin = 0;
            redRange.blueMax = 80;

            ColorRange greenRange = new ColorRange();
            greenRange.redMin = 0;
            greenRange.redMax = 50;
            greenRange.greenMin = 120;
            greenRange.greenMax = 256;
            greenRange.blueMin = 50;
            greenRange.blueMax = 180;

            int[,] idMat = new int[origImage.Width, origImage.Height];
            int currId = 0;
            Bitmap segImage = modify(origImage, redRange, greenRange, idMat, ref currId);

            int[] lookup = new int[currId + 1];
            createIdLookup(segImage, idMat, lookup, ref currId);
            fixIds(idMat, segImage.Width, segImage.Height, lookup);

            List<AnalyzedObject> objects = new List<AnalyzedObject>();
            AnalyzedObject[] tmpObj = new AnalyzedObject[currId + 1];
            findObjects(segImage, idMat, tmpObj);

            int count = 1;
            for (int i = 1; i <= currId; ++i)
            {
                if (tmpObj[i] == null) continue;
                if (tmpObj[i].size < 40) continue;

                tmpObj[i].id = count;
                objects.Add(tmpObj[i]);
                ++count;
            }

            //detectObj(segImage, objects);

            //sizeFilter(objects, origImage);
            blackOtherFilter(objects, origImage);
            //blackBoxFilter(objects, origImage);
            //decide(result);

            return objects;
        }
Exemple #2
0
        static Bitmap modify(Bitmap im, ColorRange redRange, ColorRange greenRange, int[,] idMat, ref int currId)
        {
            Bitmap res = new Bitmap(im.Width, im.Height);

            for (int i = 1; i < im.Width-1; ++i)
            {
                for (int j = 1; j < im.Height-1; ++j)
                {
                    if (redRange.inRange(im.GetPixel(i, j)))
                    //if (im.GetPixel(i, j).isRed())
                    {
                        res.SetPixel(i, j, Color.red);
                        int idToUse = setId(im, idMat, ref currId, i, j);
                        dilate(im, ref res, Color.red, i, j, 10, idMat, idToUse);
                    }
                    else if (greenRange.inRange(im.GetPixel(i, j)))
                    //else if (im.GetPixel(i, j).isGreenLight())
                    {
                        res.SetPixel(i, j, Color.green);
                        int idToUse = setId(im, idMat, ref currId, i, j);
                        dilate(im, ref res, Color.green, i, j, 10, idMat, idToUse);
                    }
                }
            }

            return res;
        }
Exemple #3
0
        static void dilate(Bitmap orig, ref Bitmap res, Color paint, int x, int y, int w, int[,] idMat, int currId)
        {
            Color pixel = orig.GetPixel(x, y);
            ColorRange range = new ColorRange();
            int delta = 30;
            range.redMin = (int) (Math.Max(pixel.R - delta, 0));
            range.redMax = (int)(Math.Min(pixel.R + delta, 255));
            range.greenMin = (int)(Math.Max(pixel.G - delta, 0));
            range.greenMax = (int)(Math.Min(pixel.G + delta, 255));
            range.blueMin = (int)(Math.Max(pixel.B - delta, 0));
            range.blueMax = (int)(Math.Min(pixel.B + delta, 255));

            int startX = Math.Max(0, x - w);
            int endX = Math.Min(orig.Width, x + w);
            int startY = Math.Max(0, y - w);
            int endY = Math.Min(orig.Height, y + w);

            for (int i = startX; i < endX; ++i)
            {
                for (int j = startY; j < endY; ++j)
                {
                    if (idMat[i, j] != 0) continue;
                    if (range.inRange(orig.GetPixel(i, j)))
                    {
                        res.SetPixel(i, j, paint);
                        idMat[i, j] = currId;
                    }
                }
            }
        }