public Bitmap analizarImagen(Bitmap source) { Pixel pixelTop = new Pixel(0, 0); Pixel pixelBottom = new Pixel(0, 0); Pixel pixelLeft = new Pixel(0, 0); Pixel pixelRight = new Pixel(0, 0); bool primero = false; bool segundo = false; //datos iniciales System.Diagnostics.Debug.WriteLine("Ancho X " + source.Height); System.Diagnostics.Debug.WriteLine("Ancho Y " + source.Height); //ancho de metatarzo // Recorrer pixel de la imagen para top y bottom for (int i = 0; i < source.Height; i++) { for (int j = 0; j < source.Width; j++) { if (pixelValido(source, j, i, source.Width, source.Height)) { //top if (primero == false)//toptiene el primer pixel valido dede el eje y { pixelTop.x = j; pixelTop.y = i; primero = true; //Color newColor = System.Drawing.Color.FromArgb(0, 123, 255);//pongo de color azul //source.SetPixel(j, i, newColor); } //bottom //ultimo pixel yalido desde eje y pixelBottom.x = j; pixelBottom.y = i; } } } // Recorrer pixel de la imagen para left y right for (int i = 0; i < source.Width; i++) { for (int j = 0; j < source.Height; j++) { if (pixelValido(source, i, j, source.Width, source.Height)) { //top if (segundo == false)//toptiene el primer pixel valido dede el eje y { pixelLeft.x = i; pixelLeft.y = j; segundo = true; //Color newColor = System.Drawing.Color.FromArgb(0, 123, 255);//pongo de color azul //source.SetPixel(j, i, newColor); } //bottom //ultimo pixel yalido desde eje y pixelRight.x = i; pixelRight.y = j; } } } //dibijar top dibujarPunto(source, pixelTop.x, pixelTop.y, System.Drawing.Color.Red); //dibujar boottom dibujarPunto(source, pixelBottom.x, pixelBottom.y, System.Drawing.Color.Yellow); //dibujar left dibujarPunto(source, pixelLeft.x, pixelLeft.y, System.Drawing.Color.Brown); //dibujar Right dibujarPunto(source, pixelRight.x, pixelRight.y, System.Drawing.Color.Chocolate); //punto 1 bool punto1 = false; Pixel puntoUno = new Pixel(0, 0); for (int i = pixelLeft.x; i <= pixelRight.x; i++) { //0.34 o 0.39 max for (int j = Convert.ToInt32(((source.Height / 2) * 0.39f)); j < source.Height / 2; j++) { if (pixelValido(source, i, j, source.Width, source.Height)) { //top if (punto1 == false)//toptiene el primer pixel valido dede el eje y { puntoUno.x = i; puntoUno.y = j; punto1 = true; // Color newColor = System.Drawing.Color.Pink;//pongo de color azul // source.SetPixel(i, j, newColor); } } } } //metatarzo ancho del mf = puntoUno.y; //punto 2 bool punto2 = false; Pixel puntoDos = new Pixel(0, 0); for (int i = pixelLeft.x; i <= pixelRight.x; i++) { //busca el punto 2 desde lamitad de la huella mas el 20% for (int j = Convert.ToInt32((pixelBottom.y / 2) + (pixelBottom.y / 2) * 0.35); j <= pixelBottom.y; j++) { if (pixelValido(source, i, j, source.Width, source.Height)) { //top if (punto2 == false)//toptiene el primer pixel valido dede el eje y { puntoDos.x = i; puntoDos.y = j; punto2 = true; // Color newColor = System.Drawing.Color.Red;//pongo de color azul // source.SetPixel(i, j, newColor); } } } } Pixel puntoUnoPrima = new Pixel(puntoUno.x, (mf * 2) - pixelTop.y); Pixel puntoUnoPrimaDos = new Pixel(puntoUno.x, (mf * 3) - (pixelTop.y * 2)); //calculo talon fin Pixel puntoDosFin = new Pixel(0, 0); for (int i = pixelLeft.x; i <= pixelRight.x; i++) { //busca el punto 2 desde lamitad de la huella mas el 20% for (int j = puntoUnoPrimaDos.y; j <= pixelBottom.y; j++) { if (pixelValido(source, i, j, source.Width, source.Height)) { puntoDosFin.x = i; puntoDosFin.y = j; } } } //calculo de archo externo esta ligado al puntouno prima bool punto4 = false; Pixel pixelArcoExterno = new Pixel(0, 0); Pixel pixelArcoExternoFinal = new Pixel(0, 0); for (int i = pixelLeft.x; i <= pixelRight.x; i++) { for (int j = puntoUnoPrima.y; j <= puntoUnoPrima.y; j++) { if (pixelValido(source, i, j, source.Width, source.Height)) { //top if (punto4 == false)//toptiene el primer pixel valido dede el eje y { pixelArcoExterno.x = i; pixelArcoExterno.y = j; punto4 = true; // Color newColor = System.Drawing.Color.Red;//pongo de color azul // source.SetPixel(i, j, newColor); } //pixel final pixelArcoExternoFinal.x = i; pixelArcoExternoFinal.y = j; } } } ///formula calculo plantograma //calcular X bool puntoxFinal = false; Pixel puntoX = new Pixel(0, 0); Pixel puntoXfinal = new Pixel(0, 0); for (int i = 0; i < pixelRight.x; i++) {//comienza desde el punto uno mas 10% for (int j = puntoUno.y; j <= puntoUnoPrima.y; j++) { if (pixelValido(source, i, j, source.Width, source.Height)) { //top if (puntoxFinal == false)//toptiene el primer pixel valido dede el eje y { puntoX.x = i; puntoX.y = j; puntoxFinal = true; // Color newColor = System.Drawing.Color.Red;//pongo de color azul // source.SetPixel(i, j, newColor); } //pixel final puntoXfinal.x = i; puntoXfinal.y = j; } } } //dibujar lineas //dibujar linea top dibujarLinea(source, pixelRight.x, pixelTop.y, pixelLeft.x, pixelTop.y, System.Drawing.Color.Yellow); //dibujar lina bottoom dibujarLinea(source, pixelRight.x, pixelBottom.y, pixelLeft.x, pixelBottom.y, System.Drawing.Color.Blue); //dibujar linera left dibujarLinea(source, pixelLeft.x, pixelTop.y, pixelLeft.x, pixelBottom.y, System.Drawing.Color.Blue); //digujar linea right dibujarLinea(source, pixelRight.x, pixelTop.y, pixelRight.x, pixelBottom.y, System.Drawing.Color.Blue); //lo que se guarda //trazar de punto 1 dibujarLinea(source, puntoUno.x, puntoUno.y, pixelRight.x, puntoUno.y, System.Drawing.Color.Blue); //trazar punto 2 dibujarLinea(source, puntoUnoPrima.x, puntoUnoPrima.y, pixelRight.x, puntoUnoPrima.y, System.Drawing.Color.Blue); //trazar punto 3 dibujarLinea(source, puntoUno.x, puntoUnoPrimaDos.y, pixelRight.x, puntoUnoPrimaDos.y, System.Drawing.Color.Blue); //trazar de punto 1 a punto2 dibujarLinea(source, puntoUno.x, puntoUno.y, puntoDos.x, puntoDos.y, System.Drawing.Color.Red); //trazar linea arco externo dibujarLinea(source, pixelArcoExterno.x, pixelArcoExterno.y, pixelArcoExternoFinal.x, pixelArcoExternoFinal.y, System.Drawing.Color.Red); //dibujar linea punto X final dibujarLinea(source, puntoXfinal.x, puntoUno.y, puntoXfinal.x, puntoUnoPrima.y, System.Drawing.Color.Red); //dibujar talon hertical dibujarLinea(source, puntoDosFin.x, puntoUnoPrimaDos.y, puntoDosFin.x, pixelBottom.y, System.Drawing.Color.Red); //resultado de tipo de pie en porcentaje X = puntoXfinal.x - puntoUno.x; //ancho del metatarso Y = (pixelArcoExternoFinal.x - pixelArcoExterno.x); //ancho de la impresion resultado = CalcularTipoPie(X, Y); //resultado espacio interno //ai espacioInterno = Convert.ToInt32(pixelArcoExterno.x - puntoUno.x); //resultado talon talon = Convert.ToInt32(puntoDosFin.x - puntoDos.x); //medida fundamental mf mf = puntoUno.y - pixelTop.y; //Ai //X' =X(y'/Y)calcula el valor de x a restar donde se cruza el trrazo dl punto 1 a punto 2 con el x del pixelArcoExterno // generamos un triangulo int triX = puntoDos.x - puntoUno.x; //base del triangulo int triY = puntoDos.y - puntoUno.y; //altura int triYprima = pixelArcoExterno.y - puntoUno.y; //valor en Y que queremos saber float xprima = Convert.ToSingle(triX) * (Convert.ToSingle(triYprima) / Convert.ToSingle(triY)); //optiene el valor de X en la altura de Y ai = Convert.ToInt32((pixelArcoExterno.x - puntoUno.x) - xprima); //longitud pie Y longitudPieY = pixelBottom.y - pixelTop.y; //logitud pie X longitudPieX = pixelRight.x - pixelLeft.x; return(source); }
public Bitmap analizarImagenMedoto2(Bitmap source) { Pixel pixelTop = new Pixel(0, 0); Pixel pixelBottom = new Pixel(0, 0); Pixel pixelLeft = new Pixel(0, 0); Pixel pixelRight = new Pixel(0, 0); bool primero = false; bool segundo = false; //datos iniciales /* * System.Diagnostics.Debug.WriteLine(" sizeImgHTML Width:" + sizeImgHTML.x); * System.Diagnostics.Debug.WriteLine(" sizeImgHTML Height:" + sizeImgHTML.y); * System.Diagnostics.Debug.WriteLine(" select html ponit X:" + pixelTopSelect.x); * System.Diagnostics.Debug.WriteLine(" select html point Y:" + pixelTopSelect.y);*/ System.Diagnostics.Debug.WriteLine(" original Width:" + source.Width); System.Diagnostics.Debug.WriteLine(" original Height:" + source.Height);/* * Pixel pixelProyeccionTop = new Pixel(proyeccionPixelHtml(source.Width, sizeImgHTML.x, pixelTopSelect.x), proyeccionPixelHtml(source.Height, sizeImgHTML.y, pixelTopSelect.y)); * System.Diagnostics.Debug.WriteLine("select original X:" + pixelProyeccionTop.x); * System.Diagnostics.Debug.WriteLine("select original Y:" + pixelProyeccionTop.y);*/ //ancho de metatarzo // Recorrer pixel de la imagen para top y bottom for (int i = 0; i < source.Height; i++) { for (int j = 0; j < source.Width; j++) { if (pixelValido(source, j, i, source.Width, source.Height)) { //top if (primero == false)//toptiene el primer pixel valido dede el eje y { pixelTop.x = j; pixelTop.y = i; primero = true; //Color newColor = System.Drawing.Color.FromArgb(0, 123, 255);//pongo de color azul //source.SetPixel(j, i, newColor); } //bottom //ultimo pixel yalido desde eje y pixelBottom.x = j; pixelBottom.y = i; } } } // pixelTop = pixelProyeccionTop; // Recorrer pixel de la imagen para left y right for (int i = 0; i < source.Width; i++) { for (int j = 0; j < source.Height; j++) { if (pixelValido(source, i, j, source.Width, source.Height)) { //top if (segundo == false)//toptiene el primer pixel valido dede el eje y { pixelLeft.x = i; pixelLeft.y = j; segundo = true; //Color newColor = System.Drawing.Color.FromArgb(0, 123, 255);//pongo de color azul //source.SetPixel(j, i, newColor); } //bottom //ultimo pixel yalido desde eje y pixelRight.x = i; pixelRight.y = j; } } } //dibijar top dibujarPunto(source, pixelTop.x, pixelTop.y, System.Drawing.Color.Red); //dibujar boottom dibujarPunto(source, pixelBottom.x, pixelBottom.y, System.Drawing.Color.Yellow); //dibujar left dibujarPunto(source, pixelLeft.x, pixelLeft.y, System.Drawing.Color.Brown); //dibujar Right dibujarPunto(source, pixelRight.x, pixelRight.y, System.Drawing.Color.Chocolate); /*Init colores*/ int tamañoTotalY = pixelBottom.y - pixelTop.y; int tamSeccion = 0; if (tamañoTotalY > 0) { tamSeccion = tamañoTotalY / 3; } int contador = 0; int tamSeccion1 = tamSeccion * 1; int tamSeccion2 = tamSeccion * 2; int tamSeccion3 = tamSeccion * 3; int totalPixelValidoAP = 0; int totalPixelValidoMP = 0; int totalPixelValidoRP = 0; System.Diagnostics.Debug.WriteLine(" Tamaño seccion:" + tamañoTotalY); for (int i = pixelTop.y; i <= pixelBottom.y; i++) { contador++; for (int j = pixelLeft.x; j < pixelRight.x; j++) { if (pixelValidoLite(2, source, j, i, source.Width, source.Height)) { if (tamSeccion1 >= contador) {//seccion 1 dibujarPunto(source, j, i, System.Drawing.Color.Red); totalPixelValidoAP++; } if (contador > tamSeccion1 && tamSeccion2 >= contador) {//seccion 2 dibujarPunto(source, j, i, System.Drawing.Color.Blue); totalPixelValidoMP++; } if (contador > tamSeccion2 && tamSeccion3 >= contador) {//seccion 3 dibujarPunto(source, j, i, System.Drawing.Color.Green); totalPixelValidoRP++; } } } } double suma = (totalPixelValidoAP + totalPixelValidoMP + totalPixelValidoRP); IA = Convert.ToSingle(totalPixelValidoMP / suma); System.Diagnostics.Debug.WriteLine("totalPixelValidoAP analisis:" + totalPixelValidoAP); System.Diagnostics.Debug.WriteLine("totalPixelValidoMP analisis:" + totalPixelValidoMP); System.Diagnostics.Debug.WriteLine("totalPixelValidoRP analisis:" + totalPixelValidoRP); System.Diagnostics.Debug.WriteLine("suma IA:" + suma); System.Diagnostics.Debug.WriteLine("IA analisis:" + IA); /*End colores*/ //dibujar lineas //dibujar linea top dibujarLinea(source, pixelRight.x, pixelTop.y, pixelLeft.x, pixelTop.y, System.Drawing.Color.Yellow); //dibujar lina bottoom dibujarLinea(source, pixelRight.x, pixelBottom.y, pixelLeft.x, pixelBottom.y, System.Drawing.Color.Blue); //dibujar linera left dibujarLinea(source, pixelLeft.x, pixelTop.y, pixelLeft.x, pixelBottom.y, System.Drawing.Color.Red); //digujar linea right dibujarLinea(source, pixelRight.x, pixelTop.y, pixelRight.x, pixelBottom.y, System.Drawing.Color.Orange); //longitud pie Y longitudPieY = pixelBottom.y - pixelTop.y; //logitud pie X longitudPieX = pixelRight.x - pixelLeft.x; return(source); }