Exemple #1
0
        private void FinalFrame_NewFrame(object sender, NewFrameEventArgs eventArgs)
        {
            //pictureBox1.Image = (Bitmap)eventArgs.Frame.Clone();

            video = (Bitmap)eventArgs.Frame.Clone();
            Bitmap video2 = (Bitmap)eventArgs.Frame.Clone();



            // this is mode 1
            if (mode == 1)
            {
                //
                ColorFiltering colorfilter = new ColorFiltering();
                colorfilter.Red   = new IntRange(Red, (int)numericUpDownRed.Value);
                colorfilter.Green = new IntRange(Green, (int)numericUpDownGreen.Value);
                colorfilter.Blue  = new IntRange(Blue, (int)numericUpDownBlue.Value);
                colorfilter.ApplyInPlace(video2);


                //BlobCounter
                BlobCounter blobcounter = new BlobCounter();
                blobcounter.MinHeight    = 20;
                blobcounter.MinWidth     = 20;
                blobcounter.ObjectsOrder = ObjectsOrder.Size;
                blobcounter.ProcessImage(video2);
                Rectangle[] rect = blobcounter.GetObjectsRectangles();
                if (rect.Length > 0)
                {
                    Rectangle target  = rect[0];
                    Graphics  graphic = Graphics.FromImage(video2); // To apply Grapghics on video2, that is, pictureBox2.

                    g = Graphics.FromImage(video2);

                    using (Pen pen = new Pen(Color.White, 3))
                    {
                        graphic.DrawRectangle(pen, target);

                        g.DrawString("Target Located !", new Font("Arial", 20), new SolidBrush(Color.White), new PointF(2, 2)); // to demonstrate 'recognition' of target.
                        g.Dispose();
                    }
                    graphic.Dispose();
                }
                pictureBox2.Image = video2;
            }
            pictureBox1.Image = video;
        }
Exemple #2
0
        public static Bitmap buscaRectangulos(Bitmap bitmap)
        {
            Blob[]    blobs;
            Rectangle area = new Rectangle(0, 0, bitmap.Width, bitmap.Height);
            // lock image
            BitmapData bitmapData = bitmap.LockBits(area, ImageLockMode.ReadWrite, bitmap.PixelFormat);
            // Filtramos la imagen para determinar hasts cuando de ROJO, VERDE Y AZUL se permitiráanalizar
            ColorFiltering colorFilter = new ColorFiltering();

            colorFilter.Red              = new IntRange(0, 104);
            colorFilter.Green            = new IntRange(0, 104);
            colorFilter.Blue             = new IntRange(0, 104);
            colorFilter.FillOutsideRange = false; colorFilter.ApplyInPlace(bitmapData);
            // Localizamos objetos en la imagen
            BlobCounter blobCounter = new BlobCounter();

            blobCounter.FilterBlobs = true;
            blobCounter.MinHeight   = 15;
            blobCounter.MinWidth    = 15;
            blobCounter.ProcessImage(bitmapData);
            blobs = blobCounter.GetObjectsInformation();
            bitmap.UnlockBits(bitmapData);
            // step 3 -check objects' type and highlight
            SimpleShapeChecker shapeChecker = new SimpleShapeChecker();
            Graphics           g            = Graphics.FromImage(bitmap);
            Pen yellowPen = new Pen(Color.Yellow, 2);

            // Para cada figuura encontrada
            for (int i = 0, n = blobs.Length; i < n; i++)
            {
                List <IntPoint> edgePoints = blobCounter.GetBlobsEdgePoints(blobs[i]);
                List <IntPoint> corners;
                // Cuadrado
                if (shapeChecker.IsQuadrilateral(edgePoints, out corners))
                {//Obtenemos cuantas esquinas tiene el shape
                    PolygonSubType subType = shapeChecker.CheckPolygonSubType(corners);
                    //Pintamos las áreas detectadas
                    areaInteres(g, corners);
                }
            }
            //yellowPen.Dispose();
            g.Dispose();
            // put new image to clipboard
            Clipboard.SetDataObject(bitmap);
            // and to picture box
            return(bitmap);
        }
        private void AnaliseMap(Bitmap mapImage)
        {
            mapData.Clear();
            ColorFiltering filter = new ColorFiltering();

            Trace.WriteLine("Analysing color map " + mapLocation + "...");

            foreach (String action in colorMap.Actions)
            {
                Color actionColor = colorMap.GetColorFor(action);

                filter.Red   = new IntRange(actionColor.R, actionColor.R);
                filter.Green = new IntRange(actionColor.G, actionColor.G);
                filter.Blue  = new IntRange(actionColor.B, actionColor.B);

                using (Bitmap colorFilteredMapImage = filter.Apply(mapImage))
                {
                    // Once we have isolated the action color on the map image
                    // we need to find the biggest rectangle left in the map (as there could be noise)

                    BlobCounter bc = new BlobCounter();
                    bc.ProcessImage(colorFilteredMapImage);
                    Rectangle[] rects = bc.GetObjectsRectangles();
                    if (rects.Count <Rectangle>() == 0)
                    {
                        Trace.WriteLine("Warning: No rectangles were found for " + actionColor.ToString());
                    }

                    Rectangle biggestRect = Rectangle.Empty;
                    foreach (Rectangle rect in rects)
                    {
                        // Compare areas
                        if (rect.Width * rect.Height > biggestRect.Width * biggestRect.Height)
                        {
                            biggestRect = rect;
                        }
                    }

                    // Did we find a rectangle?
                    if (!biggestRect.Equals(Rectangle.Empty) && (biggestRect.Width * biggestRect.Height > MIN_AREA_THRESHOLD))
                    {
                        Trace.WriteLine("Found rectangle for " + action + ": " + biggestRect.ToString());
                        mapData[action] = biggestRect;
                    }
                }
            }
        }
