Exemple #1
0
 private void button1_Click(object sender, EventArgs e)
 {
     if (comboBox1.SelectedIndex == 0)
     {
         textBox1.Text = "";
         ConnectedComponentsLabeling filterCCL = new ConnectedComponentsLabeling();
         Bitmap resultCCL = filterCCL.Apply(imageCCL);
         pictureBox2.Image = resultCCL;
         int    count = filterCCL.ObjectCount;
         String info  = "Mode \t\t : CCL \r\n Jumlah Object \t : " + count;
         textBox1.Text = info;
     }
     if (comboBox1.SelectedIndex == 1)
     {
         textBox1.Text = "";
         convexHullBlov(imageCCL);
     }
     if (comboBox1.SelectedIndex == 2)
     {
         textBox1.Text = "";
         houghTranformLine666(imageHough);
     }
     if (comboBox1.SelectedIndex == 3)
     {
         textBox1.Text = "";
         houghCircle(imageHough);
     }
 }
Exemple #2
0
        private void connectedCompenetAnalysToolStripMenuItem_Click(object sender, EventArgs e)
        {
            // create filter
            ConnectedComponentsLabeling filter = new ConnectedComponentsLabeling();

            // apply the filter
            ApplyFilter(filter);
        }
Exemple #3
0
        public mFigureUnique()
        {
            BitmapType = BitmapTypes.Rgb24bpp;

            Effect = new ConnectedComponentsLabeling();

            filter = Effect;
        }
Exemple #4
0
        private void colorize_Click(object sender, EventArgs e)
        {
            //filtre oluşturuldu
            ConnectedComponentsLabeling filtre = new ConnectedComponentsLabeling();
            Bitmap boyaliResim = filtre.Apply((Bitmap)pictureBox1.Image);

            pictureBox1.Image = boyaliResim;
        }
Exemple #5
0
        private void button2_Click(object sender, EventArgs e)
        {
            gbr = (Bitmap)pictureBox1.Image;
            ConnectedComponentsLabeling filter = new ConnectedComponentsLabeling();
            Bitmap final = filter.Apply(gbr);

            pictureBox2.Image = final;
            MessageBox.Show(filter.ObjectCount.ToString() + " Buah Objek",
                            "Connected Component Labeling");
        }
Exemple #6
0
        public mAnalyzeBlobs()
        {
            BitmapType = 0;

            Effect = new ConnectedComponentsLabeling();


            Sequence.Clear();
            Sequence.Add(Effect);
        }
Exemple #7
0
        private void connectedComponentsLabeling()
        // Connected components labelling
        {
            // Declare variables
            Bitmap bitmap = new Bitmap(pictureBox1.Image);
            // create filter
            ConnectedComponentsLabeling filter = new ConnectedComponentsLabeling();
            // apply the filter
            Bitmap ccLImage = filter.Apply(bitmap);
            // check objects count
            int objectCount = filter.ObjectCount;

            pictureBox1.Image = ccLImage;
        }
        public List <Bitmap> PreHandle2(Bitmap original)
        {
            var preOcr = new FiltersSequence(
                Grayscale.CommonAlgorithms.RMY,
                new BradleyLocalThresholding());

            var grayscale = preOcr.Apply(original);

            GrayImg.Source = Bitmap2BitmapImageSource(grayscale);

            var filter = new BlobsFiltering
            {
                CoupledSizeFiltering = true,
                MinHeight            = 6,
                MinWidth             = 6
            };
            var filterImage = filter.Apply(new Invert().Apply(grayscale));

            ThresholdImg.Source = Bitmap2BitmapImageSource(filterImage);

            var invertImg = new Invert().Apply(filterImage);

            DoneImg.Source = Bitmap2BitmapImageSource(invertImg);

            var labels = new ConnectedComponentsLabeling();

            labels.BlobCounter.ObjectsOrder = ObjectsOrder.XY;
            labels.Apply(filterImage);

            var bitmaps = new List <Bitmap>();

            for (int i = 0; i < labels.ObjectCount; i++)
            {
                var candidate = labels.BlobCounter.GetObjectsInformation()[i];
                var edgePoint = labels.BlobCounter.GetBlobsEdgePoints(candidate);
                labels.BlobCounter.ExtractBlobsImage(filterImage, candidate, false);
                if (candidate.Image != null)
                {
                    var charcter   = new Invert().Apply(candidate.Image.ToManagedImage());
                    var resizer    = new ResizeBilinear(10, 10);
                    var finalImage = resizer.Apply(charcter);
                    bitmaps.Add(finalImage);

                    TesseractEngine a = new TesseractEngine(@"./tessdata", "eng", EngineMode.TesseractAndCube);
                    Page            p = a.Process(finalImage);
                    TBlock.Text += p.GetText();
                }
            }
            return(bitmaps);
        }
