reporte

download reporte

of 11

Transcript of reporte

  • Universidad Autnoma del Estado de Mxico

    Jos Manuel Ramrez Quijano

    Tratamiento de imgenes

    Integracin de libreras ImageMagick con programas hechos en java

    2012A

  • Descripcin General Este programa fue elaborado como la primer parte del proyecto final del curso Tratamiento de imgenes, en l se implementan dos programas hechos previamente (recorte de imgenes, umbralizacin y deteccin de figuras) junto con las libreras de ImageMagick para formar un programa capaz de hacer las operaciones bsicas siguientes:

    - Copia - Inversin (Negativo fotogrfico) - Desplazamientos (Izquierda, Derecha, Arriba, Abajo) - Rotacin - Espejo (Vertical y horizontal) - Transformaciones Logartmicas - Transformaciones de Potencia - Aumento / Disminucin de Brillo - Contraste

    Observacin: Durante las clases de vio que la operacin Clear tambin forma parte del conjunto de las operaciones bsicas, sin embargo esta no se pidi para esta tarea. Adems de las operaciones previamente hechas:

    - Recorte - Umbralizacin - Deteccin de figuras

    Descripcin de las operaciones bsicas

    Copia La funcin de copiar, replica toda la informacin exactamente como esta en la original. Las libreras de JMagick (la implementacin de ImageMagick para Java) incluyen un mtodo llamado cloneImage(), el cual copia toda la informacin. Sin embargo, durante la implementacin de este proyecto, se decidi crear un nuevo archivo con la imagen actualmente abierta, y abrir esa imagen en una ventana independiente, para realizar operaciones. Inversin Esta opcin crea un efecto en la imagen como si fuera el negativo fotogrfico obtenido por una cmara fotogrfica. Para esta tarea se uso el mtodo de Jmagick llamado negateImage(), sin embargo, antes de aplicar dicho mtodo a la imagen, esta debe ser

  • transformada a escala de grises (en caso de que no este en este formato). Una vez hecho se obtiene el negativo y se muestra en pantalla. Desplazamientos Para esta opcin se uso el mtodo rollImage() incluido en las libreras de Jmagick, esta opcin desplaza la imagen en X o Y un numero de pixeles definido por el usuario. Rotacin Esta opcin permite rotar la imagen en mltiplos de 90 si se presiona algn botn de la ventana emergente en la direccin indicada, o indicar un nmero de grados a rotar y presionar el botn Aceptar. Se uso el mtodo rotateImage() de Jmagick. Espejo Este efecto voltea la imagen ya sea horizontal o verticalmente, como si se pusiera un espejo perpendicular a ella. Para el volteo vertical se uso el mtodo flipImage() y para el horizontal flopImage(). Transformacin Logartmica Esta opcin crea un efecto de realce en la imagen, aqu se le pide un valor al usuario. En imgenes en escala de grises, un valor de 40 a 50 unidades da un buen resultado. Para este mtodo no se uso ningn mtodo directo de Jmagick. Para lograr hacer el efecto, primero tuvo que obtenerse un raster para poder modificarlo libremente. Una vez obtenido se calculo lo siguiente por cada pixel y por cada canal RGB de la imagen: ((byte)Math.log(1+canalRGB[i])) * constante;

    Este clculo se hace por cada canal RGB en la imagen (Rojo, Verde y Azul) dentro de un ciclo, que recorre cada pixel en la imagen. Si el valor obtenido de esta operacin es mayor a 255, el valor de igual a 255, ya que es el nmero mximo para 8 bits. Transformaciones de Potencia Esta opcin no fue lograda con xito, por el momento agrega una especie de ruido a la imagen, pero igual que en la transformacin logartmica se obtuvo el raster de la imagen para luego intentar modificar cada pixel.

  • Aumento / Disminucin de brillo Para esta opcin se uso el mtodo de ImageMagick llamado modulateImage(), el cual modifica el brillo de la imagen, adems de la saturacin y el color de la imagen. Este mtodo recibe tres parmetros en trminos de porcentaje. El primer parmetro es el referente al brillo. Contraste Para este procedimiento se uso el mtodo llamado contrastImage() el cual recibe un booleano. False para aumentar y True para disminuir el contraste. El programa cuenta con dos botones (ms y menos) para realizar esta operacin.

    Operaciones incluidas de tareas

    Recorte Esta opcin permite un recorte grafico con el uso del mouse. La opcin no esta disponible hasta que se haya dibujado un rectngulo en pantalla, este puede ser dibujado en cualquier direccin, sin embargo, si se va en una direccin inicial y se retrocede la imagen en pantalla quedara con basura producida por el rectngulo en retroceso, pero al momento de hacer el recorte, esto no afecta la imagen final, ya que solo se toma en cuenta el rectngulo que se genero al ultimo. Al hacer el recorte o cancelar la seleccin se eliminaran los rectngulos sobrantes de la pantalla. Para cancelar la seleccin solo debe dar un clic en cualquier parte de la imagen. Para esta opcin se uso un mtodo de Jmagick y uno propio. Para obtener el pedazo recortado como una nueva imagen se uso el mtodo cropImage(). Para obtener la imagen original sin el pedazo seleccionado (el rea seleccionada en blanco), se obtuvo primero el raster de la imagen, y luego se igualo cada canal de los pixeles que estuvieran dentro del rea seleccionada a blanco (un valor de 255). Despus de usar cualquiera de estos dos mtodos, se muestra la imagen resultante. Umbralizacin Para esta caracterstica tambin se obtuvo el raster de la imagen, una vez hecho esto se recorri todo el arreglo de pixeles obtenidos para sumar el valor de todos y luego obtener el umbral (promedio de valores) de la imagen. Luego dentro de un ciclo se compara cada pixel al umbral, si es menor se asigna un 0 y si es mayor se asigna un 255. Pero antes de hacer todo lo anterior debe transformarse la imagen a escala de grises en caso de que no lo este.

  • Deteccin de figuras En esta opcin se uso exactamente el mismo algoritmo que en la tarea donde se pidi umbralizar y detectar figuras. No logre mejorar el algoritmo, pero lo inclu ya que lo que se considero en esta tarea era lograr una integracin de las tareas pasadas con las libreras de ImageMagick y una interfaz grafica en un programa mas completo. Al inicio trate de idear un algoritmo para todos los casos posibles, sin embargo, debido a que se me estaba complicando, decid empezar por el caso mas bsico de todos, analizar los pixeles solitarios. Entindase por solitarios aquellos pixeles negros rodeados completamente de blanco en sus 8 vecindades. Una vez lograda esta parte, decid seguir con la identificacin de cuadrados y rectngulos sin embargo tambin se dificulto un poco, as que con el consejo de un compaero decid un nuevo enfoque, en el que encerrara la figura en un rectngulo.

    Algoritmo como se describe en el reporte de la segunda tarea

    Una nota sobre los formatos de imagen Aunque Jmagick soporta mltiple cantidad de formatos, en la aplicacin solo se especificaron 4 filtros para formatos especficos para guardar y abrir una imagen. Estos formatos son PGM, GIF, PNG y JPG. Si se quiere abrir o guardar un formato diferente, deber seleccionar la opcin Todos los archivos y especificar el formato manualmente. Al momento de abrir una imagen, aunque la extensin del formato no se un formato de imagen conocido, si el archivo es una imagen, Jmagick podr abrirlo y guardarlo sin problemas.

    Descripcin del entorno grafico de la aplicacin

    Al iniciar la aplicacin se vera la siguiente ventana:

    Al hacer clic en la opcin Abrir imagen se abrir un explorador de archivos para seleccionar una imagen. Elija una imagen y esta se abrir en el visor de imgenes. La opcin Salir termina la ejecucin de programa.

  • Cuando abre una imagen, esta se muestra de esta manera. En la ventana titulada Opciones usted dispondr de los mens Archivo y Editar, con las siguientes opciones: Archivo:

    Editar:

  • Archivo Guardar como Esta opcin permite guardar la imagen desplegada en el visor de imgenes. Cerrar Cierra el men de opciones y el visor de imgenes, pero no la aplicacin. Editar Restablecer Imagen El programa no permite la opcin de deshacer, solo permite regresar a la imagen original, la cual fue desplegada al momento de abrir el archivo. Copiar la imagen Guarda un nuevo archivo de la imagen mostrada actualmente con un nombre y direccin indicado por el usuario, luego la despliega en un nuevo visor con un nuevo men de opciones. Cortar Esta opcin permite recortar un rea de la imagen, esta no se activara hasta que usted dibuje un rectngulo con el mouse sobre la imagen. La opcin Quitar Pedazo mostrara la imagen con el rea seleccionada pintada totalmente de blanco, la segunda opcin Obtener Pedazo mostrara solo el rea seleccionada como la imagen resultante. Para deshacer la seleccin de un clic (presionar y soltar el botn izquierdo del ratn rpidamente) sobre cualquier parte de la imagen. Transformar a Blanco y Negro Convierte la imagen actual a una imagen en blanco y negro. Transformar a Escala de Grises Transforma la imagen actual a una imagen en escala de grises.

  • Ajustar ventana a la imagen Si ha cambiado el tamao del visor de imgenes, con esta opcin puede reajustarlo al tamao de la imagen. Rotar imagen Al seleccionar esta opcin se muestra la siguiente ventana:

    Puede introducir una cantidad de grados a rotar y presionar Aceptar o puede presionar los botones con flechas para rotar 90 grados a la izquierda o 90 grados a la derecha respectivamente. Voltear Imagen Esta opcin hace un efecto de espejo en la imagen, se puede voltear horizontal o verticalmente. Negativo Con esta opcin se hace un efecto de Negativo fotogrfico sobre la imagen. Contraste Aqu se muestra la siguiente ventana:

    Con los botones mostrados puede cambiarse el contraste de la imagen. Brillo Al igual que en contraste se muestra una ventana en la que se modifica el brillo de la imagen.

  • Transformacin Logartmica Esta opcin crea un efecto de realzado en la imagen, el usuario debe introducir un nivel de modificacin. Se recomienda un nivel entre 40 y 50 unidades. Desplazar Se muestra la siguiente ventana:

    Debe introducir la cantidad de pixeles a desplazar, y posteriormente indicar la direccin. Deteccin de Figuras Esta opcin aun no esta refinada, por lo que se encuentra bastante limitada.

  • Notas finales sobre el proyecto

    Para la elaboracin de esta primera parte del proyecto final se uso la implementacin de ImageMagick para Java Jmagick. Algunas operaciones fueron fciles de incluir gracias a que en la clase MagickImage varias de estas ya venan definidas. Las operaciones donde se necesito el raster fueron las mas complicadas de realizar, ya que primero se debi hacer una buena comprensin de como se guardaban los pixeles con los mtodos de JMagick y como podan ser modificados. Una fuente de gran ayuda en este entendimiento fue un manual sobre un proyecto anterior elaborado por Rubi Karina Robledo Salazar para esta misma materia. (Obtenido de http://fi.uaemex.mx/h.a.montes/files/TI%20Reporte%20-%20Rubi%20Karina%20Robledo%20Salazar.pdf ). Este manual me oriento bastante al momento de buscar una forma de obtener el raster de la imagen. El manual mencionado, omita muchos detalles en cuanto a cdigo fuente, sin embargo sirvi para enfocarme en la direccin correcta.

    Siento que falto mejorar un poco el aspecto de la interfaz grafica, ya que no me convence

    usar opciones almacenadas en barras de men, sin embargo, debido a que decid

    concentrarme en realizar las operaciones opte por dejarlo as.

    Sobre la compilacin del cdigo fuente

    Para poder compilar el cdigo fuente exitosamente debe instalarse JMagick como se

    describe en los siguientes pasos:

    1) Go to http://downloads.jmagick.org/6.3.9/ (or any other version of ur choice)

    2) Download ImageMagick-6.3.9-0-Q8-windows-dll.exe and jmagick-win-6.3.9-Q8.zip.

    3) Install the exe file. This will install ImageMagick which is a prerequisite for JMagick to work.

    4) Now extract the zip file. This will give jmagick.dll and jmagick.jar.

    5) Copy the jmagick.jar to you lib folder and include it in the classpath.

    6) Copy the jmagick.dll to the root installation directory of ImageMagic and add it as an entry to the PATH

    environment variable.

    7) JMagick is installed :).

    Los cuales fueron obtenidos de http://stackoverflow.com/questions/5150503/image-

    magick-java

  • Dentro del programa se usan algunas imgenes para dar soporte a la experiencia grafica, sin estas

    imgenes al momento de compilar se lanzaran algunas excepciones. Los archivos tienen los

    siguientes nombres.

    abajo.png

    arriba.png

    derecha.png

    izquierda.png

    left.png

    mas.png

    menos.png

    right.png

    Sin estos archivos algunos botones no se visualizaran correctamente.