Exemple #4
0
        /// <summary>
        /// Process the filter on the specified image.
        /// </summary>
        ///
        /// <param name="image">Source image data.</param>
        ///
        protected override unsafe void ProcessFilter(UnmanagedImage image)
        {
            // use blob counter to build objects map and filter them
            blobCounter.ProcessImage(image);
            int[] objectsMap = blobCounter.ObjectLabels;

            // get image width and height
            int width  = image.Width;
            int height = image.Height;

            // do the job
            byte *ptr = (byte *)image.ImageData.ToPointer();

            if (image.PixelFormat == PixelFormat.Format8bppIndexed)
            {
                int offset = image.Stride - width;

                for (int y = 0, p = 0; y < height; y++)
                {
                    for (int x = 0; x < width; x++, ptr++, p++)
                    {
                        if (objectsMap[p] == 0)
                        {
                            *ptr = 0;
                        }
                    }
                    ptr += offset;
                }
            }
            else
            {
                int pixelSize = Bitmap.GetPixelFormatSize(image.PixelFormat) / 8;
                int offset    = image.Stride - width * pixelSize;

                for (int y = 0, p = 0; y < height; y++)
                {
                    for (int x = 0; x < width; x++, ptr += pixelSize, p++)
                    {
                        if (objectsMap[p] == 0)
                        {
                            ptr[RGB.R] = ptr[RGB.G] = ptr[RGB.B] = 0;
                        }
                    }
                    ptr += offset;
                }
            }
        }
        //=============================================================================================

        private Bitmap Tracker(NewFrameEventArgs frame, Color color, string colorDetectado)
        {
            Bitmap copia = frame.Frame.Clone() as Bitmap;

            Bitmap    temp    = new Bitmap(copia.Width, copia.Height);
            Graphics  g       = Graphics.FromImage(temp);
            int       left    = copia.Width / 4;
            int       top     = copia.Height / 4;
            int       width   = copia.Width / 2;
            int       height  = copia.Height / 2;
            Rectangle srcRect = new Rectangle(left, top, width, height);
            Rectangle dstRect = new Rectangle(0, 0, temp.Width, temp.Height);

            g.DrawImage(copia, dstRect, srcRect, GraphicsUnit.Pixel);

            EuclideanColorFiltering filtro = new EuclideanColorFiltering();

            filtro.CenterColor = new AForge.Imaging.RGB(color.R, color.G, color.B);
            filtro.Radius      = 100;
            filtro.ApplyInPlace(temp);

            BlobCounter blobcounter = new BlobCounter();

            blobcounter.MinWidth     = 5;
            blobcounter.MinHeight    = 5;
            blobcounter.FilterBlobs  = true;
            blobcounter.ObjectsOrder = ObjectsOrder.Size;
            blobcounter.ProcessImage(temp);
            Rectangle[] rects = blobcounter.GetObjectsRectangles();

            if (rects.Length > 0)
            {
                Rectangle objectRect = rects[0];
                if (objectRect.Width >= 300 && objectRect.Height >= 300)
                {
                    //Graphics g = Graphics.FromImage(temp);
                    using (Pen pen = new Pen(Color.FromArgb(0, 255, 250), 5))
                    {
                        g.DrawRectangle(pen, objectRect);
                        this.ProcesarColor(colorDetectado);
                    }
                    g.Dispose();
                }
            }
            return(temp);
        }
        private void GetPicBlobs()
        {
            // create filter
            ColorFiltering filter = new ColorFiltering();

            // set color ranges to keep
            filter.Red   = new IntRange(190, 255);
            filter.Green = new IntRange(200, 255);
            filter.Blue  = new IntRange(180, 255);
            // apply the filter
            filter.ApplyInPlace(GameZonePic);

            // locate objects using blob counter
            BlobCounter = new BlobCounter();
            BlobCounter.ProcessImage(GameZonePic);
            Blobs = BlobCounter.GetObjectsInformation();
        }
Exemple #7
0
        static void Main(string[] args)
        {
            try
            {
                string     path             = "D:\\HACK2015\\PICS";
                Bitmap     sourceImage      = AForge.Imaging.Image.FromFile(Path.Combine(path, "CAM1s.jpg"));
                Difference differenceFilter = new Difference(); //AForge.Imaging.Filters.Difference
                differenceFilter.OverlayImage = sourceImage;

                Bitmap sourceImg = AForge.Imaging.Image.FromFile(Path.Combine(path, "CAM1.jpg"));
                Bitmap tempImg   = sourceImg.Clone() as Bitmap;
                tempImg = differenceFilter.Apply(tempImg);
                FiltersSequence seq = new FiltersSequence();
                seq.Add(Grayscale.CommonAlgorithms.BT709);
                seq.Add(new OtsuThreshold());
                tempImg = seq.Apply(tempImg);
                tempImg.Save(Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "CAM1.jpg"));

                int objectCount = 0;

                BlobCounter blobCounter = new BlobCounter();
                blobCounter.FilterBlobs = true;
                blobCounter.MinHeight   = 60;
                blobCounter.MinWidth    = 40;
                blobCounter.ProcessImage(tempImg);
                Blob[] blobs = blobCounter.GetObjectsInformation();
                for (int i = 0; i < blobs.Length; i++)
                {
                    List <IntPoint>    edgePoints   = blobCounter.GetBlobsEdgePoints(blobs[i]);
                    List <IntPoint>    corners      = null;
                    SimpleShapeChecker shapeChecker = new SimpleShapeChecker();
                    if (shapeChecker.IsQuadrilateral(edgePoints, out corners))
                    {
                        ++objectCount;
                    }
                }

                Console.WriteLine("No. of BLOBS: " + blobCounter.GetObjectsInformation().Length);
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }

            Console.Read();
        }
        public static void EternitySplinterDetect()
        {
            try
            {
                Bitmap bmp    = Image.FromFile(PATH + @"\test.png") as Bitmap;
                Bitmap newBmp = LootSystem.EternitySplinterFilter(bmp);

                // locate objects using blob counter
                BlobCounter blobCounter = new BlobCounter()
                {
                    FilterBlobs = true,
                    MinWidth    = 2,
                    MinHeight   = 2,
                    MaxWidth    = 28,
                    MaxHeight   = 28
                };

                // Process input image
                blobCounter.ProcessImage(newBmp);
                // Get information about detected objects
                Blob[] blobs = blobCounter.GetObjectsInformation();

                // create Graphics object to draw on the image and a pen
                Graphics g       = Graphics.FromImage(newBmp);
                Pen      bluePen = new Pen(Color.Blue, 2);
                // check each object and draw circle around objects, which
                // are recognized as circles
                for (int i = 0, n = blobs.Length; i < n; i++)
                {
                    List <IntPoint> edgePoints = blobCounter.GetBlobsEdgePoints(blobs[i]);
                    List <IntPoint> corners    = PointsCloud.FindQuadrilateralCorners(edgePoints);

                    g.DrawPolygon(bluePen, Helper.AForgeToPointsArray(corners));
                }

                bluePen.Dispose();
                g.Dispose();


                newBmp.Save(PATH + @"\outtest.png");
            }
            catch (Exception ex)
            {
                Debug.WriteLine(ex.StackTrace);
            }
        }