Exemple #9
0
        public mFigureUnique(wDomain WidthRange, wDomain HeightRange)
        {
            Width  = WidthRange;
            Height = HeightRange;

            BitmapType = BitmapTypes.Rgb24bpp;

            Effect           = new ConnectedComponentsLabeling();
            Effect.MinWidth  = (int)Width.T0;
            Effect.MaxWidth  = (int)Width.T1;
            Effect.MinHeight = (int)Height.T0;
            Effect.MaxHeight = (int)Height.T1;

            filter = Effect;
        }
Exemple #10
0
        public mAnalyzeBlobs(Bitmap BaseBitmap, wDomain WidthRange, wDomain HeightRange)
        {
            Width  = WidthRange;
            Height = HeightRange;

            BitmapType = 0;

            Effect           = new ConnectedComponentsLabeling();
            Effect.MinWidth  = (int)Width.T0;
            Effect.MaxWidth  = (int)Width.T1;
            Effect.MinHeight = (int)Height.T0;
            Effect.MaxHeight = (int)Height.T1;

            Effect.Apply(BaseBitmap);
            Effect.BlobCounter.ProcessImage(BaseBitmap);

            Sequence.Clear();
            Sequence.Add(Effect);
        }
        static void Main(string[] args)
        {
            using (Bitmap bitmap = new Bitmap("./Images/check1.jpg"))
            {
                using (Bitmap clone = bitmap.Clone() as Bitmap)
                {
                    Console.WriteLine("width = " + clone.Width + ", height = " + clone.Height);

                    FiltersSequence seq = new FiltersSequence();

                    //添加灰度滤镜
                    seq.Add(Grayscale.CommonAlgorithms.BT709);

                    Median median = new Median(5);
                    seq.Add(median);
                    seq.Add(new AdaptiveSmoothing());
                    //添加二值化过滤器

                    seq.Add(new OtsuThreshold());
                    Bitmap result = seq.Apply(bitmap);

                    ConnectedComponentsLabeling connectedFilter = new ConnectedComponentsLabeling();
                    connectedFilter.MinWidth  = 50;
                    connectedFilter.MinHeight = 50;

                    result = connectedFilter.Apply(result);
                    result.Save("1.jpg");
                    Blob[] blobs2 = connectedFilter.BlobCounter.GetObjectsInformation().Where(r => r.Area > 1000).ToArray();
                    Console.WriteLine(blobs2.Length);


                    BlobCounter extractor = new BlobCounter();
                    extractor.FilterBlobs = true;

                    extractor.MinWidth  = 50;
                    extractor.MinHeight = 50;
                    extractor.ProcessImage(result);
                    Blob[] blobs = extractor.GetObjectsInformation();
                    Console.WriteLine(blobs.Length);
                }
            }
        }
