elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Únete al Grupo Steam elhacker.NET


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Java
| | | |-+  Reconocimiento de Patrones en JAVA
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Reconocimiento de Patrones en JAVA  (Leído 40,698 veces)
cyberserver

Desconectado Desconectado

Mensajes: 162


Lo que una mente crea, otra lo destruye


Ver Perfil WWW
Reconocimiento de Patrones en JAVA
« en: 29 Mayo 2010, 21:41 pm »

 :DHola amigos, para todos aquellos que quieran comerce el mundo y como gran sueño como yo tengan en ser investigadores algun dia!

Aqui les traigo un programa super basico de Reconocimiento de patrones en una imagen. lo cree por conviccion y por querer saber como funciona esto.!!!

Pero para que puedo ocupar este programa?:
La pregunta me la han hecho muchas personas y la respuesta es ilimitada! la pregunta seria donde no puedo ocuparla :P

Un ejemplo es en la inteligencia artificial supongamos que creamos un robor que aprender a distinguir en una mesa llena de fruta una manzana. como sabes o como hacele entender al robot k es una manzana y que es diferente a las demas.!!

con este programa de reconocimiento de patrones. esto es muy basico pero abre la puerta a grandes investigaciones k se estan asiendo sobre esto.


Comenzemos.
Primero que nada nuestro proyecto solo reconoce patrones en imagenes .png esto es por el formato y el tipo de imagen de mapa de bits que no cambiar su estructura cuando cambiamos su tamaño o modificamos un pixel, ya que la mayoría de las otras extensiones al cambiar un pixel cambiar todo lo demas :P


Este es el codigo sencillo y pequeño

Código
  1. import java.awt.*;
  2. import javax.swing.*;
  3. import java.awt.image.BufferedImage;
  4. import javax.swing.ImageIcon;
  5. import java.io.*;
  6. import javax.imageio.ImageIO;
  7.  
  8. //Autor Jose abel de la Fuente Arriaga
  9. //CyberServer
  10.  
  11. public class Pixeles {
  12. public static void main (String[] args) {
  13. JLabel Resultado= new JLabel();
  14.  
  15. JOptionPane.showMessageDialog(null,"Proyecto: Reconocimiento de Patrones en imagenes \n"+
  16. "Autor: Jose Abel de la fuente \n" +
  17. "Correo: crow_15@hotmail.com \n" +
  18. "Lenguaje: Java \n"+
  19. "Arriva atlacomulco, atte: cyberServer");
  20.  
  21. String PixelBuscar=JOptionPane.showInputDialog("Color en Hexadecimal del pixel a Buscar \n El Default es Blanco - ffffff","ffffff");
  22. String Archivo=JOptionPane.showInputDialog("Nombre de la imagen para Buscar el pixel \n Tiene que se png");
  23. int contador=0;
  24. String Cordenadas=null;
  25. ImageIcon Imagen = new ImageIcon(Archivo + ".png");
  26.  
  27. Coversion C = new Coversion();
  28. BufferedImage Nueva = C.toBufferedImage(Imagen.getImage());
  29. Graphics g = Nueva.getGraphics();
  30.  
  31. for(int x=0;x<=449;x++){
  32. for(int y=0;y<=331;y++){
  33. String val= Integer.toHexString(Nueva.getRGB(x,y) & 0x00ffffff ).toString();
  34. if(val.equals(PixelBuscar)){
  35. Cordenadas=Cordenadas + " (" + x+","+y+") ";
  36. contador++;
  37. g.setColor(Color.yellow);
  38. g.fillOval(x, y, 10, 10);
  39. }
  40. }
  41. }
  42.  
  43. //JOptionPane.showMessageDialog(null,"Tiene " + contador + " elementos que buscas");
  44. //JOptionPane.showMessageDialog(null,"Cordenadas " + Cordenadas);
  45.  
  46. if (contador != 0){
  47. try {
  48.   ImageIO.write(Nueva, "jpg", new File("Resultado.png"));
  49. } catch (IOException e) {
  50.   System.out.println("Error de escritura");
  51. }
  52. Resultado.setIcon(new ImageIcon("Resultado.png"));
  53. JOptionPane.showMessageDialog(null,Resultado);
  54. }else{
  55. JOptionPane.showMessageDialog(null,"No se encontro ningun patron");
  56. }
  57. }
  58.  
  59. }
  60. class Coversion {
  61.  
  62.    BufferedImage toBufferedImage(Image image) {
  63. if( image instanceof BufferedImage ) {
  64. return( (BufferedImage)image );
  65. } else {
  66. image = new ImageIcon(image).getImage();
  67. BufferedImage bufferedImage = new BufferedImage(
  68. image.getWidth(null),
  69. image.getHeight(null),
  70. BufferedImage.TYPE_INT_RGB );
  71. Graphics g = bufferedImage.createGraphics();
  72. g.drawImage(image,0,0,null);
  73. g.dispose();
  74.  
  75. return( bufferedImage );
  76. }
  77. }
  78. }

