JDETECTOR

Alumnos

Nadia Herrera R.
Rodrigo Vidal M.

  1. Introducción
  2. Desarrollo
  3. Bosquejo de solución
  4. Problemas
  5. Ejecución - Caso de Uso
  6. Conclusiones
  7. Referencias
  8. Documentacion
  9. Archivos
Introduccion

En el siguiente proyecto, se presenta un método para seguir la trayectoria de una imagen animada. Esto significa, que dada una secuencia de gif, en la cual habrán objetos en movimiento, el programa será capaz de identificar, filtrar, y seguir a estos elementos en movimiento relativo.

Desarrollo

Para desarrollar la aplicación de seguimiento debemos analizar las características de una imagen gif y a partir de ésta, desarrollar un algoritmo que permita determinar cual sera el objetivo a seguir.
Una imagen se compone por un cierto número de píxeles, donde cada uno guarda la mezcla RGB que compone el color de cada punto. Además, una imagen contiene información referida a las características propias de la imagen, en nuestro caso particular nos interesa obtener dimensiones de ancho y alto, las cuales están referidas a la cantidad de píxeles.
Una vez que se ha identificado éstas características, se desarrolla un algoritmo que permita separar las imagenes del gif, para analizar imagen por imagen. Luego se identifican aquellas imagenes estáticas dentro de la secuencia de imagenes y se las elimina, dejando de este modo, sólo aquello que cambia en el tiempo. Luego se procede a identificar el objeto en movimiento y se le agrega una línea entre las distintas secuencias de su recorrido. Así se observa que se recorre el movimiento trazándolo con una línea de color.
Cada imagen por separado, debe tener un formato adecuado para ser manejada en el programa. Para ello se utiliza una variable de tipo Image, sin embargo, ésta variable no permite manejar directamente el valor de cada píxel. Para solucionar el manejo de los píxeles, es necesario transformar la información de la variable a un buffer (BufferedImage). Obtenida esta información, cada pixel es analizado y comparado con el pixel de la misma posición pero de la imagen inmediatamente anterior. En caso de que el valor de ese pixel no varie, esa información es desechada y se continúa con el siguiente pixel, hasta encontrar aquellos pixeles cuya variabilidad indican que hay un movimiento en las imagenes. Luego se determina cual es el centro aproximado de la imagen y se setea su valor. Desde ese punto se traza una linea al punto seteado en la imagen anteriormente procesada, la cual será guardada para ser repintada en las siguientes operaciones.
Realizada ésta operación, se crea un panel dentro de un frame que permite desplegar por pantalla la imagen original y las operaciones realizadas.

Bosquejo



Problemas

Básicamente el problema mayor, se refiere a los tipos de imágenes que se le pueden aplicar al programa. Esto significa que habrán algunas imagenes gif que no se podrán ocupar, ya que los requerimientos para analizar la imagen son los siguientes: un fondo general simple con un sólo color no compuesto. Pueden haber objetos detenidos ya que estos serán filtrados, pero estos deben ser simples, iguales y no cambiar entre las distintas imagenes del gif.
Inicialmente la mayor dificultad encontrada en el desarrollo del proyecto correspondió al manejo de imágenes en Java, específicamente a la forma que permitiera el manejo de las dimensiones de la imagen y acceder a sus píxeles. En un principio se copia la imagen a una variable de tipo imagen la cual no permite manejar los píxeles, lo cual se solucionó utilizando una nueva variable en la cual se dibuja la imagen, y por medio de métodos de manejo de imágenes se logra acceder los píxeles. No obstante se encuentra con la dificultad en el manejo de los píxeles que conforman el fragmento, lo cual se solucionó mediante el uso de arreglos, que se pasasan como parámetros entre las clases.
Finalmente, dado razones de tiempo no se desarrolla una interfaz más simple para el usuario, en la cual permita desplegar una GUI para el manejo de archivos, no obstante se cumple con el objetivo principal del proyecto

Ejecucion - Caso de Uso

Caso de Uso: inicialización
1. El usuario escribe por consola java JDetector
2. Se despliega una ventana de dialogo, donde se ingrea el nombre de la imagen de tipo gif animado (sin la extención)
2. Se abre una ventana, con la imagen y su réplica analizada.

Variación 1
1.1 Al llegar al paso 2, si el nombre no correspnde a una imagen o el archivo no existe, se arrojará una advertencia a consola y se terminará el programa.
Variación 2
1.2 Al llegar al paso 2, si se presiona el boton "aceptar" sin ingresar un texto, se arrojará una advertencia a consola y se terminará el programa.
Variación 3
1.3 Al llegar al paso 2, si se presiona el boton "cancelar" sin ingresar un texto, se abrira un archivo por defecto, el que sera analizado inmediatamente.

Conclusiones

El programa realiza, bajo ciertas condiciones, lo que se había planeado inicialmente.




Java tiene una gran variedad de clases que manejan el concepto de imagen para diferentes funcionalidades, sin embargo gran parte de la documentación esta en inglés lo que dificulta el trabajo de comprensión respecto del uso de cada funcionalidad. Sin embargo al conocer la finalidad de las clases necesarias, se cuenta con herramientas poderosas para el desarrollo de trabajos complejos en un tiempo relativamente corto.
Por su parte el proyecto en sí, tiene una gran gama de posibles usos, desde edición de imágenes, efectos especiales hasta, en un trabajo más completo, podría incluir seguridad.

Referencias

  1. Java
  2. A Visual Index to the Swing Components
  3. JavaTut (en castellano) ... y con manzanitas!!!

Archivos

  1. JDetector.java
  2. Dibujador.java
  3. OriginalPanel.java
  4. ResultadoPanel.java
  5. GifDecoder.java
  6. punto.gif
  7. bola.gif
  8. hombre.gif