Exemple #9
0
        private Bitmap Analyse()
        {
            // create filter
            EuclideanColorFiltering filter = new EuclideanColorFiltering();

            // set center colol and radius
            filter.CenterColor = new AForge.Imaging.RGB(Color.FromArgb(215, 30, 30));
            filter.Radius      = 100;
            // apply the filter
            filter.ApplyInPlace(image_analyse);


            BitmapData objectsData = image_analyse.LockBits(new Rectangle(0, 0, image_analyse.Width, image_analyse.Height), ImageLockMode.ReadOnly, image_analyse.PixelFormat);
            // grayscaling
            UnmanagedImage grayImage = new Grayscale(0.2125, 0.7154, 0.0721).Apply(new UnmanagedImage(objectsData)); //grayscaleFilter.Apply(new UnmanagedImage(objectsData));

            // unlock image
            image_analyse.UnlockBits(objectsData);

            BlobCounter blobCounter = new BlobCounter();

            blobCounter.MinWidth    = 5;
            blobCounter.MinHeight   = 5;
            blobCounter.FilterBlobs = true;
            blobCounter.ProcessImage(grayImage);
            Rectangle[] rects = blobCounter.GetObjectsRectangles();
            foreach (Rectangle recs in rects)
            {
                if (rects.Length > 0)
                {
                    foreach (Rectangle objectRect in rects)
                    {
                        Graphics g = Graphics.FromImage(image_analyse);

                        using (Pen pen = new Pen(Color.FromArgb(160, 255, 160), 5))
                        {
                            g.DrawRectangle(pen, objectRect);
                        }

                        g.Dispose();
                    }
                }
            }

            return(image_analyse);
        }
        private void vspCamaraColor_NewFrame(object sender, NewFrameEventArgs e)
        {
            Bitmap video = (Bitmap)e.Frame.Clone();
            // Creo un vídeo clon.
            Bitmap temp = video.Clone() as Bitmap;
            // Creo filtro de color en el vídeo de dialogo.
            EuclideanColorFiltering filter = new EuclideanColorFiltering();

            // Doy valores con el cuadro de dialogo.
            filter.CenterColor = new AForge.Imaging.RGB(color.R, color.G, color.B);
            filter.Radius      = 90;
            // Aplico el filtro.
            filter.ApplyInPlace(temp);

            // BlobCounter es una clase que se usa para distinguir objetos, colores, etc;
            BlobCounter objeto = new BlobCounter();

            objeto.MinWidth     = 5;                 // Anchura.
            objeto.MinHeight    = 5;                 // Altura.
            objeto.FilterBlobs  = true;              // Sombras.
            objeto.ObjectsOrder = ObjectsOrder.Size; // Tamaño.
            objeto.ProcessImage(temp);

            Rectangle[] rects = objeto.GetObjectsRectangles();
            foreach (Rectangle recs in rects)
            {
                if (rects.Length > 0)
                {
                    Rectangle objectRect = rects[0];
                    Graphics  grafico    = Graphics.FromImage(video);
                    using (Pen lapiz = new Pen(Color.FromArgb(160, 255, 160), 5))
                    {
                        grafico.DrawRectangle(lapiz, objectRect);
                    }
                    grafico.Dispose();
                }
            }
            if (rbOriginal.Checked)
            {
                pbCamaraColor.Image = video;
            }
            else
            {
                pbCamaraColor.Image = temp;
            }
        }
Exemple #11
0
        private BlobCounter DetectStructures(Bitmap bmp)
        {
            var sw = Stopwatch.StartNew();

            /* detect structures */
            BlobCounter blobCounter = new BlobCounter();

            blobCounter.ProcessImage(bmp);

            _token.ThrowIfCancellationRequested();

            sw.Stop();
            Debug.Print("Time for structure detection: " + sw.Elapsed);
            sw = null;

            return(blobCounter);
        }
