示例#1
0
        // otsu automatico
        private void button1_Click(object sender, EventArgs e)
        {
            int[]    h  = PictureAnalizer.Histograma((Bitmap)ImagenEntrada.Image);
            double[] hn = PictureAnalizer.HistogramaNormal((Bitmap)ImagenEntrada.Image);
            int      t  = PictureAnalizer.Otsu(hn);

            MessageBox.Show("", t.ToString());
            ImagenEntrada.Image = PictureAnalizer.Umbralizar((Bitmap)ImagenEntrada.Image, t);
        }
示例#2
0
        public static double [] HistogramaNormal(Bitmap ImagenColor)
        {
            int[]     h        = PictureAnalizer.Histograma(ImagenColor);
            double [] HistNorm = new double[256];
            for (int i = 0; i < 256; i++)
            {
                HistNorm[i] = h[i] / ((double)ImagenColor.Width * ImagenColor.Height);
            }

            return(HistNorm);
        }
示例#3
0
        private void otsuToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Analizador.SetImagenSalida((Bitmap)ImagenEntrada.Image);
            // crear un histograma
            int[]    h  = PictureAnalizer.Histograma(PictureAnalizer.ImagenEntrada);
            double[] hn = PictureAnalizer.HistogramaNormal(PictureAnalizer.ImagenEntrada);

            // realizar una umbralizacion
            int t = PictureAnalizer.Otsu(hn);

            this.ImagenSalida.Image = PictureAnalizer.Umbralizar(PictureAnalizer.ImagenEntrada, t);
            MessageBox.Show("Umbral Optimo " + t.ToString(), "Umbral optimo");
        }
示例#4
0
        public static int [] HistogramaAcumulado(Bitmap input)
        {
            int [] h = PictureAnalizer.Histograma(input);

            int[] Hacum = new int[256];

            for (int i = 1; i < 256; i++)
            {
                Hacum[i] = Hacum[i - 1] + h[i];
            }

            return(Hacum);
        }
示例#5
0
        // probar todas las imagenes de una carpeta
        private void desdeCarpetaToolStripMenuItem_Click(object sender, EventArgs e)
        {
            FolderBrowserDialog c = new FolderBrowserDialog();

            c.ShowDialog();

            string rutaCarpetaTest = c.SelectedPath;

            // buscar todos lo archivos de imagen en el directorio
            DirectoryInfo dirs = new DirectoryInfo(rutaCarpetaTest);

            // recorrer cada archivo en el directorio
            int b = 0;

            foreach (var im in dirs.GetFiles("*.jpg", SearchOption.AllDirectories))
            {
                Bitmap imEnt = new Bitmap(im.FullName);

                Analizador.SetImagenEntrada(imEnt);
                Analizador.SetImagenSalida(PictureAnalizer.ImagenColor2Gray(imEnt));

                ImagenEntrada.Image = PictureAnalizer.ImagenEntrada;
                ImagenSalida.Image  = PictureAnalizer.ImagenEntrada;
                ImagenEntrada.Refresh();
                ImagenSalida.Refresh();
                System.Threading.Thread.Sleep(100);

                // crear un histograma
                int[]    h  = PictureAnalizer.Histograma(PictureAnalizer.ImagenEntrada);
                double[] hn = PictureAnalizer.HistogramaNormal(PictureAnalizer.ImagenEntrada);

                // realizar una umbralizacion
                int t = PictureAnalizer.Otsu(hn);
                this.ImagenSalida.Image = PictureAnalizer.Umbralizar(PictureAnalizer.ImagenEntrada, t);
                imEnt = (Bitmap)this.ImagenSalida.Image;
                //PictureAnalizer.GuardarImagenSalida((Bitmap) PictureAnalizer.ImagenEntrada, this.RutaGuardado + "\\OtsuEntrada" + b.ToString()  + im.Name );

                PictureAnalizer.GuardarImagenSalida((Bitmap)this.ImagenSalida.Image, this.RutaGuardado + "\\OtsuSalida" + b.ToString() + im.Name);
                PictureAnalizer.GuardarImagenSalida(PictureAnalizer.DilatarImagen(imEnt, this.MascaraActual, 255), this.RutaGuardado + "\\SalidaDilatada" + b.ToString() + im.Name);
                PictureAnalizer.GuardarImagenSalida(PictureAnalizer.ErocionarImagen(imEnt, this.MascaraActual, 255), this.RutaGuardado + "\\SalidaErocionada" + b.ToString() + im.Name);
                // PictureAnalizer.GuardarImagenSalida( PictureAnalizer.Cerradura(imEnt, this.MascaraActual), this.RutaGuardado + "\\SalidaCerradura" + b.ToString() + im.Name);
                //  PictureAnalizer.GuardarImagenSalida( PictureAnalizer.Apertura(imEnt, this.MascaraActual), this.RutaGuardado + "\\SalidaApertura" + b.ToString() + im.Name);
                PictureAnalizer.GuardarImagenSalida(PictureAnalizer.ExtBorde(imEnt, this.MascaraActual), this.RutaGuardado + "\\SalidaBorde" + b.ToString() + im.Name);

                b++;
                ImagenSalida.Refresh();

                System.Threading.Thread.Sleep(100);
            }
        }
