// 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); }
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); }
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"); }
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); }
// 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); } }
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(); }
private void button10_Click_1(object sender, EventArgs e) { int[] h = PictureAnalizer.Histograma(PictureAnalizer.ImagenEntrada); GraficarVector(PictureAnalizer.HistogramaNormal(PictureAnalizer.ImagenEntrada), this.ChrtHistoSimple); }