Exemple #12
0
        private void processo2()
        {
            var img     = (Bitmap)pictureBox1.Image.Clone();
            var showImg = (Bitmap)pictureBox1.Image.Clone();

            //img = Grayscale.CommonAlgorithms.Y.Apply(img);
            img = new OtsuThreshold().Apply(img);
            img = new Erosion().Apply(img);
            img = new Invert().Apply(img);

            BlobCounter bc = new BlobCounter();

            bc.BackgroundThreshold = Color.Black;
            bc.ProcessImage(img);

            Rectangle  rect    = new Rectangle(0, 0, showImg.Width, showImg.Height);
            BitmapData bmpData = showImg.LockBits(rect, ImageLockMode.ReadWrite, showImg.PixelFormat);

            bc.GetObjectsRectangles().ToList().ForEach(i =>
            {
                Crop filter = new Crop(new Rectangle(i.X, i.Y, 230, 75));
                var img2    = (Bitmap)filter.Apply(img);
                img2        = new Invert().Apply(img2);
                var ocr     = new tessnet2.Tesseract();
                ocr.SetVariable("tesseract_char_whitelist", "ABCDEFGHIJKLMNOPQRSTUVXWYZ-1234567890");
                ocr.Init(@"tessdata", "eng", false);
                var result       = ocr.DoOCR(img2, Rectangle.Empty);
                StringBuilder sb = new StringBuilder();
                foreach (tessnet2.Word word in result)
                {
                    sb.Append(word.Text + " ");
                }
                //cliente para servidor
                string aux;
                aux = sb.ToString();
                if (aux.Length >= 6)
                {
                    placas.Add(aux);
                }
                pictureBox1.Image = img2;
            });

            showImg.UnlockBits(bmpData);

            pictureBox1.Image = img;
        }
        public DiffContainer GetDiffsAforge(Bitmap newFrame)
        {
            if (prevousFrame == null)
            {
                prevousFrame = UnmanagedImage.FromManagedImage(new Bitmap(@"d:\1.png"));
            }

            List <Bitmap>         bitmaps = new List <Bitmap>();
            ThresholdedDifference filter  = new ThresholdedDifference(20);

            filter.OverlayImage = newFrame;

            var res = filter.Apply(prevousFrame);

            bc.ProcessImage(res);

            Rectangle[] rects = bc.GetObjectsRectangles();



            foreach (Rectangle rect in rects)
            {
                if (rect.Width > 4 || rect.Height > 4)
                {
                    Crop crop = new Crop(rect);

                    bitmaps.Add(crop.Apply(prevousFrame).ToManagedImage());
                }
                //    Drawing.Rectangle(prevousFrame, rect, Color.Red);
            }


            //Parallel.ForEach(rects, rect =>
            //{
            //    if (rect.Width > 2 && rect.Height > 2)
            //    {
            //        Crop crop = new Crop(rect);

            //        bitmaps.Add(crop.Apply(prevousFrame));
            //    }
            //    //  Drawing.Rectangle(prevousFrame, rect, Color.Red);
            //}
            //);

            return(new DiffContainer());// { temp = prevousFrame.ToManagedImage() };
        }
        public void nesnebul(Bitmap image)
        {
            BlobCounter blobCounter = new BlobCounter();

            blobCounter.MinWidth     = 2;
            blobCounter.MinHeight    = 2;
            blobCounter.FilterBlobs  = true;
            blobCounter.ObjectsOrder = ObjectsOrder.Size;
            Grayscale griFiltre = new Grayscale(0.2125, 0.7154, 0.0721);
            Bitmap    griImage  = griFiltre.Apply(image);

            blobCounter.ProcessImage(griImage);
            Rectangle[] rects = blobCounter.GetObjectsRectangles();
            pictureBox2.Image = griImage;

            foreach (Rectangle recs in rects)
            {
                if (rects.Length > 0)
                {
                    Rectangle objectRect = rects[0];
                    Graphics  g          = pictureBox1.CreateGraphics();
                    using (Pen pen = new Pen(Color.FromArgb(252, 3, 26), 2))
                    {
                        g.DrawRectangle(pen, objectRect);
                    }
                    //Cizdirilen Dikdörtgenin Koordinatlari aliniyor.
                    int objectX = objectRect.X + (objectRect.Width / 2);
                    int objectY = objectRect.Y + (objectRect.Height / 2);
                    g.Dispose();
                    Control.CheckForIllegalCrossThreadCalls = false;


                    if (objectX < 100)
                    {
                        serialPort1.Write("a");
                    }
                    else if (objectX > 200)
                    {
                        serialPort1.Write("b");
                    }
                    else
                    {
                    }
                }
            }
        }
        private WriteableBitmap FindPlate(IEnumerable <Rect> rects, WriteableBitmap image)
        {
            WriteableBitmap bestCandidate = null;

            foreach (var rect in rects)
            {
                var croppedImage = image.Crop(rect);
                var edgeFilter   = new CannyEdgeDetector();
                var smoothFilter = new Median();
                var grayFilter   = new Grayscale(0.2125, 0.7154, 0.0721);
                var blobCounter  = new BlobCounter();
                var cutTop       = croppedImage.PixelHeight * 0.3;

                croppedImage = croppedImage.Crop(new Rect(0, cutTop, croppedImage.PixelWidth, croppedImage.PixelHeight));

                var bitmap    = (Bitmap)croppedImage;
                var grayImage = grayFilter.Apply(bitmap);

                bitmap = smoothFilter.Apply(grayImage);
                edgeFilter.ApplyInPlace(bitmap);
                blobCounter.ProcessImage(bitmap);

                var blobs         = blobCounter.GetObjectsInformation();
                var possibleChars = new List <Rectangle>();

                foreach (var blob in blobs)
                {
                    var objRectangle = blob.Rectangle;
                    var ratio        = (double)objRectangle.Height / (double)objRectangle.Width;

                    if (ratio >= 1.16d && ratio <= 6.3d)
                    {
                        possibleChars.Add(objRectangle);
                    }
                }

                if (possibleChars.Count == 0)
                {
                    continue;
                }

                bestCandidate = croppedImage;
            }

            return(bestCandidate);
        }
        public Bitmap DetectCircle(Bitmap image)
        {
            SimpleShapeChecker shapeChecker = new SimpleShapeChecker();
            // locate objects using blob counter
            BlobCounter blobCounter = new BlobCounter();

            blobCounter.ProcessImage(image);
            Blob[] blobs = blobCounter.GetObjectsInformation();
            // create Graphics object to draw on the image and a pen
            Graphics g      = Graphics.FromImage(image);
            Pen      redPen = new Pen(Color.Red, 2);

            // check each object and draw circle around objects, which
            // are recognized as circles
            for (int i = 0, n = blobs.Length; i < n; i++)
            {
                List <IntPoint> edgePoints = blobCounter.GetBlobsEdgePoints(blobs[i]);
                try
                {
                    shapeChecker.CheckShapeType(edgePoints);
                }
                catch (Exception)
                {
                    continue;
                }

                List <IntPoint> corners;
                AForge.Point    center;
                float           radius;
                if (shapeChecker.IsCircle(edgePoints, out center, out radius))
                {
                    g.DrawEllipse(redPen,
                                  (int)(center.X - radius),
                                  (int)(center.Y - radius),
                                  (int)(radius * 2),
                                  (int)(radius * 2));
                }
                else if (shapeChecker.IsQuadrilateral(edgePoints, out corners))
                {
                    g.DrawPolygon(redPen, ToPointsArray(corners));
                }
            }
            redPen.Dispose();
            g.Dispose();
            return(image);
        }
        // 如果活动返回值,则从 CodeActivity<TResult>
        // 派生并从 Execute 方法返回该值。
        protected override void Execute(CodeActivityContext context)
        {
            // create an instance of blob counter algorithm
            BlobCounterBase bc = new BlobCounter();

            // set filtering options
            bc.FilterBlobs = true;
            bc.MinWidth    = context.GetValue(最小宽度);
            bc.MinHeight   = context.GetValue(最小高度);
            // set ordering options
            bc.ObjectsOrder = ObjectsOrder.Size;
            // process binary image
            bc.ProcessImage(context.GetValue(处理目标));
            var blobs = bc.GetObjectsInformation();

            context.SetValue(输出目标, blobs);
        }
        //*****************************************

        public void nesnebul(Bitmap image)
        {
            BlobCounter blobCounter = new BlobCounter();

            blobCounter.MinWidth     = 2;
            blobCounter.MinHeight    = 2;
            blobCounter.FilterBlobs  = true;
            blobCounter.ObjectsOrder = ObjectsOrder.Size;
            Grayscale griFiltre = new Grayscale(0.2125, 0.7154, 0.0721);
            Bitmap    griImage  = griFiltre.Apply(image);

            blobCounter.ProcessImage(griImage);
            Rectangle[] rects = blobCounter.GetObjectsRectangles();
            pictureBox2.Image = griImage;
            foreach (Rectangle recs in rects)
            {
                if (rects.Length > 0)
                {
                    Rectangle objectRect = rects[0];
                    //Graphics g = Graphics.FromImage(image);
                    Graphics g = pictureBox1.CreateGraphics();
                    using (Pen pen = new Pen(Color.FromArgb(252, 3, 26), 2))
                    {
                        g.DrawRectangle(pen, objectRect);

                        //Cizdirilen Dikdörtgenin Koordinatlari aliniyor.
                        int objectX = objectRect.X + (objectRect.Width / 2);
                        int objectY = objectRect.Y + (objectRect.Height / 2);
                        g.DrawString(objectX.ToString() + "X" + objectY.ToString(), new Font("Arial", 12), Brushes.Red, new System.Drawing.Point(250, 1));

                        if (serialok == true)
                        {
                            int second = 0;
                            int offset = 300;
                            second    = offset - Math.Abs(objectX);
                            map       = (float)0.85 * second;
                            buffer[0] = (byte)Math.Abs((int)map);
                            serialPort1.Write(buffer, 0, 1);
                        }
                    }

                    g.Dispose();
                }
            }
        }
