Sugerencias ... Si buscas algún código de programación en especifico , solo escribe alguna palabra relacionada , como por ejemplo : Calculadora , Metodo , Burbuja , Applets ... etc

Buscar

La Liberia JAI (Java Advanced Imaging (JAI) ) es una API que permite el manejo de funciones de entrada , salida y procesamiento de imágenes de una manera más sencilla y cómoda . Contiene una gran cantidad de métodos relacionados con el tratamiento de imágenes. los cuales comúnmente se te conocen como :

• Adquisición de imágenes.
• Espacios de Color.
• Mejoramiento de imágenes.
• Manipulación de imágenes.
• Manipulación geométrica.
• Análisis de imágenes
• Renderizado.
• Procesamiento de imágenes.


El tratamiento de imágenes tiene muchas aplicaciones , una de ellas es la segmentación de imágenes digitales para el análisis de áreas determinadas . En este caso empleare la segmentación para el conteo de pixeles que hay en una región (la foto de un mango) , utilizando los métodos de Segmentación de imágenes por umbralizacion , erosión y dilatación.

Codigo Fuente

JAVA:
  1. // Librerias
  2.  
  3. import java.awt.*;
  4. import javax.swing.*;
  5. import java.awt.image.BufferedImage;
  6. import javax.media.jai.PlanarImage;
  7.  
  8. // Clase ...
  9. public class testJAI extends JFrame {
  10.    
  11.     private filtros Aplicar;
  12.     private Conversion Conver;
  13.     public testJAI() {
  14.          super("Erosion y Dilatacion de testJAI");
  15.          Aplicar = new filtros(320,240); // Definimos la dimenciones de la imagen
  16.          Conver = new Conversion();
  17.  
  18.     }
  19.    
  20.     // Dibujar Imagen
  21.     public void paint(Graphics g) {
  22.    
  23.          Graphics2D g2 = (Graphics2D)g;
  24.          //(1) Obetener Imagen
  25.          Image im = Toolkit.getDefaultToolkit().getImage("mango.gif");
  26.          BufferedImage Buff = Conver.toBufferedImage(im);
  27.           g2.drawImage(Buff, 0, 20, this);
  28.        
  29.         
  30.          //(2) Conversion a escala de grises
  31.          Buff = Conver.convertToGrayscale(Buff);
  32.            g2.drawImage(Buff, 0, 260, this);
  33.           
  34.          //(3) Aplicar Umbralizacion
  35.          Buff = Aplicar.Binarizacion(Buff,5);
  36.            g2.drawImage(Buff, 320, 20, this);
  37.         
  38.          //(3) Obetener Imagen
  39.          Buff = Aplicar.erode(Buff);
  40.            g2.drawImage(Buff, 320, 260, this);
  41.         
  42.         
  43.         
  44.         
  45.     }
  46.    
  47.     // Cargar Jframe
  48.     public static void main (String args[]) {
  49.          testJAI ventana = new testJAI();
  50.          ventana.setDefaultCloseOperation(EXIT_ON_CLOSE);
  51.          ventana.setSize(640,500);
  52.          ventana.setVisible(true);
  53.     }
  54. }

JAVA:
  1. // Clase en Java para el manejo de Filtros en java Usando la Libreria JAI
  2. import javax.media.jai.*;
  3. import javax.media.jai.JAI;
  4. import javax.media.jai.KernelJAI;
  5. import javax.media.jai.PlanarImage;
  6. import java.awt.image.renderable.ParameterBlock;
  7. import java.awt.image.BufferedImage;
  8. import java.awt.image.RenderedImage;
  9. import java.awt.Color;
  10.  
  11.  
  12.  
  13. public class filtros {
  14.    
  15.     private int Ancho;
  16.     private int Largo;
  17.     private int color[];
  18.    
  19.         
  20. // Constructor
  21.     public filtros(int Largo , int Ancho ) {
  22.        
  23.         this.Ancho = Ancho;
  24.         this.Largo = Largo;
  25.    
  26.     color = new int [2];
  27.    
  28.      // Blanco ...
  29.         color[0] = new Color (255,255,255).getRGB();
  30.            
  31.         // Negro ...
  32.         color[1] = new Color (0,0,0).getRGB();
  33.  
  34.    
  35.    
  36.     }
  37.  
  38. // Filtro para Erocion     
  39. public BufferedImage erode(BufferedImage img)   {
  40.  
  41. // Cargar Matrix al Kernel 
  42.         KernelJAI kernel = new KernelJAI(7, 7, new float[]{
  43.                                                             0, 0, 0, 0, 0, 0, 0,
  44.                                                             0, 1, 1, 1, 1, 1, 0,
  45.                                                             0, 1, 1, 1, 1, 1, 0,
  46.                                                             0, 1, 1, 1, 1, 1, 0,
  47.                                                             0, 1, 1, 1, 1, 1, 0,
  48.                                                             0, 1, 1, 1, 1, 1, 0,
  49.                                                             0, 0, 0, 0, 0, 0, 0
  50.                                                             });
  51.         ParameterBlock pb = new ParameterBlock();
  52.         pb.addSource(img);
  53.         pb.add(kernel);
  54.         return JAI.create("erode", pb).getAsBufferedImage();
  55. }
  56.  
  57. // Conversion de imagen a escala de grises
  58.  
  59. public  BufferedImage Binarizacion (BufferedImage ImageBfrd , int n ) {
  60.        
  61.     // Variables del metodo ...
  62.    
  63.         long Umbral = 500000;
  64.        
  65.     // Creamos un nuevo BufferedImage ...
  66.        
  67.         BufferedImage Nueva_Imagen = new BufferedImage(320,240,BufferedImage.TYPE_INT_RGB) ;
  68.  
  69.     // Proceso de Binarizacion (recorrido del mapa de bits )
  70.        
  71.         for (int i = 0; i <Largo ; i ++) {
  72.         for ( int j = 0; j <Ancho ; j ++ ) {
  73.        
  74.             if ( ImageBfrd.getRGB(i,j) <-Umbral * n) {
  75.                
  76.        
  77.                 Nueva_Imagen.setRGB(i,j,color[1]);
  78.            
  79.             } else {
  80.            
  81.                 Nueva_Imagen.setRGB(i,j,color[0]);
  82.            
  83.             } // fin del if
  84.        
  85.             } // fin del for j
  86.        
  87.         } // fin del for i
  88.    
  89.     //ImagenOriginal = Nueva_Imagen;
  90.    
  91.         return Nueva_Imagen;
  92.    
  93.     } // fin del metodo
  94.    
  95. } // fin de la clase

