Mostrando entradas con la etiqueta evolución. Mostrar todas las entradas
Mostrando entradas con la etiqueta evolución. Mostrar todas las entradas

jueves, 20 de agosto de 2015

allRGB mediante algoritmo genético

Como continuación a mi anterior entrada, en esta voy a mostrar mi progreso con respecto a la creación de imágenes allRGB (con todos y cada uno de los colores existentes en informática). En esta ocasión he utilizado un algoritmo genético (evolutivo) ya que, a diferencia de mi algoritmo anterior, es muchísimo más rápido y se obtienen mejores resultados que con un algoritmo en el que los pasos son definidos estrictamente por el programador. Este es el resultado y a continuación explicaré cómo lo he realizado:



Está disponible en la web allRGB con el título "Globos 2":

http://allrgb.com/globos-2

A diferencia de mi anterior algoritmo, en el que analizaba píxel a píxel buscando el color más cercano sin utilizar (para que no se repitan), en este caso he partido de una imagen que ya contenía todos los colores (16.777.216) pero repartidos de forma aleatoria por la imagen. Se ve algo así como el ruido de los antiguos televisores analógicos. Luego selecciono dos píxeles de la imagen al azar y los intercambio. Si este intercambio hace que la imagen de ruido se parezca más a la original, entonces hago el cambio efectivo. Si no se produce una mejoría, busco otros dos píxeles distintos. Conforme se analizan más y más parejas de píxeles, la imagen se va acercando a la original. Aquí una animación en la que se ve el proceso paulatinamente:




La fórmula que he utilizado para calcular la diferencia ("dif") entre dos colores es esta:

Dif_total = (dif_L^2 + dif_a^2 + dif_b^2) + (dif_R^2 + dif_G^2 + dif_B^2)/10

L, a y b son las coordenadas del espacio de color "Lab", basado en estudios de la percepción humana. El canal L representa la luminosidad del color, y los canales a y b representan el tono del color. Aquí podemos ver una animación de este espacio de color:


Imagen obtenida de la web www.brucelindbloom.com

R, G y B son las coordenadas de color usadas en informática por defecto. Las utilizo en mis cálculos pero dividido entre 10 para darle menor importancia, ya que utilizando el espacio de color Lab se obtienen mejoresa resultados visuales. Además he utilizado las coordenadas elevadas al cuadrado por el mismo motivo, para obtener mejores resultados visuales y mejorar la imagen como conjunto, y no unos píxeles más que otros. En mis primeros intentos utilicé un algoritmo evolutivo que sólo medía la diferencia RGB, y sin elevar al cuadrado. Los resultados no fueron todo lo bueno que me esperaba. Pronto me di cuenta de que debía afinar el algoritmo para hacer que funcionase bien

El último paso para mejorarlo más aún es utilizar dispersión del error (dithering), que todavía tengo que aprender a aplicar correctamente de forma que no se genere excesivo "ruido" en la imagen. También me gustaría programarlo en un lenguaje más rápido como es C++ o incluso C, el rey de la velocidad, o utilizar técnicas como el procesamiento multi-hilo o el Open-CL para usar el procesador gráfico como co-procesador en los cálculos. Poco a poco voy mejorando mis conocimientos... :)

lunes, 6 de abril de 2009

Biología, informática y la Santa Biblia, parte I


Génesis 1:1 "En [el] principio Dios creó los cielos y la tierra."

En esta entrada voy a hacer lo imposible: relacionar tres ramas del conocimiento totalmente distintas una de la otra. Más de uno estará pensando que eso es ridículo, algo asi como relacionar el tocino con la velocidad. Pero la verdad es que incluso el tocino y la velocidad tienen relación entre si: cuanto más grasa corporal tengas, más pesarás y menos ágil serás.

Para entender este post hay que tener muy claro un par de cosas:

1º Creo en un Dios todopoderoso creador de todas las cosas, pero tambien creo en la lógica, en la capacidad de razonar y de explicar las cosas.

2º Para entender y explicar un sistema solar no puedes usar un microscopio, pues verias muy bien los detalles (moléculas, estructuras microscópicas etc) pero perderias la visión global. Cada rama del conocimiento puede considerarse como una herramienta para ver las cosas. Por ejemplo, la construcción de un embalse puede verse desde distintos puntos de vista:
-Para el arquitecto es una obra de ingenieria
-Para el político es lo que le dará más votos
-Para el obrero que lo construye es lo que le dará de comer
-Para el ciudadano significa más agua y electricidad
-Para el agricultor significa mejores cosechas todo el año
-Para el salmón que nació en ese rio es una tragedia...


Pues bien, una vez aclarado esto ya podemos empezar. Los tres puntos de vista que voy a utilizar son:
  1. Genética evolutiva
  2. Inteligencia artificial
  3. Existencia de un Dios creador

La teoría de la evolución ha tenido una gran difusión en parte por el siguiente motivo: te permite ser un ateo intelectualmente satisfecho. Y la verdad es que cada vez menos personas creen en un creador. Muchas dicen que solo creen lo que ven, y podria parecer algo lógico, pero la realidad se escapa de la lógica humana. Hay cosas que existen pero que no vemos e incluso que no comprendemos.

Pongamos por ejemplo el viento: no lo vemos pero sabemos que existe por sus efectos. El viento mueve las hojas, nos refresca en un dia de verano y desplaza las nubes de una zona a otra. Como vemos, aunque nuestros sentidos no pueden percibir el viento (no podemos verlo ni tocarlo) sabemos que existe por los efectos que produce. Pero hay cosas mucho más dificiles de entender, como por ejemplo la materia oscura: no podemos verla ni tocarla, no interactua con los elementos de la materia común, y ni siquiera existen aparatos que puedan percibirla. Lo único que nos lleva a creer en su existencia es el campo gravitatorio que producen. Segun los astrónomos, alrededor del 5% de todo lo que existe en el universo puede verse y medirse directamente (las estrellas, los planetas, cometas, galaxias etc) mientras que el 95% restante no puede verse ni medirse directamente. Son partículas y "cosas" que nos estan atravesando en este instante y no nos damos cuenta...

Algunos científicos aseguran que existen más dimensiones de las 4 que conocemos (las 3 dimensiones espaciales + 1 temporal) y que en esas dimensiones extra pueden existir cosas inimaginables para la mente humana. Podrian existir otros mundos, universos paralelos etc etc... y no podemos ni podremos verlo NUNCA. Para que os hagais una idea, la teoría actualmente en vigor es la teoría de las supercuerdas, segun la cual existirian en total ¡unas 11 dimensiones! aunque otros dicen que 7. Por supuesto es una teoría, y como tal, debe ser puesta a prueba para considerar su validez.

¿Y que pasa con la teoría de la evolución? ¿podemos darla por válida?


Próximamente la segunda parte
 
Contador Gratis