Exemple #19
0
        //Metodo che verifica se l'immagine è una pagina del libro oppure no
        public Boolean VerificaLato(Bitmap immagine)
        {
            Blob[]           blobs1;
            List <Rectangle> presenzaRettangoli = new List <Rectangle>();
            List <Rectangle> verificaRettangoli = new List <Rectangle>();

            // Crea un istanza di un BlobCounter
            BlobCounterBase bc1 = new BlobCounter();

            // Un set di filtri
            bc1.FilterBlobs = true;
            bc1.MinWidth    = 5;
            bc1.MinHeight   = 5;
            Bitmap verifica = new Bitmap(immagine);

            // Processo l'immagine
            bc1.ProcessImage(verifica);
            blobs1 = bc1.GetObjects(verifica, false);

            // processo i blob
            foreach (Blob blob in blobs1)
            {
                verificaRettangoli.Add(blob.Rectangle);
            }
            //Verifico se nell'immagine c'è un rettangolo "indicatore"
            foreach (Rectangle rect in verificaRettangoli)
            {
                if (rect.Height < 500 / 5 && rect.Width < 500 / 2)
                {
                    presenzaRettangoli.Add(rect);
                }
            }
            //Se è presente n rettangolo indicatore vuol dire che l'immagine è una pagina del libro e restituisce
            //vero altrimenti falso
            if (presenzaRettangoli.Count == 0)
            {
                thisSide = false;
            }
            else
            {
                thisSide = true;
            }

            return(thisSide);
        }
Exemple #20
0
        private void FinalFrame_NewFrame(object sender, NewFrameEventArgs eventArgs)
        {
            video = (Bitmap)eventArgs.Frame.Clone();
            Bitmap video2 = (Bitmap)eventArgs.Frame.Clone();

            switch (mode)
            {
            case 2:
                g = Graphics.FromImage(video2);
                g.DrawString(degisken.ToString(), new Font("Arial", 20), Brushes.Cyan, new PointF(2, 2));
                g.Dispose();

                break;

            case 1:

                ColorFiltering colorFilter = new ColorFiltering();
                colorFilter.Red   = new IntRange(red, (int)numericUpDownRed.Value);
                colorFilter.Green = new IntRange(green, (int)numericUpDownGreen.Value);
                colorFilter.Blue  = new IntRange(blue, (int)numericUpDownBlue.Value);
                colorFilter.ApplyInPlace(video2);

                BlobCounter blobCounter = new BlobCounter();
                blobCounter.MinHeight    = 20;
                blobCounter.MinWidth     = 20;
                blobCounter.ObjectsOrder = ObjectsOrder.Size;
                blobCounter.ProcessImage(video2);
                Rectangle[] rect = blobCounter.GetObjectsRectangles();
                if (rect.Length > 0)
                {
                    Rectangle objectt = rect[0];
                    Graphics  graph   = Graphics.FromImage(video2);
                    using (Pen pen = new Pen(Color.White, 3))
                    {
                        graph.DrawRectangle(pen, objectt);
                    }
                    graph.Dispose();
                }
                pictureBox2.Image = video2;

                break;
            }
            pictureBox1.Image = video;
            //pictureBox1.Image = (Bitmap)eventArgs.Frame.Clone();
        }