JAVA:
  1. // Librerias ----
  2. import java.awt.*;
  3. import java.awt.image.BufferedImage;
  4. import javax.swing.ImageIcon;
  5. import java.awt.color.*;
  6. import java.awt.image.*;
  7.  
  8.  
  9. public class Conversion {
  10.    
  11.     public BufferedImage toBufferedImage(Image image) {
  12.         /** miramos uqe la imagen no sea ya una instancia de BufferedImage */
  13.         if( image instanceof BufferedImage ) {
  14.                 /** genial, no hay que hacer nada */
  15.                 return( (BufferedImage)image );
  16.         } else {
  17.                 /** nos aseguramos que la imagen está totalmente cargada */
  18.                 image = new ImageIcon(image).getImage();
  19.                 /** creamos la nueva imagen */
  20.                 BufferedImage bufferedImage = new BufferedImage(
  21.                                                       image.getWidth(null),
  22.                                                       image.getHeight(null),
  23.                                                       BufferedImage.TYPE_INT_RGB );
  24.                 Graphics g = bufferedImage.createGraphics();
  25.                 g.drawImage(image,0,0,null);
  26.                 g.dispose();
  27.                 return( bufferedImage );
  28.         }
  29.     } // fin del metodo
  30.  
  31. static BufferedImage convertToGrayscale(BufferedImage source) {
  32.  
  33.         ColorConvertOp op = new ColorConvertOp( ColorSpace.getInstance(ColorSpace.CS_GRAY), null);
  34.          BufferedImage imagenGris = op.filter(source, null);
  35.     return (imagenGris);
  36.  
  37. } // fin de la metodo
  38.        
  39.    
  40. }// fin de la clase


Etiquetas: ,
Publicado en Codes, Java, Noticias


 10 comentarios


Tony :

gracias por el codigo fuente y quisiera mas ayuda con ejemplo de JAI..

Duvallier :

apenas comenzamos con la documentación de JAI , estamos desarrollando un proyecto de visión artificial utilizando segmentación de imágenes .. estaré publicando ejemplos por lo menos una vez por semana .. saludos

jesus :

hola eschido el codigo yo estoy realizando algo similar es la clasificacion del durazno y requiero de toda la ayuda posible si me ayudaran les agradeseria nesesito ese codigo en php si me ayudaria n pues al terminar el proyecto lo compartiria gracias

DIEGO :

HOLA PODRIAS EXPLICAR COMO CORRER EL CODIGO Y COMO OBTENR LA IMAGEN

Israel :

buenas tardes, quisiera saber si el JAI, ayuda a una impresion multicapa

JackDaniels :

Duvallier: Estoy por empezar algo de reconocimiento de imágenes (de lo cual no tengo idea) pero voy a aprender jeje. La aplicación la hago en JAVA, asi que cuando vi este código y leí tu comentario sobre ese proyecto, me interesó. Si necesitas ayuda, contá conmigo.(no se mucho, pero ganas tengo y en JAVA y programación en gral. tengo experiencia).
Ahi tenes mi e-mail.

un abrazo!

Harbor :

Duvallier: Estoy por empezar algo de reconocimiento de imágenes (de lo cual no tengo idea) pero voy a aprender jeje. La aplicación la hago en JAVA, asi que cuando vi este código y leí tu comentario sobre ese proyecto, me interesó. Si necesitas ayuda, contá conmigo.(no se mucho, pero ganas tengo y en JAVA y programación en gral. tengo experiencia).Ahi tenes mi e-mail.
+1

Camila :

Hola me intereso tu articulo para la parte de procesamiento, estoy trabajando en un proyecto de reconocimiento y si puedes contactarme seria excelente

Arthemysa :

Hola, estoy bastate interesada en contactarme contigo pues estoy haciendo un software de reconocimiento por color y forma pero creo q me estoy enredando demasiado.
Agradezco si me puedes colaborar

Andrea :

Hola me gustaria saber donde puedo obtener mas informacion ,en especial acerca de filtros


 Deja un comentario