Tuesday, June 24, 2008

Imágenes recursivas

Acabo de descubrir que nunca he escritode mi software de Imágenes Recursivas aquí en mi blog. Hay una entrevista, en donde hablo de ello aquí, pero antes no había tocado a fondo el tema... Entremos en materia (por cierto, a quien le interese probarlo mándeme un mensaje de correo a morsa@la-morsa.com y a vuelta de correo recibirá el software) :

Introducción

La teoría de la creación de imágenes recursivas, es decir, imágenes que se recurren a sí mismas, (o dicho en otras palabras, imágenes creadas con otras imágenes), es verdaderamente simple. En el caso particular de imágenes creadas con la misma imagen (en tonos de gris), la teoría al respecto puede describirse de la siguiente manera:

  • Tomar una imagen a procesar (la que llamaremos imagen fuente)
  • Pasarla a tonos de gris
  • Copiar esa misma imagen 20 veces pero con diferentes tonos de gris, en un gradiente que va de muy claro a muy oscuro
  • Hacer una rejilla en la foto original. Tomar cada pequeña región (una sección de la rejilla), y calcular el tono de gris de la misma.
  • Sustituir el tono de gris encontrado por la foto con el tono de gris más próximo.

Queda claro que hacer imágenes recursivas con la misma imagen fuente requiere de generar las imágenes que sustituirán regiones de puntos. Para el caso del blanco y negro es relativamente fácil, porque la paleta de tonos de grises no es mayor que 256 tonos de gris. Los componentes en gris para el negro, en RGB son R=0, G=0, B=0. Para un negro menos oscuro, por decirlo de alguna manera será: R=1, G=1, B=1, y así sucesivamente hasta llegar al blanco, el cual tendrá como componentes RGB las siguientes: R=255, G=255, B=255.

En la decisión del diseño del software de fotos recursivas en tonos de gris, la ocurrencia más simplista fue usar 20 fotos con tonos de gris diferentes. Para el efecto deseado fueron suficientes. Sin embargo, si quisiera hacer lo mismo con fotos a color ¿qué habría que hacer?


Problema de la recursión a color

Básicamente la dificultad reside en que la gama de tonos que hay que tener presentes crece muy rápido en color que en blanco y negro. Mencionamos antes que 256 tonos de gris son más que suficientes para pintar una imagen blanco y negro. Sin embargo, en color, las cosas son muy diferentes.

Si se quisiera tener una gama completa de imágenes (la misma imagen) con diferentes colores, ¿cuántos colores necesitaríamos usar? Una computadora personal puede desplegar actualmente millones de colores. Desde luego, no vamos a poner esa cantidad de imágenes. Quizás un calculo conservador podría ser 256 para el Rojo, 256 para el verde y 256 para el azul. Eso hace que la cantidad de imágenes a crear sea de 768 mínimo, considerando que dejaríamos muchos colores fuera del espectro de trabajo, las cuales puede ser costoso en tiempo y espacio en disco. ¿qué otra posible solución existe? La solución es verdaderamente simple: usar una paleta de colores disminuída.

Afortunadamente Netscape creó semejante paleta, con la intención que quien ve en una computadora un color, en otra, de otra marca, vea exactamente los mismos colores. Así, la gente de Netscape generó la llamada paleta websafe, que consta de 216 colores y esto da un buen margen para una gama reducida, pero razonablemente completa de los siete colores del arco iris. Desde luego que la paleta de colores websafe ya no es necesaria considerando que las tarjetas de vídeo manejan millones de colores y así, dicha paleta resulta inútil en términos generales, pero para esta aplicación, resulta formidablemente buena.

El procedimiento es entonces parecido al de crear imágenes recursivas en blanco y negro (cuando decimos blanco y negro, hablamos de tonos de grises). Dicho procedimiento va como sigue:

  • Tomar una imagen a procesar (la que llamaremos imagen fuente)
  • Copiar esa misma imagen 216 veces pero filtrando cada imagen con un color websafe diferente. Este filtro es equivalente a poner una mica de un color específico sobre la imagen original.
  • Hacer una rejilla en la foto original. Tomar cada pequeña región (una sección de la rejilla), y calcular el color promedio de la misma.
  • Sustituir la región analizada por la foto con el color más próximo.

Aunque el procedimiento suena bastante simplista, hay que entender cómo es que la computadora puede "ver" los colores de la región analizada y los de cada foto. En realidad todo se basa en algo que puede definirse como la distancia entre dos colores. A eso le denominamos una métrica. Para entender esto, considérese que ponemos en los ejex X, Y y Z los colores R, G y B respectivamente. Así, tenemos un sistema de coordenadas, en donde cada color de la paletta websafe es un punto en el espacio tridimensional. Si ahora, tomamos una región de la imagen a procesar y la colocamos en nuestro sistema de coordenadas, ocupará un punto en ese espacio. De ahí podemos concluir que el punto de ese color en particular podrá ser sustituido por el punto más cercano geométricamente hablando. Es decir, lo que tenemos que hacer es calcular la distancia de un punto a otro.

Por suerte, la geometría analítica tiene una ecuación elemental para encontrar la distancia entre dos puntos:

Distancia(x,y) = raíz cuadrada ((Rx-Ry)^2 + (Gx-Gy)^2 + (Bx-By)^2)

donde Rx, Gx, Bx, Ry, Gy, By son las componentes RGB de X y Y, respectivamente.

Así, tenemos entonces una manera fácil de encontrar la distancia entre dos puntos, o mejor dicho, entre dos colores. A esto le llamamos una métrica y en este caso la denominamos "métrica euclidiana". Lo que hacemos es, entonces, calcular el RGB de la región de la imagen fuente contra el RGB de cada una de las fotos en la biblioteca y poner la que tenga la distancia mínima.


Funcionamiento del software

El programa que genera las fotos recursivas en color tiene diferentes opciones. He aquí una breve descripción de lo que hace cada opción del menú:

Opción Archivo

Contiene las siguientes opciones, las cuales se describirán en un momento:

  • Leer Imagen
  • Crear imágenes
  • Borrar imágenes
  • Salir
Leer imagen (Archivo)

Lee la imagen fuente, es decir, la imagen a la cual le quedamos aplicar el procedimiento de fotos recursivas a color. No hace nada más. Debe aclararse, sin embargo, que una imagen sensata es de 500x500 pixeles y que no exceda los 250 Kbytes. Imágenes muy grandes podrían ser inaccesibles al sistema o bien mandar errores inesperados, e incluso congelar el sistema complete (no sólo el software, sino el sistema operativo mismo), obligando a re-arrancar.


Crear imágenes (Archivo)

Para poder hacer fotos recursivas se necesita usar la foto original, pero contenida en una biblioteca de imágenes, todas con diferente color, en este caso, todas filtradas a través de los colores websafe.

Una vez que la imagen fuente ha sido leída al sistema, se debe usar esta opción para crear las 216 imágenes filtradas, cada una con un color de filtro determinado, el cual se aplicará sobre la imagen original (todo esto es automático, el usuario no tiene más que observar lo que hace el sistema). Las imágenes creadas se llamarán 1.jpg, 2.jpg, ... , 216.jpg. Cada imagen contiene entonces la imagen fuente filtrada con un color específico de la paleta websafe. Esto, como ya se dijo, es equivalente a poner una mica de un color determinado sobre cada imagen. Estrictamente esto es un sistema de filtrado.

En el proceso de creación, se generan 216 imágenes bmp, las cuales se borran al terminar la creación de las imágenes de la biblioteca.


Borrar imágenes (Archivo)

Si deseamos empezar un nuevo proceso, podemos borrar las imágenes 1.jpg, 2.jpg, ... , 216.jpg con esta opción. En realidad no es estrictamente necesario considerando que cuando se genera una nueva colección de imágenes, se sobreescribe si ya existe ésta. Esta opción sólo borra las imágenes mencionadas (1.jpg, ..., 216.jpg). No borrará otras imágenes que se encuentren el el directorio de trabajo del software.


Salir (Archivo)

Termina la ejecución del programa



Opción Procesa

Genera el mosaico de fotos recursivas en color. El sistema contiene una opción (encendida por omisión), que permite ver el proceso de generación del mosaico. El software genera un archivo, que se llama igual que la foto o imagen fuente, pero con extensión '.txt'. Así, si la foto fuente se llama Ilse.jpg, se creará un archivo Ilse.txt, el cual contendrá la información para crear el mosaico de fotos recursivas mediante el programa out01.exe, incluido también en este programa debe aparecer en el directorio en donde se instaló el software).

Opción Ayuda

Esta opción contiene dos posibilidades:
  • Manual en línea
  • Créditos

Manual en línea


Muestra este documento, sí, éste que está leyendo.

Créditos

Muestra más información sobre el autor de este programa y la forma de localizarlo.



Programa generador de imágenes recursivas out01.exe

Este programa es un sistema aparte, que toma el archivo generado, como el del ejemplo, Ilse.txt, y genera la imagen recursiva, la cual puede ser después guardada como un archivo JPG. Cabe señalar que no se recomienda intentar crear mosaicos recursivos muy grandes porque out01.exe no podrá guardarlos a disco. Mandará un error del cual el autor no tiene control, pero que se ha detectado es problema de la biblioteca de imágenes JPG que maneja Delphi, la herramienta con la que fue creado este sistema.

El sistema generador de imágenes recursivas le pedirá que le indique, en primera instancia, en dónde se encuentra el archivo de imágenes de la biblioteca con la que va a trabajar. En el caso de este software, es, en general, el mismo directorio de trabajo de donde se instaló el propio software.

Una vez indicada la trayectoria de la biblioteca de imágenes, use la primera opción para crear la imagen recursiva. Dé el nombre de la imagen .txt que quiere procesar. Si todo sale correctamente, verá frente a sus ojos la creación del mosaico recursivo.

NOTA IMPORTANTE: Out01.exe aparece en el mismo directorio donde se instaló el software de recursión a color y es un programa separado.


Problemas detectados

El software usa la paleta websafe, la cual contiene muchos tonos pastel. El efecto final es interesante, pero sin duda muy pastel.

La creación de las 216 imágenes se hace espectacularmente rápido. Se hizo hincapié en el desarrollo de este software en la necesidad de que esta parte de creación de imágenes fuese muy, pero muy rápida.

Como ya se mencionó, imágenes arriba de los 3 megas en total no pueden ser creadas. Más allá de ello el sistema de generación de mosaicos recursivos generará un error y no podrá guardar a disco la imagen generada. Esto, repetimos, es un problema de la librería de manejo de imágenes JPG de Delphi y no puede ser, por el momento, solucionado por el autor del software. De hecho, imágenes mayores de 16 megas es un problema enorme para el sistema operativo Windows. Para solventar este problema de las imágenes tan grandes y hacer imágenes incluso tamaño poster, necesita consultar a la Morsa (morsa@la-morsa.com).

Es posible crear fotos recursivas usando una imagen fuente y otra biblioteca distinta de imágenes. Para ello, primero procese la colección de imágenes que desea. Una vez hecho esto, cargeu la nueva imagen y procese. El sistema usará la biblioteca generada, aunque sea de otra foto fuente. Es un efecto final también interesante.

4 comments:

Bacho said...

Hey morsa, saludos desde Argentina, muy interesante tu soft para las imagenes recursivas, de donde me lo podria descargar?

abrazos:)

Morsa said...

Bacho,

dame una dirección de correo electrónico (que no sea gmail porque rebota) y te mando el software

saludos
Manuel

RIPER_EL_NEW said...

Hola Morsa, Genial tus artículos, Saludos

elnew_luis@hotmail.com

Morsa said...

gracias. ¿Qué te tomas?