La imagen original queda asi:


Si nos damos cuenta emos escrito en la imagen pequeños puntos blancos que en este caso es el patron que estamos buscando

Despues de haber pasado nuestro programa por la imagen y haber especificado buscar el patron blanco!!! no da esta imagen como resultado



Bingo!!! encontro los patrones reconocio lo que estaba buscando y lo señalo!!!

 :D

Para muchos funcinal, para muchos novato, para muchos perdida de tiempo. ustedes que opinan???

NOTA: El unico parametro que tienes que cambiar en el codigo es
Código:
for(int x=0;x<=449;x++){
for(int y=0;y<=331;y++){

tendras que cambiar los limites de X y Y segun el numero de pixeles de imagen. recuerda que es si la imagen es de 450X332 tienes que poner en los limites de los for anidado 449X331 pues comenzamos de 0

Saludos y espero que les sirva su amigo CyberServer.

Este proyecto todavia no lo muestro asi que si eres del Tecnologico de Jocotitlan ( Tesjo) no se te ocurra copiarlo maldito PIRATA!!! jajaja ntc saludos.!!


NOTOTA: PERDON POR LA ESTRUCTURA "PUERCA DEL CODIGO" Reconozco QUE ES UNA PORQUERIA EN CUANTO A LIMPIEZA PERO ME KEME LA CABEZA PENSANDO COMO HACERLE Y ME OLVIDE DE LA INGENIERIA DE SOFTWARE :p


« Última modificación: 3 Julio 2010, 00:31 am por Debci » En línea






Blitzkrieg'


Desconectado Desconectado

Mensajes: 546


print('Hi there')


Ver Perfil WWW
Re: Reconocimiento de Patrones en JAVA
« Respuesta #1 en: 29 Mayo 2010, 22:53 pm »

Buen aporte, gracias.  ;D


En línea



Amerikano|Cls


Desconectado Desconectado

Mensajes: 789


[Beyond This Life]


Ver Perfil WWW
Re: Reconocimiento de Patrones en JAVA
« Respuesta #2 en: 3 Junio 2010, 00:03 am »

Gracias le dare una ojeada porque estoy en un proyecto de reconocimiento de Imagenes para cierto proyecto en mente  :rolleyes:.
En línea





Mi blog:
http://amerikanocls.blogspot.com
cyberserver

Desconectado Desconectado

Mensajes: 162


Lo que una mente crea, otra lo destruye


Ver Perfil WWW
Re: Reconocimiento de Patrones en JAVA
« Respuesta #3 en: 2 Julio 2010, 23:50 pm »

Ya pude hacer una modificacion importante. ya puedo agrupar los pixeles.!!!!!

YA no solo me dice el numero de patrones busca los pixeles vecinos y los agrupa.!!!!

 ;-) ;-) ;-) ;-) ;-) ;-)

Aqui en el foro posteo como agrupar valores y el mismo metodo que comparto aqui http://foro.elhacker.net/java/agrupamiento_de_nodos_vecino_en_un_arreglo_mineria_de_datos-t298383.0.html

Es el mismo metodo que utilize para agrupar los pixeles en el programa de reconocimiento de patrones.



Entonces el codigo modificado para que agrupe los patrones es el siguiente:

Código
  1.  
  2. import java.awt.*;
  3. import javax.swing.*;
  4. import java.awt.image.BufferedImage;
  5. import javax.swing.ImageIcon;
  6. import java.io.*;
  7. import javax.imageio.ImageIO;
  8.  
  9. //Autor Jose abel de la Fuente Arriaga
  10. //CyberServer
  11.  
  12. public class Pixeles {
  13. public static void main (String[] args) {
  14. JLabel Resultado= new JLabel();
  15.  
  16. String arreglo[][];                  
  17.  
  18.  
  19. JOptionPane.showMessageDialog(null,"Proyecto: Reconocimiento de Patrones en imagenes \n"+
  20. "Autor: Jose Abel de la fuente \n" +
  21. "Correo: crow_15@hotmail.com \n" +
  22. "Lenguaje: Java \n"+
  23. "Arriva atlacomulco, atte: cyberServer");
  24.  
  25. String PixelBuscar=JOptionPane.showInputDialog("Color en Hexadecimal del pixel a Buscar \n El Default es Blanco - ffffff","ffffff");
  26. String Archivo=JOptionPane.showInputDialog("Nombre de la imagen para Buscar el pixel \n Tiene que se png");
  27. int contador=0;
  28. String Cordenadas=null;
  29. ImageIcon Imagen = new ImageIcon(Archivo + ".png");
  30.  
  31. Coversion C = new Coversion();
  32. BufferedImage Nueva = C.toBufferedImage(Imagen.getImage());
  33. Graphics g = Nueva.getGraphics();
  34.  
  35. //Agrupar
  36. arreglo = new String[Nueva.getWidth()][Nueva.getHeight()];
  37. for(int x=0;x<=Nueva.getWidth()-1 ;x++){
  38. for(int y=0;y<=Nueva.getHeight()-1;y++){
  39. String val= Integer.toHexString(Nueva.getRGB(x,y) & 0x00ffffff ).toString();
  40. arreglo[x][y]=val;
  41. }
  42. }
  43. AgrupamientoVecinos objeto=new AgrupamientoVecinos();
  44.     int GruposTotales=objeto.Agrupar(arreglo,PixelBuscar,true,null);
  45.     JOptionPane.showMessageDialog(null,"Termino de Buscar en total fueron " + GruposTotales + " grupos");
  46.  
  47.     //fin de Agrupar
  48. for(int x=0;x<=Nueva.getWidth()-1 ;x++){
  49. for(int y=0;y<=Nueva.getHeight()-1;y++){
  50. String val= Integer.toHexString(Nueva.getRGB(x,y) & 0x00ffffff ).toString();
  51. if(val.equals(PixelBuscar)){
  52. Cordenadas=Cordenadas + " (" + x+","+y+") ";
  53. contador++;
  54. g.setColor(Color.blue);
  55. g.fillOval(x, y, 10, 10);
  56. }
  57. }
  58. }
  59.  
  60. //JOptionPane.showMessageDialog(null,"Tiene " + contador + " elementos que buscas");
  61. //JOptionPane.showMessageDialog(null,"Cordenadas " + Cordenadas);
  62.  
  63. if (contador != 0){
  64. try {
  65.   ImageIO.write(Nueva, "jpg", new File("Resultado.png"));
  66. } catch (IOException e) {
  67.   System.out.println("Error de escritura");
  68. }
  69. Resultado.setIcon(new ImageIcon("Resultado.png"));
  70. JOptionPane.showMessageDialog(null,"Numero de Pixeles involucrados " + contador );
  71.  
  72. JOptionPane.showMessageDialog(null,Resultado);
  73. }else{
  74. JOptionPane.showMessageDialog(null,"No se encontro ningun patron");
  75. }
  76. }
  77.  
  78. }
  79. class Coversion {
  80.  
  81.    BufferedImage toBufferedImage(Image image) {
  82. if( image instanceof BufferedImage ) {
  83. return( (BufferedImage)image );
  84. } else {
  85. image = new ImageIcon(image).getImage();
  86. BufferedImage bufferedImage = new BufferedImage(
  87. image.getWidth(null),
  88. image.getHeight(null),
  89. BufferedImage.TYPE_INT_RGB );
  90. Graphics g = bufferedImage.createGraphics();
  91. g.drawImage(image,0,0,null);
  92. g.dispose();
  93.  
  94. return( bufferedImage );
  95. }
  96. }
  97. }
  98.  
  99. class AgrupamientoVecinos{
  100. public String ValorNuevo;
  101. public String ValorViejo;
  102. public String arreglo[][];
  103. public int Agrupar(String ArregloDeBusqueda[][],String ValorABuscar,boolean RenombradoAutomaticoGrupos,String ValorAModificar){
  104. int grupos=0;
  105. arreglo=ArregloDeBusqueda;
  106. ValorNuevo=ValorAModificar;
  107. ValorViejo=ValorABuscar;
  108.  
  109. for(int yx=0;yx<ArregloDeBusqueda.length;yx++){
  110.     for(int yy=0;yy<ArregloDeBusqueda[0].length;yy++){
  111.     if(ArregloDeBusqueda[yx][yy].equals(ValorViejo)){
  112.     if(RenombradoAutomaticoGrupos==false){
  113.     grupos++;
  114.     this.BuscarVecino(yx,yy);
  115.     }else{
  116.     grupos++;
  117.     ValorNuevo=Integer.toString(grupos);
  118.     this.BuscarVecino(yx,yy);
  119.     }
  120.     }
  121.     }
  122.     }
  123.     return grupos;
  124. }
  125. private void BuscarVecino(int x,int y){
  126. arreglo[x][y]=ValorNuevo;
  127. if(arreglo[x][y-1].equals(ValorViejo)){
  128. BuscarVecino(x,y-1);
  129. }
  130. if(arreglo[x-1][y-1].equals(ValorViejo)){
  131. BuscarVecino(x-1,y-1);
  132. }
  133. if(arreglo[x-1][y].equals(ValorViejo)){
  134. BuscarVecino(x-1,y);
  135. }
  136. if(arreglo[x-1][y+1].equals(ValorViejo)){
  137. BuscarVecino(x-1,y+1);
  138. }
  139. if(arreglo[x][y+1].equals(ValorViejo)){
  140. BuscarVecino(x,y+1);
  141. }
  142. if(arreglo[x+1][y+1].equals(ValorViejo)){
  143. BuscarVecino(x+1,y+1);
  144. }
  145. if(arreglo[x+1][y].equals(ValorViejo)){
  146. BuscarVecino(x+1,y);
  147. }
  148. if(arreglo[x+1][y-1].equals(ValorViejo)){
  149. BuscarVecino(x+1,y-1);
  150. }
  151. }
  152.  
  153. }
  154.  
  155.  