示例#6
0
        private void button24_Click(object sender, EventArgs e)
        {
            /**** 1 - humbralizar ******/
            Bitmap img_Exm_Ent = (Bitmap)ImagenEntrada.Image;
            Bitmap Org         = (Bitmap)ImagenEntrada.Image;

            // conseguir histogramas para umbralizar
            int []   h      = PictureAnalizer.Histograma(img_Exm_Ent);
            double[] hn     = PictureAnalizer.HistogramaNormal(img_Exm_Ent);
            int      umbral = PictureAnalizer.Otsu(hn);

            Bitmap img_Exm = PictureAnalizer.Umbralizar(img_Exm_Ent, umbral);

            PictureAnalizer.ImagenEntrada = img_Exm;
            ImagenEntrada.Image           = img_Exm;
            ImagenEntrada.Image.Save("ImgHumbralizada.jpeg");
            ImagenEntrada.Refresh();


            /**** 2 - erocionar la imagen ******/
            Mascara ee = new Mascara(Mascara.PRDF_Estr_Bcdd, new Size(3, 3), new Point(1, 1));
            Bitmap  cv = PictureAnalizer.ErocionarImagen(img_Exm, ee, 255);

            img_Exm = PictureAnalizer.ErocionarImagen(img_Exm, ee, 255);


            Bitmap cn = img_Exm;

            PictureAnalizer.ImagenEntrada = img_Exm;
            ImagenEntrada.Image           = img_Exm;
            ImagenEntrada.Image.Save("ImgErocionada.jpeg");
            ImagenEntrada.Refresh();


            Mascara es = new Mascara(Mascara.PRDF_Estr_Cruz, new Size(3, 3), new Point(1, 1));

            img_Exm = PictureAnalizer.DilatarImagen(img_Exm, es, 255);
            PictureAnalizer.ImagenEntrada = img_Exm;
            ImagenEntrada.Image           = img_Exm;
            ImagenEntrada.Image.Save("ImgDilatada.jpeg");
            ImagenEntrada.Refresh();

            Bitmap sa = PictureAnalizer.DibujarNegra(cn.Width, cn.Height);

            for (int i = 0; i < cn.Height; i++)
            {
                for (int j = 0; j < cn.Width; j++)
                {
                    int cOr = PictureAnalizer.PixelColor2Gray(img_Exm.GetPixel(j, i));

                    if (cOr == 255)
                    {
                        int cON = PictureAnalizer.PixelColor2Gray(cv.GetPixel(j, i));
                        sa.SetPixel(j, i, Color.FromArgb(cON, cON, cON));
                    }
                }
            }

            ImagenEntrada.Image = sa;
            Bitmap sae = PictureAnalizer.DibujarNegra(cn.Width, cn.Height);

            for (int i = 0; i < cn.Height; i++)
            {
                for (int j = 0; j < cn.Width; j++)
                {
                    int cOr = PictureAnalizer.PixelColor2Gray(sa.GetPixel(j, i));

                    if (cOr > 0)
                    {
                        int cON = PictureAnalizer.PixelColor2Gray(Org.GetPixel(j, i));
                        sae.SetPixel(j, i, Color.FromArgb(cON, cON, cON));
                    }
                }
            }

            ImagenEntrada.Image = sae;
            ImagenEntrada.Image.Save("ImgCombinada.jpeg");
            ImagenEntrada.Refresh();
        }
示例#7
0
 private void button10_Click_1(object sender, EventArgs e)
 {
     int[] h = PictureAnalizer.Histograma(PictureAnalizer.ImagenEntrada);
     GraficarVector(PictureAnalizer.HistogramaNormal(PictureAnalizer.ImagenEntrada), this.ChrtHistoSimple);
 }