Exemple #21
0
        public Rectangle mostInterestingArea(System.Drawing.Image img)
        {
            Bitmap bitmap = new Bitmap(img);

            BlobCounter bc = new BlobCounter();

            bc.ProcessImage(bitmap);

            Rectangle[] objs = bc.GetObjectsRectangles();

            Point center = getAverageRectangleCenter(objs);

            Rectangle rect = getBoundContainingSDCenters(1, objs, center);

            bitmap.Dispose();

            return(rect);
        }
Exemple #22
0
        private void kullanilacakcihaz_NewFrame(object sender, NewFrameEventArgs eventArgs)
        {
            video = (Bitmap)eventArgs.Frame.Clone();
            Bitmap video2 = (Bitmap)eventArgs.Frame.Clone();

            switch (mode)
            {
            case 1:
            {
                //
                ColorFiltering colorfiller = new ColorFiltering();
                colorfiller.Red   = new IntRange(Red, (int)numericUpDown1.Value);
                colorfiller.Green = new IntRange(Green, (int)numericUpDown2.Value);
                colorfiller.Blue  = new IntRange(Blue, (int)numericUpDown3.Value);
                colorfiller.ApplyInPlace(video2);
                //
                BlobCounter blobcounter = new BlobCounter();
                blobcounter.MinHeight    = 20;
                blobcounter.MinWidth     = 20;
                blobcounter.ObjectsOrder = ObjectsOrder.Size;
                blobcounter.ProcessImage(video2);
                Rectangle[] rect = blobcounter.GetObjectsRectangles();
                if (rect.Length > 0)
                {
                    Rectangle objec   = rect[0];
                    Graphics  graphic = Graphics.FromImage(video2);
                    using (Pen pen = new Pen(Color.White, 3))
                    {
                        graphic.DrawRectangle(pen, objec);
                        g = Graphics.FromImage(video);
                        g.DrawRectangle(pen, objec);
                        objectX = objec.X + (objec.Width / 2);
                        objectY = objec.Y + (objec.Height / 2);
                        g.DrawString(objectX.ToString() + "X" + objectY.ToString(), new Font("Arial", 12), Brushes.Red, new System.Drawing.Point(1, 1));
                        g.Dispose();
                    }
                    graphic.Dispose();
                }
            }
            break;
            }

            pictureBox1.Image = video;
        }
Exemple #23
0
        public Bitmap extractBlobs(Bitmap originalImage, Bitmap alteredImage)
        {
            extractor.ProcessImage(alteredImage);
            foreach (Blob blob in extractor.GetObjectsInformation())
            {
                List <IntPoint> edgePoints = extractor.GetBlobsEdgePoints(blob);
                List <IntPoint> corners    = PointsCloud.FindQuadrilateralCorners(edgePoints);

                if (draw2D)
                {
                    using (var graphics = Graphics.FromImage(originalImage))
                    {
                        if (corners.Count == 4)
                        {
                            graphics.DrawLine(pen, corners[0].X, corners[0].Y, corners[1].X, corners[1].Y);
                            graphics.DrawLine(pen, corners[1].X, corners[1].Y, corners[2].X, corners[2].Y);
                            graphics.DrawLine(pen, corners[2].X, corners[2].Y, corners[3].X, corners[3].Y);
                            graphics.DrawLine(pen, corners[3].X, corners[3].Y, corners[0].X, corners[0].Y);
                            if (draw3D)
                            {
                                //Reken de afstand tussen de eerste twee hoekpunten uit
                                double Distance = Math.Sqrt((corners[3].X - corners[0].X) * (corners[3].X - corners[0].X) + (corners[3].Y - corners[0].Y) * (corners[3].Y - corners[0].Y));

                                //Convert naar integer
                                int IDistance = Convert.ToInt32(Distance);

                                //Teken alle verticale lijnen van de kubus
                                graphics.DrawLine(pen, corners[0].X, corners[0].Y, corners[0].X, corners[0].Y - IDistance);
                                graphics.DrawLine(pen, corners[1].X, corners[1].Y, corners[1].X, corners[1].Y - IDistance);
                                graphics.DrawLine(pen, corners[2].X, corners[2].Y, corners[2].X, corners[2].Y - IDistance);
                                graphics.DrawLine(pen, corners[3].X, corners[3].Y, corners[3].X, corners[3].Y - IDistance);

                                //Teken het bovenste vierkant van de kubub
                                graphics.DrawLine(pen, corners[0].X, corners[0].Y - IDistance, corners[1].X, corners[1].Y - IDistance);
                                graphics.DrawLine(pen, corners[1].X, corners[1].Y - IDistance, corners[2].X, corners[2].Y - IDistance);
                                graphics.DrawLine(pen, corners[2].X, corners[2].Y - IDistance, corners[3].X, corners[3].Y - IDistance);
                                graphics.DrawLine(pen, corners[3].X, corners[3].Y - IDistance, corners[0].X, corners[0].Y - IDistance);
                            }
                        }
                    }
                }
            }
            return(originalImage);
        }