PERO para que sirve agrupar los patrones???????????

BIEN FACIL PARA FORMAR FIGURAS COMPLETAS, Y EN LUGAR DE QUE TE DIGA QUE EXISTEN 200 PIXELES DE ROJOS... TE DIRA QUE EXISTEN DOS MANZANAZ YA QUE ABRA AGRUPADO LOS PIXELES..... :p :p


eSPERO QUE LES SIRVA SU AMIGO CYBERSERVER
En línea






Debci
Wiki

Desconectado Desconectado

Mensajes: 2.021


Actualizate o muere!


Ver Perfil WWW
Re: Reconocimiento de Patrones en JAVA
« Respuesta #4 en: 3 Julio 2010, 00:31 am »

Buenísimo, muy bueno como siempre, pero agradeceria que pusieses la quote de codigo bueno, no me cuesta hacerlo, pero a ti menos ;)

Enserio muy bueno, hacia tiempo que no veia algo asi.

Saludos
En línea

joinko

Desconectado Desconectado

Mensajes: 5


Ver Perfil
Re: Reconocimiento de Patrones en JAVA
« Respuesta #5 en: 21 Julio 2011, 10:52 am »

buenisimo es lo que andava buscandO!! Código muy claro, perfecto!!
Gracias!!
En línea

luqueagm2000

Desconectado Desconectado

Mensajes: 9


Ver Perfil
Re: Reconocimiento de Patrones en JAVA
« Respuesta #6 en: 11 Octubre 2011, 22:55 pm »

oa

pero como se hace para alguien que no sabe java?....

no he podido hacer funcionar el programa....
no sé de java...

alguna ayuda?

En línea

Debci
Wiki

Desconectado Desconectado

Mensajes: 2.021


Actualizate o muere!


Ver Perfil WWW
Re: Reconocimiento de Patrones en JAVA
« Respuesta #7 en: 12 Octubre 2011, 10:48 am »

oa

pero como se hace para alguien que no sabe java?....

no he podido hacer funcionar el programa....
no sé de java...

alguna ayuda?


Si quieres que funcione, DEBES, aprender java, no puedes pretender que funcione algo que ni siquiera sabes lo que es.
Si quieres aprender pásate por el entry point de esta misma sección.

Un saludo
En línea

ancorzize

Desconectado Desconectado

Mensajes: 2


Ver Perfil
Re: Reconocimiento de Patrones en JAVA
« Respuesta #8 en: 29 Noviembre 2014, 15:08 pm »

AMIGO COMO HAGO PARA INGRESAR LA IMAGEN, ME PIDE EL NOMBRE, EL NOMBRE ES LA RUTA DONDE SE ENCUENTRA LA IMAGEN??, SI ES ASI ME SALE ERROR, O DONDE GUARDO LA IMAGEN=???
En línea

ancorzize

Desconectado Desconectado

Mensajes: 2


Ver Perfil
Re: Reconocimiento de Patrones en JAVA
« Respuesta #9 en: 29 Noviembre 2014, 15:11 pm »

AMIGO COMO HAGO PARA INGRESAR LA IMAGEN?? ME PIDE EL NOMBRE DE LA IMAGEN,  AHI VA LA RUTA DONDE TENGO GUARDADA LA IMAGEN?? O COMO ES?? SI ES ASI ME SALE ERROR, O DIME DONDE TENGO QUE GUARDAR LA IMAGEN!! GRACIAS
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
OpenCV y reconocimiento de patrones
Programación General
alex_uam 0 2,401 Último mensaje 11 Junio 2013, 20:46 pm
por alex_uam
OpenCV y reconocimiento de patrones
Programación General
alex_uam 5 9,840 Último mensaje 24 Noviembre 2015, 19:05 pm
por JJ91
OpenCV reconocimiento de patrones
Programación C/C++
pituqui 0 2,281 Último mensaje 2 Junio 2014, 19:57 pm
por pituqui
[DUDA]Reconocimiento de voz en Java.
Java
NikNitro! 0 1,923 Último mensaje 10 Julio 2014, 12:09 pm
por NikNitro!
generacion de archivos en Java patrones
Java
Beginner Web 0 1,715 Último mensaje 19 Noviembre 2019, 06:08 am
por Beginner Web
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines