CINVESTAV-IPN

Maestría en Ciencias de la Computación

Jose Luis Ortigosa Flores

Realidad Aumentada

Tarea 1: Procesamiento de imagenes

MATERIAREALIDAD AUMENTADA
ALUMNOORTIGOSA FLORES JOSE LUIS
FECHA ENTREGA17-SEP-2015

Actividades

  1. Realizar patrones
  2. Tomar fotos sobre un plano
  3. Convertir a tono de grises
  4. Scimagen
    1. Reducir el tamaño de las fotos
    2. Calcular histograma de las fotos
    3. Umbralizado de las imagenes
Programas

Realización de Patrones

Descripción de la actividad
Realizar patrones cuadrados a partir de triángulos rectángulos del tamaño de hojas carta.

Los patrones Fueron realizados con el programa xFig
. Se crearon 5 patrones diferentes que son los siguientes:

Archivos *.fig (xFig)
Patron1.fig
Patron2.fig
Patron3.fig
Patron4.fig
Patron5.fig

Cada uno de los patrones se imprimio en hojas tamaño carta.

Tomar fotos

Descripción de la actividad
Tomar fotos a los patrones impresos que previamente fueron colocados sobre una superficie plana, que en este caso fueron pegadas en una pared.

Se tomaron fotos a una resolución de 1600 por 1200 pixeles con un celular Nokia Luimia 810 (con una cámara de 8Mpx) a una tamaño de 3Mpx para lograr la resolución deseada.
A cada patron se le tomaron 5 fotos, haciendo un total de 25 fotos.

Fotos tomadas a los patrones
foto 1 foto 2 foto 3 foto 4 foto 5
foto 6 foto 7 foto 8 foto 9 foto 10
foto 11 foto 12 foto 13 foto 14 foto 15
foto 16 foto 17 foto 18 foto 19 foto 20
foto 21 foto 22 foto 23 foto 24 foto 25

Convertir fotos a tono de grises

Descripción de la actividad
Usando el comando convert
convertir las fotos de color *.jpg a tono de grises con extención *.pgm

convert foto.jpg -depth 8 foto.pgm

Para convertir las 25 fotos a tonos de grises se hizo un pequeño script de bash para convertir todas las fotos

Script Bash para convertir fotos a escala de grises
Fotos convertidas a formato *.pgm y escala de grises
foto 1 foto 2 foto 3 foto 4 foto 5
foto 6 foto 7 foto 8 foto 9 foto 10
foto 11 foto 12 foto 13 foto 14 foto 15
foto 16 foto 17 foto 18 foto 19 foto 20
foto 21 foto 22 foto 23 foto 24 foto 25

Reducción de tamaño de las fotos

Descripción de la actividad
Crear un programa en C que use la biblioteca SCimagen para reducir el tamaño de las fotos a 4 veces el tamaño original.

Se creo un programa con el lenguaje C para reducir el tamaño de una imagen *.pgm a la mitad. El programa se aplico dos veces a cada imagen. La idea general del programa fue tomar áreas de grupos de 4 pixeles y sacarles un promedio para que esté número fuera el valor que representaría a un pixel en la imagen reducida que el programa generaría. Lo anterior se puede ver en el fragmento de codigo siguiente:

Fragmento de código en el que se calcula el promedio de 4 pixeles y dicho valor se asigna al pixel de la imagen reducida.

Programa: reduccionImagen.tar

Para compilar el programa se requiere modificar la variable PATH_SCIMAGEN en el archivo makefile, para que apunte al directorio en donde se localizan los archivos matrix.h, pnm.h además de sus respectivos *.c.

Debido a que el programacreado sólo puede reducir por la mitar una imagen a la vez se crea un script para bash, para que el programa realice la reducción por dos veces.

Script bash que aplica la reducción a las imagenes en escala de grises.

Al final de la reducción las imagenes quedan una resolucion de 300x400 pixeles