Exemple #24
0
        /// <summary>
        /// Processes the specified SRC image.
        /// </summary>
        /// <param name="srcImage">The SRC image.</param>
        /// <remarks></remarks>
        public void Process(Bitmap srcImage)
        {
            if (srcImage == null || srcImage.Width < 10 || srcImage.Height < 10)
            {
                return;
            }

            resize.NewWidth  = srcImage.Width / Scale;
            resize.NewHeight = srcImage.Height / Scale;

            FilteredBoard = resize.Apply(srcImage);

            if (Enhance)
            {
                ImageFilters.FlattenLighting(FilteredBoard);
            }

            ImageFilters.HSLFilter(FilteredBoard, targetHue, targetSat, targetBri, hueTol, satTol, briTol);

            median.ApplyInPlace(FilteredBoard);
            GaussianBlur blr = new GaussianBlur(2, 2);

            blr.ApplyInPlace(FilteredBoard);

            TileBlobs.Clear();

            try
            {
                BlobCounter.ProcessImage(FilteredBoard);

                Blob[] blobs = BlobCounter.GetObjectsInformation();
                TileBlobs.Clear();

                foreach (Blob b in blobs)
                {
                    if (b.Area < 10)
                    {
                        continue;
                    }
                    TileBlobs.Add(b);
                }
            }
            catch { }
        }
Exemple #25
0
        /// <summary>
        /// APPLY FILTER TO IMAGE
        /// </summary>
        /// <param name="bgSelect">TRUE, SET BACKGROUND FILTER. FALSE, SET COLONY FILTER</param>
        /// <returns></returns>
        private List <ColonyModel> ProcessIMG(bool bgSelect)
        {
            if (bgSelect)
            {
                // SET FILTER WITH BG COLOR
                FilterImgBgSelect();
            }
            else
            {
                // SET FILTER WITH COLONY COLOR
                FilterImgColonySelect();
            }

            // INIT BLOB COUNTER
            SetBlobCounter();

            blobCounter.ProcessImage(bitmapData);
            BlobCounterToList(blobCounter.GetObjectsInformation());
            bitmap.UnlockBits(bitmapData);

            // SET DISTORTION
            shapeChecker.MinAcceptableDistortion = 0.2f;
            shapeChecker.RelativeDistortionLimit = 0.2f;

            var cellLijst = new List <ColonyModel>();

            // DRAW CIRCLE AROUND BLOB
            for (int i = 0, n = blobList.Count; i < n; i++)
            {
                List <IntPoint> edgePoints = blobCounter.GetBlobsEdgePoints(blobList[i]);

                AForge.Point center;
                float        radius;

                // IF SHAPE IS CIRCLE
                if (shapeChecker.IsCircle(edgePoints, out center, out radius))
                {
                    // ADD COLONY TO LIST
                    cellLijst.Add(new ColonyModel(center, radius));
                }
            }
            this.blobList.Clear();
            return(cellLijst);
        }
        //ilk önce bu butona tıklanmalı
        private void button1_Click(object sender, EventArgs e)
        {
            sayac       = 1;
            kaynakResim = (Bitmap)System.Drawing.Image.FromFile("sample2.jpg");

            //Otsu Threshold uygulandı
            OtsuThreshold otsuFiltre = new OtsuThreshold();

            //resim eğer renkliyse önce griye çeviriyor sonra filtre uyguluyor
            //resim zaten griyse direk filtreyi uyguluyor
            siyahBeyazResim = otsuFiltre.Apply(kaynakResim.PixelFormat != PixelFormat.Format8bppIndexed ? Grayscale.CommonAlgorithms.BT709.Apply(kaynakResim) : kaynakResim);

            BlobCounterBase bc = new BlobCounter();

            bc.FilterBlobs = true;
            bc.MinHeight   = 5;
            bc.MinWidth    = 5;

            bc.ProcessImage(siyahBeyazResim);
            blobs             = bc.GetObjectsInformation();
            label2.Text       = "Toplam Şekil Sayısı = " + bc.ObjectsCount.ToString();
            toplamSekilSayisi = bc.ObjectsCount;

            /*aşağıdaki for döngüsü yerine buradaki koşul ifadesi kullanısaydı eğer,
             * resimdeki en büyük şekil bulunacaktı.
             * if (blobs.Length > 0)
             * {
             *  bc.ExtractBlobsImage(siyahBeyazResim, blobs[0], true);
             * }
             * Bitmap xxx = blobs[0].Image.ToManagedImage();
             */

            //bütün şekiller bulunuyor
            for (int i = 0, n = blobs.Length; i < n; i++)
            {
                if (blobs.Length > 0)
                {
                    bc.ExtractBlobsImage(siyahBeyazResim, blobs[i], true);
                    pictureBox1.Image = siyahBeyazResim;
                    pictureBox1.Refresh();
                }
            }
        }
        public bool BallTracking(System.Drawing.Image newFrame)
        {
            if (newFrame == null)
            {
                return(false);
            }

            Bitmap cleanImage    = (Bitmap)newFrame.Clone();
            Bitmap trackingImage = (Bitmap)newFrame.Clone();

            _hslFilter.ApplyInPlace(trackingImage);
            //_jitterFilter.ApplyInPlace(trackingImage);
            //_contrastFilter.ApplyInPlace(trackingImage);
            _blobFilter.ApplyInPlace(trackingImage);

            _blobCounter.ProcessImage(trackingImage);

            _rectangles = _blobCounter.GetObjectsRectangles();

            if (DrawBoxes)
            {
                using (Pen pen = new Pen(Color.Red, 2))
                    using (Graphics t = Graphics.FromImage(trackingImage))
                        using (Graphics c = Graphics.FromImage(cleanImage))
                        {
                            foreach (Rectangle rect in _rectangles)
                            {
                                t.DrawRectangle(pen, rect);
                                c.DrawRectangle(pen, rect);
                            }
                        }
            }

            _colorImage    = cleanImage;
            _trackingImage = trackingImage;

            if (NewCameraImage != null)
            {
                NewCameraImage(this, new EventArgs());
            }

            return(true);
        }