Exemple #12
0
        public mFigureUnique(wDomain WidthRange, wDomain HeightRange, bool coupled, bool blob)
        {
            Width   = WidthRange;
            Height  = HeightRange;
            Coupled = coupled;
            Blob    = blob;

            BitmapType = BitmapTypes.Rgb24bpp;

            Effect           = new ConnectedComponentsLabeling();
            Effect.MinWidth  = (int)Width.T0;
            Effect.MaxWidth  = (int)Width.T1;
            Effect.MinHeight = (int)Height.T0;
            Effect.MaxHeight = (int)Height.T1;

            Effect.CoupledSizeFiltering = Coupled;
            Effect.FilterBlobs          = Blob;

            filter = Effect;
        }
Exemple #13
0
        public string GetCode(Bitmap bitmap, Bitmap rbitmap)
        {
            var      bnew = new Bitmap(bitmap.Width, bitmap.Height, PixelFormat.Format24bppRgb);
            Graphics g    = Graphics.FromImage(bnew);

            g.DrawImage(bitmap, 0, 0);
            g.Dispose();

            //灰度化
            bnew = Grayscale.CommonAlgorithms.RMY.Apply(bnew);
            //二值化
            bnew = new Threshold(50).Apply(bnew);
            //反色
            bnew = new Invert().Apply(bnew);
            //去噪点
            //bnew = new BlobsFiltering(3, 3, bnew.Width, bnew.Height).Apply(bnew);
            //连接区匹配
            ConnectedComponentsLabeling f = new ConnectedComponentsLabeling();

            f.Apply(bnew);
            //滤噪点
            Rectangle[] regs  = f.BlobCounter.GetObjectsRectangles();
            Rectangle[] regs2 = regs.OrderByDescending(m => m.Size.Height).Take(4).ToArray();
            _cmap = new List <Bitmap>();
            foreach (Rectangle reg in regs2)
            {
                Bitmap rb = bitmap.Clone(reg, PixelFormat.Format24bppRgb);
                _code += Match(rb);
                _cmap.Add(rb);
            }

            //
            Graphics g2 = Graphics.FromImage(rbitmap);

            g2.DrawImage(bnew, 0, 0);
            g2.DrawRectangles(new Pen(Color.Red), regs2);
            g2.Dispose();

            return(_code);
        }
Exemple #14
0
        private void coToolStripMenuItem_Click(object sender, EventArgs e)
        {
            ConnectedComponentsLabeling filter = new ConnectedComponentsLabeling();

            pictureBox2.Image = filter.Apply((Bitmap)pictureBox2.Image);
        }
