Senin, 06 September 2010

Fotos recursivas en color real

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?

Sin embargo hay un grave 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 cálculo 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. Esa paleta es con la intención que quien ve en una computadora un color, en otra, de otra marca, vea exactamente los mismos colores. Dicha paleta se llama websafe, y 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 programa de imágenes recursivas con 216 colores puede verse descrito aquí.

El procedimiento para crear una imagen recursiva de 216 colores, con la webpalette es: 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.
Loas resultados obtenidos con este esquema son suficientemente buenos. Sin embargo, me pregunté ¿qué pasaría si pusiese colores reales. Evidentemente no sería buena idea generar 16 millones de tonos de color, como en el caso de las fotos recursivas en 216 colores. En lugar de eso, lo que puede hacerse es leer cada región, sacar el color promedio y entonces generar una foto con ese color promedio.

Si por ejemplo, tengo una imagen de 500x500 pixeles y decido que cada región tiene 10x10 pixeles. Tendré entonces 50x50 imágenes, es decir, un total de 2500 imágenes diferentes, cada una con los colores promedio de cada región. Esa cantidad de imágenes es más de diez veces las 216 imágenes originales, y en un caso poco usual, si cada región tuviese un promedio diferente, tendría que generar esas 2500 imágenes.
Sin embargo, la experiencia dice que muchas regiones repiten el color promedio. Así, podríamos solamente crear las imágenes que solamente tienen un color único. El problema que entonces surge es como no repetir imágenes. Grabar cada imagen con un número diferente (que son las que forman la biblioteca de imágenes, obliga a después a escribir un programa que las compare cada una con todas las demás y entonces se complica el asunto. Así, se me ocurrió que cada imagen de la biblioteca puede llamarse como su equivalente en color en hexadecimal. Así, una imagen prácticamente negra se llamará en el disco "000000.jpg". Una que tuviese un color específico podría ser "FF98CA.jpg".
Así pues, si se le asigna al nombre de cada imagen promedio filtrada con la imagen original, el color en hexadecimal, entonces si ésta se repite, sobreescribiría la imagen que ya estaba en disco. De esta forma en el disco quedarán solamente los colores únicos de la imagen procesada.
Hice pruebas con este criterio y he aquí los resultados:

Dar click en la imagen para hacer zoom

La imagen de la derecha es la imagen a procesar, la original pues. La de la izquierda es el resultado del proceso usando colores reales y la del centro es usando 216 colores. El resultado mejora bastante con respecto a 216 colores.

Dar click en la imagen para hacer zoom

De nuevo, puede verse a la derecha la imagen original, en medio al imagen con 216 colores y a la izquierda, la imagen con colores "reales". De nuevo, aunque no parece muy significativa la diferencia, en realidad el resultado es mejor.

A quien le interese este programa, escríbame a morsa@la-morsa.com y se lo enviaré sin ningún costo a su correo.

Tidak ada komentar:

Posting Komentar