Imagenes reducidas.
Imagenes reducidas de tamaño.
foto 1 foto 2 foto 3 foto 4 foto 5
foto 6 foto 7 foto 8 foto 9 foto 10
foto 11 foto 12 foto 13 foto 14 foto 15
foto 16 foto 17 foto 18 foto 19 foto 20
foto 21 foto 22 foto 23 foto 24 foto 25

Histograma

Descripción de la actividad
Generar un histograma para cada imagen a escala de grises reducida para lo que se requiere crear un programa en C que genere un archivo con los datos necesario para funcionar como entrada para el programa gnuplot de tal manera que se genere un histograma pora cada imagen.

Programa

El programa que se creó se encarga de recibir una imagen en escala de grises reducida, y se encarga de generar un archivo *.txt de salida con dos columnas de datos separadas por tabuladores, la primer columnas representan las clases y la segunda la frecuencia.

Para generar un histograma se requiere de una tabla de frecuencias la tabla de frecuencias tiene dos columnas importantes, la columna clases y la columna frecuancias. Que en este caso son los arreglos c y fx respectivamente.
Para calcular las clases primero debemos de usar la típica fórmula para conocer el número de clases

Los siguiente que se necesita es conocer la amplitud del intervalo que esta dado por la división de valor máximo entre el número de clases. Como se puede ver el el fragmento de código, primero calculamos el número de clases y la amplitud del intervalo, para después generar la tabla de frecuencias.

Código que se encarga de generar las clases y frecuencias

Después de llenar la columna con las clases se procede a calcular la cantidad de elementos que cae en cada clase, para lo que se requiere visitar cada pixel de la imagen.

Al finalizar el programa crea un archivo de texto con las dos columnas de datos separadas por tabuladores.

Programa: histograma.tar

Generación de histogramas

Para generar la gráfica de los datos requerimos pasarle esos datos a gnuplot para lo cual se creo el siguiente script para gnuplot.

El escript espera encontrar dos paramentros uno llamado inputData y el otro outputGraph que son el nombre del archivo con los datos numericos para generar el histograma y el otro es el nombre de la imagen *.png que se generara como salida.

Finalmente para unir las salidas de ambos programas, tanto el que genera las tablas de frecuencia como el script que genera el gráfico, se requere de otro script en bash.

Script para generar tablas de frecuencias e histogramas.

Como se puede ver en el script, esté genera los archivos con las frecuencias así como los graficos para cada una de las imagenes.
En la siguiente tabla se muestran los histogramas y las tablas de frecuencias de cada una de las 25 imagenes.

Histograma de las 25 imagenes reducidas y a escala de grises.
histo1 histo2 histo3 histo4 histo5
histo6 histo7 histo8 histo9 histo10
histo11 histo12 histo13 histo14 histo15
histo16 histo17 histo18 histo19 histo20
histo21 histo22 histo23 histo24 histo25

Umbralización global de imagenes

La función de umbralización es la siguiente:

Basado en los histogramas se puede especificar el valor de u=60, debido a que es el lugar en el que se separan aproximadamente las dos mayorias de valores.

Se creó un pragrama para convertir las imagenes reducidas y a escala de grises a imagenes umbralizadas.

Fragmento de código que se encarga de umbralizar imagenes.

Programa: umbralizador.tar

De lo importante de la función de arriba, esta en las lineas 65 a 69, que es en donde se especifica la función de umbralizado.
A diferencia de la función matemática aqui usamos 255 en lugar de 1 debido a que en 255 significa blanco.

Para converitr todas las imagenes reducidas y a escala de grises a una imagen en blanco y negro se usó el siguiente script de bash.

Script para convertir imagenes en escala de grises a blanco y negro.

El escript recorre todas laas imagens que estan en el directorio reducidas las transforma con con el programa y las imagenes en blanco y negro son almacenadas en un directorio llamado umbralizadas.

Imagenes umbralizadas.
Imagenes umbralizadas
img 1 img 2 img 3 img 4 img 5
img 6 img 7 img 8 img 9 img 10
img 11 img 12 img 13 img 14 img 15
img 16 img 17 img 18 img 19 img 20
img 21 img 22 img 23 img 24 img 25

Programas

reduccionImagen.tar
histograma.tar
umbralizador.tar