Exemple #15
0
        private void button2_Click(object sender, EventArgs e)
        {
            Bitmap bmp = new Bitmap(pictureBox1.Image);
            Bitmap bmpsobe;
            Bitmap bmpmedian;
            Bitmap otsu;

            if (pictureBox1.Image == null)
            {
                MessageBox.Show("Lütfen önce bir resim Seçin");
            }
            else
            {
                progressBar1.Visible = true;
                int   i, j;
                Color ort;//Color sınıfından bir renk nesne tanımlıyoruz.

                //int r,g,b;
                progressBar1.Maximum = bmp.Width * bmp.Height; //İşlem çubuğunun maksimim olduğu yer for döngüsünün sonundaki piksel değerine erişmemiz durumundadır.
                for (i = 0; i <= bmp.Width - 1; i++)           //dikey olarak görüntümüzü tarıyoruz.
                {
                    for (j = 0; j <= bmp.Height - 1; j++)      //yatay olarak görüntümüzü tarıyoruz.
                    {
                        ort = bmp.GetPixel(i, j);
                        ort = Color.FromArgb((byte)((ort.R + ort.G + ort.B) / 3), (byte)((ort.R + ort.G + ort.B) / 3), (byte)((ort.R + ort.G + ort.B) / 3));
                        bmp.SetPixel(i, j, ort);
                        if ((i % 10) == 0)//her on satırda bir göstergeyi güncelle
                        {
                            progressBar1.Value = i * bmp.Height + j;
                            Application.DoEvents();
                        }
                    }
                }
            }
            //////////////////////// Median //////////////

            bmpmedian = ExtBitmap.MedianFilter(bmp, 3);

            /////////////////////// SOBEL ///////////////

            bmpsobe = ExtBitmap.Sobel3x3Filter(bmpmedian, true);
            Bitmap bmpsobe1 = (Bitmap)bmpsobe.Clone();

            /////////// otsu
            int x, y;
            int genislik  = bmpsobe1.Width;
            int yukseklik = bmpsobe1.Height;

            byte[] pixeller = new byte[(int)genislik * yukseklik];
            Bitmap resim    = (Bitmap)bmpsobe1.Clone();

            for (y = 0; y < yukseklik; y++)
            {
                for (x = 0; x < genislik; x++)
                {
                    // Pixelleri kütüphanenin işleyebileceği tek boyutlu bir diziye atıyoruz.
                    // Gri seviyede tüm ana renkler eşit olduğu için sadece kırmızıyı okumak gri seviye için yeterli.
                    pixeller[y * genislik + x] = resim.GetPixel(x, y).R;
                }
            }

            byte esikDeger = 0;

            OtsuEsikleme(ref pixeller[0], ref esikDeger, genislik, yukseklik);
            int renkk;

            for (y = 0; y < yukseklik; y++)
            {
                for (x = 0; x < genislik; x++)
                {
                    renkk = pixeller[y * genislik + x];                        // gri
                    resim.SetPixel(x, y, Color.FromArgb(renkk, renkk, renkk)); // Gri seviyeyi argb moduna dönüştürüp resme aktarıyoruz.
                }
            }

            otsu = (Bitmap)resim.Clone();
            Bitmap bmperosion;
            Bitmap bmpdilation;
            Bitmap bmpclosing;


            bmperosion = ExtBitmap.DilateAndErodeFilter(otsu, 3, akıllıgecissistemleri.ExtBitmap.MorphologyType.Erosion, true, true, true);
            Bitmap bmperosionn = (Bitmap)bmperosion.Clone();

            bmpdilation = ExtBitmap.DilateAndErodeFilter(bmperosionn, 7, akıllıgecissistemleri.ExtBitmap.MorphologyType.Dilation, true, true, true);
            Bitmap bmpdilationn = (Bitmap)bmpdilation.Clone();

            Bitmap         one     = (Bitmap)bmpdilationn.Clone();
            BlobsFiltering filter0 = new BlobsFiltering();

            // filtre ayarlaması
            filter0.CoupledSizeFiltering = true;
            filter0.MinWidth             = 70;
            filter0.MinHeight            = 40;
            // filtre uygula
            filter0.ApplyInPlace(one);


            Bitmap one2 = (Bitmap)one.Clone();

            bmpclosing = ExtBitmap.CloseMorphologyFilter(one2, 15, true, true, true);
            Bitmap bmperosio = (Bitmap)bmpclosing.Clone();

            Bitmap bmperosionson = ExtBitmap.DilateAndErodeFilter(bmperosio, 9, akıllıgecissistemleri.ExtBitmap.MorphologyType.Erosion, true, true, true);
            Bitmap blobson       = (Bitmap)bmperosionson.Clone();

            BlobsFiltering filterson = new BlobsFiltering();

            // filtre ayarla
            filterson.CoupledSizeFiltering = true;
            filterson.MinWidth             = 50;
            filterson.MinHeight            = 200;
            // filtre uygula

            filterson.ApplyInPlace(blobson);
            Bitmap rect = (Bitmap)blobson.Clone();

            Bitmap one1 = (Bitmap)rect.Clone();

            ConnectedComponentsLabeling filter = new ConnectedComponentsLabeling();
            // filtre uygula
            Bitmap newImage  = filter.Apply(one1);
            Bitmap newImage1 = (Bitmap)newImage.Clone();
            // obje sayısını kontrol et
            int objectCount = filter.ObjectCount;

            BlobCounter blobCounter = new BlobCounter();

            blobCounter.ProcessImage(rect);
            Blob[] blobs = blobCounter.GetObjectsInformation();
            // Görüntüye çizmek için Graphic nesnesi ve bir kalem oluştur
            Graphics g       = Graphics.FromImage(rect);
            Pen      bluePen = new Pen(Color.Blue, 2);

            // her nesne kpntrol edilir ve etrafında daire çizilir.

            for (int i = 0, n = blobs.Length; i < n; i++)
            {
                /*
                 * x1=0
                 * x2=1
                 * y1=2
                 * y2=3
                 */
                List <IntPoint> edgePoints = blobCounter.GetBlobsEdgePoints(blobs[i]);
                List <IntPoint> corners    = PointsCloud.FindQuadrilateralCorners(edgePoints);
                int[]           sinirlar   = sinir(corners);
                sinirlar[0] = sinirlar[0] - 2;
                sinirlar[1] = sinirlar[1] + 2;
                sinirlar[2] = sinirlar[2] - 2;
                sinirlar[3] = sinirlar[3] + 2;
                int   en  = sinirlar[1] - sinirlar[0];
                int   boy = sinirlar[3] - sinirlar[2];
                float ort = (float)en / (float)boy;

                List <IntPoint> ucnoktalar = new List <IntPoint>();
                ucnoktalar.Add(new IntPoint(sinirlar[0], sinirlar[2]));
                ucnoktalar.Add(new IntPoint(sinirlar[1], sinirlar[2]));
                ucnoktalar.Add(new IntPoint(sinirlar[1], sinirlar[3]));
                ucnoktalar.Add(new IntPoint(sinirlar[0], sinirlar[3]));
                g.DrawPolygon(bluePen, ToPointsArray(ucnoktalar));
                g.DrawString("Plaka kordinatlari : (x,y): (" + sinirlar[0].ToString() + "," + sinirlar[2].ToString() + ")\n en, boy,ort: " + (sinirlar[1] - sinirlar[0]).ToString() + ", "
                             + (sinirlar[3] - sinirlar[2]).ToString() + "," + ort.ToString() + " blob sayisi:" + blobs.Length.ToString(), new Font("Arial", 8), Brushes.White, new System.Drawing.Point(sinirlar[0], sinirlar[3] + 4));
            }

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


            Bitmap   rect1    = (Bitmap)pictureBox1.Image.Clone();
            Graphics g1       = Graphics.FromImage(rect1);
            Pen      bluePen2 = new Pen(Color.Red, 2);
            // her nesne kpntrol edilir ve etrafında daire çizilir.

            List <Blob> bloplar = new List <Blob>();

            for (int i = 0, n = blobs.Length; i < n; i++)
            {
                /*              x1,y1--------x2,y1
                 * x1=0           |            |
                 * x2=1           |            |
                 * y1=2         x1,y2--------x2,y2
                 * y2=3
                 */
                List <IntPoint> edgePoints = blobCounter.GetBlobsEdgePoints(blobs[i]);
                List <IntPoint> corners    = PointsCloud.FindQuadrilateralCorners(edgePoints);
                int[]           sinirlar   = sinir(corners);
                sinirlar[0] = sinirlar[0] - 5;
                sinirlar[1] = sinirlar[1];
                sinirlar[2] = sinirlar[2] - 5;
                sinirlar[3] = sinirlar[3] + 5;
                int   en  = sinirlar[1] - sinirlar[0];
                int   boy = sinirlar[3] - sinirlar[2];
                float ort = (float)en / (float)boy;
                if (ort >= 3 && ort <= 5.7)
                {
                    g1.DrawLines(bluePen2, new System.Drawing.Point[] { new System.Drawing.Point(sinirlar[0], sinirlar[2]),
                                                                        new System.Drawing.Point(sinirlar[1], sinirlar[2]), new System.Drawing.Point(sinirlar[1], sinirlar[3]),
                                                                        new System.Drawing.Point(sinirlar[0], sinirlar[3]), new System.Drawing.Point(sinirlar[0], sinirlar[2]) });

                    g1.DrawString("Plaka kordinatlari : (x,y): (" + sinirlar[0].ToString() + "," + sinirlar[2].ToString() + ")\n en, boy,ort: " + (sinirlar[1] - sinirlar[0]).ToString() + ", "
                                  + (sinirlar[3] - sinirlar[2]).ToString() + "," + ort.ToString() + " blob sayisi:" + blobs.Length.ToString(), new Font("Arial", 8), Brushes.White, new System.Drawing.Point(sinirlar[0], sinirlar[3] + 4));
                }
            }

            bluePen2.Dispose();
            g1.Dispose();


            Bitmap   bn       = null;
            Bitmap   kes1     = (Bitmap)rect1.Clone();
            Graphics g2       = Graphics.FromImage(kes1);
            Pen      bluePen3 = new Pen(Color.Red, 2);

            // her nesne kpntrol edilir ve etrafında daire çizilir.

            for (int i = 0, n = blobs.Length; i < n; i++)
            {
                /*              x1,y1--------x2,y1
                 * x1=0           |            |
                 * x2=1           |            |
                 * y1=2         x1,y2--------x2,y2
                 * y2=3
                 */
                List <IntPoint> edgePoints = blobCounter.GetBlobsEdgePoints(blobs[i]);
                List <IntPoint> corners    = PointsCloud.FindQuadrilateralCorners(edgePoints);
                int[]           sinirlar   = sinir(corners);
                sinirlar[0] = sinirlar[0] - 5;
                sinirlar[1] = sinirlar[1];
                sinirlar[2] = sinirlar[2] - 5;
                sinirlar[3] = sinirlar[3] + 5;

                int   en  = sinirlar[1] - sinirlar[0];
                int   boy = sinirlar[3] - sinirlar[2];
                float ort = en / boy;
                if (ort >= 3 && ort <= 5.7)
                {
                    g2.DrawLines(bluePen3, new System.Drawing.Point[] { new System.Drawing.Point(sinirlar[0], sinirlar[2]),
                                                                        new System.Drawing.Point(sinirlar[1], sinirlar[2]), new System.Drawing.Point(sinirlar[1], sinirlar[3]),
                                                                        new System.Drawing.Point(sinirlar[0], sinirlar[3]), new System.Drawing.Point(sinirlar[0], sinirlar[2]) });

                    for (int ii = 0; ii < kes1.Width; ii++)
                    {
                        for (int ji = 0; ji < kes1.Height; ji++)
                        {
                            if ((ii >= sinirlar[0] && ii <= sinirlar[1]) && (ji >= sinirlar[2]) && ji <= sinirlar[3])
                            {
                                continue;
                            }
                            else
                            {
                                kes1.SetPixel(ii, ji, Color.Black);
                            }
                        }
                    }
                    bn = new Bitmap(en, boy);
                    Graphics g3 = Graphics.FromImage(bn);
                    g3.DrawImage(kes1, -sinirlar[0], -sinirlar[2]);
                    pictureBox2.Image = bn;
                }
            }

            bluePen3.Dispose();
            g2.Dispose();



            //form(bmp, "Grayscala");
            //form(bmpmedian, "Median");
            //form(bmpsobe, "sobel");
            //form(otsu, "otsu");
            //form(bmperosion, "erosion");
            //form(bmpdilationn, "dilation");
            //form(one, "one");
            //form(bmpclosing, "closing");
            //form(bmperosionson, "son");
            //form(blobson, "blobson");
            //form(newImage, "one1");
            //form(rect, "rect");
            //form(rect1, "rect1");
            //form(kes1, "kes1");
            //form(bn, "bn");
        }
        static void Main(string[] args)
        {
            Threshold                   thresh        = new Threshold(10);
            Median                      median        = new Median(9);
            Erosion3x3                  erode         = new Erosion3x3();
            Dilatation3x3               dilate        = new Dilatation3x3();
            GrahamConvexHull            hullFinder    = new GrahamConvexHull();
            ConnectedComponentsLabeling ccLabeler     = new ConnectedComponentsLabeling();
            BorderFollowing             contourFinder = new BorderFollowing();
            GrayscaleToRGB              rgb           = new GrayscaleToRGB();
            ConvexHullDefects           defectFinder  = new ConvexHullDefects(10);

            Bitmap img = (Bitmap)Bitmap.FromFile("hand3.jpg");

            Bitmap image = Grayscale.CommonAlgorithms.BT709.Apply(img);

            thresh.ApplyInPlace(image);
            //median.ApplyInPlace(image);
            erode.ApplyInPlace(image);
            dilate.ApplyInPlace(image);

            BlobCounter counter = new BlobCounter(image);

            counter.ObjectsOrder = ObjectsOrder.Area;

            Blob[] blobs = counter.GetObjectsInformation();

            if (blobs.Length > 0)
            {
                counter.ExtractBlobsImage(image, blobs[0], true);

                UnmanagedImage hand = blobs[0].Image;

                var contour = contourFinder.FindContour(hand);

                if (contour.Count() > 0)
                {
                    var initialHull = hullFinder.FindHull(contour);

                    var defects = defectFinder.FindDefects(contour, initialHull);

                    var filteredHull = initialHull.ClusterHullPoints().FilterLinearHullPoints();

                    var palmCenter = defects.Centroid(contour);

                    var wristPoints = filteredHull.SelectWristPoints(defects, contour);

                    Bitmap color = rgb.Apply(hand).ToManagedImage();

                    //BitmapData data = color.LockBits(new Rectangle(0, 0, color.Width, color.Height), ImageLockMode.ReadWrite, color.PixelFormat);
                    //Drawing.Polyline(data, contour, Color.Blue);
                    //Drawing.Polygon(data, filteredHull, Color.Red);
                    //color.UnlockBits(data);

                    Graphics gr = Graphics.FromImage(color);

                    gr.DrawPolygon(new Pen(Brushes.Red, 3), filteredHull.ToPtArray());
                    gr.DrawLines(new Pen(Brushes.Blue, 3), contour.ToPtArray());
                    gr.DrawEllipse(new Pen(Brushes.Red, 3), palmCenter.X - 10, palmCenter.Y - 10, 20, 20);

                    foreach (ConvexityDefect defect in defects)
                    {
                        gr.DrawEllipse(new Pen(Brushes.Green, 6), contour[defect.Point].X - 10, contour[defect.Point].Y - 10, 20, 20);
                    }

                    foreach (AForge.IntPoint pt in filteredHull)
                    {
                        gr.DrawEllipse(new Pen(Brushes.Yellow, 6), pt.X - 10, pt.Y - 10, 20, 20);
                    }

                    foreach (AForge.IntPoint pt in wristPoints)
                    {
                        gr.DrawEllipse(new Pen(Brushes.PowderBlue, 6), pt.X - 10, pt.Y - 10, 20, 20);
                    }

                    ImageBox.Show(color);
                }
            }
        }
Exemple #17
0
        public static Tuple <Bitmap, Bitmap, Bitmap, Bitmap, List <Bitmap> > blob(Bitmap img, Interval w, Interval h, Boolean couple)
        {
            Bitmap sourceImage = (Bitmap)(img);

            ////////////////////////////////////////////////////

            BlobCounter blobCounter = new BlobCounter();

            blobCounter.FilterBlobs = true;
            blobCounter.MinHeight   = (int)h.Min;
            blobCounter.MaxHeight   = (int)h.Max;
            blobCounter.MinWidth    = (int)w.Min;
            blobCounter.MaxWidth    = (int)w.Max;

            blobCounter.CoupledSizeFiltering = couple;

            //blobCounter.BackgroundThreshold.

            blobCounter.ProcessImage(sourceImage);
            Blob[] blobs = blobCounter.GetObjectsInformation();
            //bitmap.UnlockBits(sourceImage);

            ////////////////////////////////////////////////////
            Bitmap newBlobImg = (Bitmap)(sourceImage).Clone();
            // create filter
            BlobsFiltering filterBlob = new BlobsFiltering();

            // configure filter
            filterBlob.CoupledSizeFiltering = couple;
            filterBlob.MinHeight            = (int)h.Min;
            filterBlob.MaxHeight            = (int)h.Max;
            filterBlob.MinWidth             = (int)w.Min;
            filterBlob.MaxWidth             = (int)w.Max;
            // apply the filter
            newBlobImg = filterBlob.Apply(newBlobImg);

            ////////////////////////////////////////////////////

            Bitmap rectImage = (Bitmap)(newBlobImg).Clone();

            GrayscaleToRGB convertToColor = new GrayscaleToRGB();

            if (rectImage.PixelFormat == System.Drawing.Imaging.PixelFormat.Format8bppIndexed)
            {
                rectImage = convertToColor.Apply(newBlobImg);
            }

            Graphics g = Graphics.FromImage(rectImage);

            Pen myPen = new Pen(Color.Red, 1);

            List <Bitmap> blobIMGs = new List <Bitmap>();

            for (int i = 0; i < blobs.Length; i++)
            {
                blobIMGs.Add((Bitmap)(newBlobImg).Clone(blobs[i].Rectangle, PixelFormat.Format32bppArgb));
                g.DrawRectangle(myPen, blobs[i].Rectangle);
            }

            ////////////////////////////////////////////////////


            Bitmap colorImage = (Bitmap)(newBlobImg).Clone();

            ConnectedComponentsLabeling filter = new ConnectedComponentsLabeling();

            // apply the filter
            colorImage = filter.Apply(colorImage);
            //////////////////////////////////////////////////

            SimpleShapeChecker shapeChecker = new SimpleShapeChecker();
            Bitmap             shapeImage   = (Bitmap)(newBlobImg).Clone();
            Graphics           gg           = Graphics.FromImage(shapeImage);
            Pen yellowPen = new Pen(Color.Yellow, 2); // circles
            Pen redPen    = new Pen(Color.Red, 2);    // quadrilateral
            Pen brownPen  = new Pen(Color.Brown, 2);  // quadrilateral with known sub-type
            Pen greenPen  = new Pen(Color.Green, 2);  // known triangle
            Pen bluePen   = new Pen(Color.Blue, 2);   // triangle

            for (int i = 0, n = blobs.Length; i < n; i++)
            {
                List <IntPoint> edgePoints = blobCounter.GetBlobsEdgePoints(blobs[i]);

                AForge.Point center;
                float        radius;

                // is circle ?
                if (shapeChecker.IsCircle(edgePoints, out center, out radius))
                {
                    gg.DrawEllipse(yellowPen,
                                   (float)(center.X - radius), (float)(center.Y - radius),
                                   (float)(radius * 2), (float)(radius * 2));
                }
                else
                {
                    List <IntPoint> corners;

                    // is triangle or quadrilateral
                    if (shapeChecker.IsConvexPolygon(edgePoints, out corners))
                    {
                        // get sub-type
                        PolygonSubType subType = shapeChecker.CheckPolygonSubType(corners);

                        Pen pen;

                        if (subType == PolygonSubType.Unknown)
                        {
                            pen = (corners.Count == 4) ? redPen : bluePen;
                        }
                        else
                        {
                            pen = (corners.Count == 4) ? brownPen : greenPen;
                        }

                        gg.DrawPolygon(pen, ToPointsArray(corners));
                    }
                }
            }



            return(new Tuple <Bitmap, Bitmap, Bitmap, Bitmap, List <Bitmap> >(newBlobImg, colorImage, rectImage, shapeImage, blobIMGs));
        }