Exemple #28
0
        //Generate Markers 1 End


        //Depth camera feed generator END Sensor 1



        //Blob Counter Start

        public Blob[] blobcounter(BitmapSource bsource)
        {
            Bitmap b = BitmapFromSource(bsource);

            BlobCounter BCounter = new BlobCounter();

            ColorFiltering FilterObjects = new ColorFiltering();

            BCounter.FilterBlobs = true;
            BCounter.MinWidth    = 50;
            BCounter.MinHeight   = 150;

            BCounter.ProcessImage(b);


            Blob[] detectedblobs = BCounter.GetObjectsInformation();

            return(detectedblobs);
        }
Exemple #29
0
        public void GetDisplayCornerfrombmp(Bitmap processbmp, out List <IntPoint> displaycornerPoints)
        {
            BlobCounter bbc = new BlobCounter();

            bbc.FilterBlobs = true;
            bbc.MinHeight   = 5;
            bbc.MinWidth    = 5;

            bbc.ProcessImage(processbmp);

            Blob[]             blobs        = bbc.GetObjectsInformation();
            SimpleShapeChecker shapeChecker = new SimpleShapeChecker();

            foreach (var blob in blobs)
            {
                List <IntPoint> edgePoints = bbc.GetBlobsEdgePoints(blob);
                List <IntPoint> cornerPoints;

                // use the shape checker to extract the corner points
                if (shapeChecker.IsQuadrilateral(edgePoints, out cornerPoints))
                {
                    // only do things if the corners from a rectangle
                    if (shapeChecker.CheckPolygonSubType(cornerPoints) == PolygonSubType.Rectangle)
                    {
                        flagPoints = cornerPoints;
                        continue;
                    }
                    else
                    {
                        flagPoints = null;
                        continue;
                    }
                }
            }

            if (flagPoints == null)
            {
                throw new Exception();
            }
            //  MessageBox.Show("Cannot Find the Display");

            displaycornerPoints = flagPoints;
        }
Exemple #30
0
        private void button6_Click(object sender, EventArgs e)
        {
            Bitmap image = (Bitmap)pictureBox5.Image;
            // create instance of blob counter
            BlobCounter blobCounter = new BlobCounter();

            blobCounter.FilterBlobs = true;
            blobCounter.MinHeight   = 5;
            blobCounter.MinWidth    = 5;
            blobCounter.MaxWidth    = 350;
            blobCounter.MaxHeight   = 350;
            //process the dilated image
            blobCounter.ProcessImage(image);
            // get info about detected objects
            Blob[] blobs = blobCounter.GetObjectsInformation();

            // create a graphics object to draw on the image and a pen
            Graphics g      = Graphics.FromImage(image);
            Pen      Redpen = new Pen(Color.Red, 4);

            SimpleShapeChecker shapechecker = new SimpleShapeChecker();

            //check in image and draw around the object found as rectangle
            for (int i = 0, n = blobs.Length; i < n; i++)
            {
                List <IntPoint> edgepoints = blobCounter.GetBlobsEdgePoints(blobs[i]);
                List <IntPoint> cornerpoints;
                Bitmap          bmpCrop;
                List <Point>    Points = new List <Point>();
                if (shapechecker.IsQuadrilateral(edgepoints, out cornerpoints))
                {
                    if (shapechecker.CheckPolygonSubType(cornerpoints) == PolygonSubType.Rectangle)
                    {
                        g.DrawPolygon(Redpen, cornerpoints.Select(p => new System.Drawing.Point(p.X, p.Y)).ToArray());
                    }
                }
            }

            Redpen.Dispose();
            g.Dispose();

            pictureBox6.Image = image;
        }
        /// <summary>
        /// Process the filter on the specified image.
        /// </summary>
        /// 
        /// <param name="image">Source image data.</param>
        ///
        protected override unsafe void ProcessFilter( UnmanagedImage image )
        {
            int width  = image.Width;
            int height = image.Height;

            // 1 - invert the source image
            Invert invertFilter = new Invert( );
            UnmanagedImage invertedImage = invertFilter.Apply( image );

            // 2 - use blob counter to find holes (they are white objects now on the inverted image)
            BlobCounter blobCounter = new BlobCounter( );
            blobCounter.ProcessImage( invertedImage );
            Blob[] blobs = blobCounter.GetObjectsInformation( );

            // 3 - check all blobs and determine which should be filtered
            byte[] newObjectColors = new byte[blobs.Length + 1];
            newObjectColors[0] = 255; // don't touch the objects, which have 0 ID

            for ( int i = 0, n = blobs.Length; i < n; i++ )
            {
                Blob blob = blobs[i];

                if ( ( blob.Rectangle.Left == 0 ) || ( blob.Rectangle.Top == 0 ) ||
                     ( blob.Rectangle.Right == width ) || ( blob.Rectangle.Bottom == height ) )
                {
                    newObjectColors[blob.ID] = 0;
                }
                else
                {
                    if ( ( ( coupledSizeFiltering ) && ( blob.Rectangle.Width <= maxHoleWidth ) && ( blob.Rectangle.Height <= maxHoleHeight ) ) |
                         ( ( !coupledSizeFiltering ) && ( ( blob.Rectangle.Width <= maxHoleWidth ) || ( blob.Rectangle.Height <= maxHoleHeight ) ) ) )
                    {
                        newObjectColors[blob.ID] = 255;
                    }
                    else
                    {
                        newObjectColors[blob.ID] = 0;
                    }
                }
            }

            // 4 - process the source image image and fill holes
            byte* ptr = (byte*) image.ImageData.ToPointer( );
            int offset = image.Stride - width;

            int[] objectLabels = blobCounter.ObjectLabels;

            for ( int y = 0, i = 0; y < height; y++ )
            {
                for ( int x = 0; x < width; x++, i++, ptr++ )
                {
                    *ptr = newObjectColors[objectLabels[i]];
                }
                ptr += offset;
            }
        }