"ARTIFICIAL EVOLUTION FOR IMAGES"

 (por Esdras Soares)


INTRODUCAO

         Este trabalho consiste em gerar imagens a partir de uma arvore de expressoes combinada com outras expressoes. A tecnica utilizada para isto sao os Algoritmos Geneticos.
         As  implementacoes mais comuns de AG diferem deste trabalho basicamente na forma com eh feita a selecao, que normalmente seria atraves de uma funcao analitica capaz de  medir a chance de sobrevivencia de um ser numa populacao (fitness). Foi implementada uma selecao por percepcao visual, onde o usuario pode escolher as imagens que tenham melhor estetica afim gerar uma nova populacao.  Uma interface contendo 25 imagens bem  facil a manipulacao das imagens (ver figura abaixo) :


GENOTIPO E FENOTIPO

            A representacao do genotipo de uma imagem eh atraves de uma arvore de expressao. Por exemplo:

                    and{ *{x{}, y{}}, y{}} =

            O fenotipo eh a avaliacao da expressao pixel a pixel (resolucao 128x128). O pseudo-codigo de geracao da imagem eh:

                        Loop Y (-1 to 1)
                              Loop X (-1 to 1)
                                    Evaluate(X, Y) --> returns one pixel


SELECAO

            Eh o processo pelo qual sao escolhidos os fenotipos mais adaptaveis, atraves de uma funcao "fitness". Esta funcao refelete a habilidade de um organismo sobreviver e, geralmente, eh dada por uma funcao definida explicitamente. No nosso caso a selecao eh feita por um observador.


REPRODUCAO

            Ocorre quando novos genotipos sao gerados a partir de genotipos pre-existentes.
            A reproducao eh feita da seguinte maneira: dados dois genotipos representados por suas respectivas arvores de expressoes, escolhemos um ramo aleatorio do primeiro e o recolocamos  em um ramo aleatorio do segundo, gerando um filho. Observe o exemplo da figura abaixo:


MUTACAO

            A fim de evoluir eh preciso que haja mutacoes nos novos genotipos com alguma frequencia que pode ser escolhida pelo ususario. Note que a mutacao eh probabilistica enquanto que a selecao eh deterministica. Observe no pseudo-codigo abaixo como pode ser implementado:

For each gi /*gene*/
    If rand( .0 , 1.0 ) < m /*probabilidade de mutacao*/
        then g'i  = gi + rand( -d, d )
            clamp or wrap g'i to legal bounds.
        else g'i = gi


FUNCOES INTRINSECAS NO GENOTIPO

           O genotipo devera conter um conjunto de funcoes que sao definidadas tomando zero ou mais argumentos reais e retornando tambem valores reais.
            A imagem esta definida sobre X e Y variando de -1 a 1.  Logo abaixo esta uma lista de funcoes implementadas e que podem estar inseridas em qualquer genotipo:

      Estes ruidos foram implementados baseado no modelo de Ken Perlin      Note que nem todas as funcoes sao definidas continuamente. Deve-se entao manipular os erros adequadamente.
    Eh claro que essas funcoes avaliam cada canal de cor separadamente.


GALERIA DE IMAGENS

        Veja aqui algumas imagens geradas pelo programa.


TRABALHOS FUTUROS

        Ao inves de fazer a selecao perceptualmente, podemos criar uma funcao que escolhera as imagens mais proximas de uma imagem alvo. Esta funcao pode ser desde uma soma dos quadrados da diferenca a uma analise de histogramas, o que daria resultados bem intessantes.


BIBLIOGRAFIA
 



 VISGRAF - IMPA modicado em  12/12/2001