Sua tarefa é criar um programa que obtenha uma imagem destacada em preto e branco (imagens de exemplo estão abaixo) e a preencha com cores. Depende de você como separar cada região e qual a cor a ser preenchida (você pode até usar um RNG).
Por exemplo:
Como você pode ver, eu sou claramente um artista de calibre superior quando se trata de MS Paint.
Pontuação
Como é um concurso de popularidade, ganha a resposta com o maior número de votos. Os eleitores são incentivados a julgar as respostas
- Critério de entrada: qualquer imagem que consiste em fundo branco / cinza claro e contornos preto / cinza escuro
- Quão bem a coloração é feita; significando que poucas ou nenhuma área é branca, diferentemente do descrito acima (a menos que você obviamente pretenda usar branco, por exemplo, para nuvens)
- Personalização das cores usadas em determinadas seções
- Quão bem o sistema funciona em uma variedade de imagens diferentes (com detalhes variados)
- Poste quanto tempo seu programa leva por imagem. Podemos não estar jogando código de golfe, mas um código mais curto, mais rápido e mais eficiente deve ser considerado melhor
- Deve exibir a nova imagem na tela ou em um arquivo (não superior a 2 MB, para que possa ser mostrada na resposta)
- Justifique por que você escolheu enviar para esse tipo de imagem e comente / explique o funcionamento do seu código
- A aplicabilidade da cor usada à respectiva forma é limitada (esquema de cores realista, isto é, grama é verde, cercas de madeira são marrons etc.)
"Eu poderia colorir aleatoriamente cada área, mas se eu pudesse identificar a" cerca "e torná-la com a mesma cor, isso é algo que merece votos positivos". - NathanMerrill
Como este é um concurso de popularidade, você também pode opcionalmente julgar por:
- Apelo geral (quão boa é a imagem)
- Talento artístico; se você pode programar em sombreamento ou cores no estilo aquarela etc.
Em geral, a menor imagem gerada (tamanho do arquivo) da mais alta qualidade, com o programa em jejum e a votação pública mais alta, vencerá.
Se você tiver outras especificações de julgamento que acha que devem ser usadas, recomende-as nos comentários desta postagem.
Exemplos
Não tenho nada; todas as imagens de exemplo são de uma licença de creative commons.
Fonte: https://pixabay.com/ro/stejar-arbore-schi%C5%A3%C4%83-natura-303890/ Fonte: http://www.freestockphotos.biz/stockphoto/10665 Fonte: http: / /crystal-rose1981.deviantart.com/art/Dragon-Tattoo-Outline-167320011 Fonte: http://jaclynonacloudlines.deviantart.com/art/Gryphon-Lines-PF-273195317 Fonte: http://captaincyprus.deviantart.com / art / Dragon-OutLine-331748686 Fonte: http://electric-meat.deviantart.com/art/A-Heroes-Farewell-280271639 Fonte: http://movillefacepalmplz.deviantart.com/art/Background-The-Pumpkin -Fazenda-dos-velhos-dias-342865938
EDIT: Devido à suavização de serrilhado nas linhas, causando pixels não preto / branco e algumas imagens que podem conter cinza em vez de preto / branco, como um desafio bônus, você pode tentar lidar com isso. Deve ser fácil o suficiente na minha opinião.
fonte
Respostas:
Aerografia espectral (Python, PIL, scipy)
Isso usa um algoritmo matemático sofisticado para produzir bobagens coloridas. O algoritmo está relacionado ao algoritmo PageRank do Google, mas para pixels em vez de páginas da web.
Eu adotei essa abordagem porque achava que, diferentemente dos métodos baseados em preenchimento de inundação, ele pode lidar com imagens como a galinha e a árvore, onde existem formas que não são totalmente delimitadas por linhas pretas. Como você pode ver, funciona meio que, embora também tenda a cores em diferentes partes do céu em cores diferentes
Para os que pensam matematicamente: o que está fazendo é essencialmente construir o gráfico de adjacência dos pixels while na imagem e, em seguida, encontrar os 25 principais vetores próprios do gráfico Laplaciano. (Exceto que não é bem isso, porque incluímos os pixels escuros, apenas damos um peso menor às conexões. Isso ajuda a lidar com o antialiasing e também parece dar melhores resultados em geral.) Tendo encontrado os autovetores, ele cria um combinação linear aleatória deles, ponderada pelos seus autovalores inversos, para formar os componentes RGB da imagem de saída.
No interesse do tempo de computação, a imagem é reduzida antes de fazer tudo isso, depois é reduzida novamente e depois multiplicada pela imagem original. Ainda assim, ele não roda rapidamente, levando entre 2 e 10 minutos na minha máquina, dependendo da imagem de entrada, embora por algum motivo o frango demore 17 minutos.
Na verdade, pode ser possível transformar essa ideia em algo útil, criando um aplicativo interativo onde você pode controlar a cor e a intensidade de cada um dos vetores próprios. Dessa forma, você pode desbotar os que dividem o céu em seções diferentes e desbotar os que captam os recursos relevantes da imagem. Mas eu não tenho planos de fazer isso sozinho :)
Aqui estão as imagens de saída:
(Não funcionou tão bem nas abóboras, então eu o omito.)
E aqui está o código:
fonte
Python 2 + PIL também, meu primeiro livro de colorir
Fiz exatamente o mesmo que o CarpetPython, exceto pelo fato de preencher a região com 'gradientes' e usar um ciclo de cores diferente.
Meus corantes mais magníficos:
Tempos de computação na minha máquina:
image 1 (chinese dragon): real 0m2.862s usuário 0m2.801s sys 0m0.061s
imagem 2 (gryffon): usuário 0m0.991s real 0m0.963s sys 0m0.029s
imagem 3 (dragão unicorniano): real 0m2.260s usuário 0m2.239s sys 0m0.021s
fonte
Python 2 e PIL: mundos psicodélicos
Eu usei um algoritmo simples para preencher cada área branca com uma cor de uma paleta de ciclismo. O resultado é muito colorido, mas não muito realista.
Observe que as partes "brancas" nessas fotos não são muito brancas. Você precisará testar também tons de cinza.
Código no Python 2.7:
Imagens de exemplo:
fonte
Matlab
Usamos o espaço de cores HSV e escolhemos o Hue de cada região com base no tamanho relativo entre as regiões brancas. A maior região será azul (
Hue = 0.7
) e a menor região será violeta (Hue = 0.8
). As regiões entre esses dois tamanhos recebem tons no intervalo0.7 -> 1=0 -> 0.8
. A Matiz no intervalo é selecionada linearmente em relação à funçãoarea^0.15
. A saturação e o valor são sempre 1 para cada pixel não preto.Demora menos de 1 segundo para colorir uma imagem.
As 3 imagens com regiões fechadas nas quais o algoritmo funciona decentemente:
E o resto das imagens:
Nessas imagens, existem grandes regiões conectadas em branco que devem ser idealmente coloridas por várias cores (esse problema foi bem resolvido na solução de Nathaniel .
fonte
Python 3 com travesseiro
O código é um pouco longo para incluir nesta resposta, mas aqui está a essência .
Infelizmente, esses últimos passos ainda não eliminaram "halos" mais claros que são visíveis em regiões de cores mais escuras, mas fizeram uma diferença notável, pelo menos. O processamento de imagens nunca foi meu campo de estudo, então, pelo que sei, existem algoritmos mais bem-sucedidos e mais eficientes para fazer o que tentei fazer aqui ... mas tudo bem.
Até agora, existem apenas duas paletas selecionáveis para a etapa 4: uma puramente aleatória e uma muito natural "natural", que tenta atribuir cores do céu aos cantos superiores, cores da grama aos cantos inferiores, marrons (pedras ou madeira ) cores no meio de cada lado e cores variadas no centro. O sucesso foi ... limitado.
Uso:
Amostras:
paint_by_prog.py -t 0.7 Gryphon-Lines.png
paint_by_prog.py Dragon-Tattoo-Outline.jpg
paint_by_prog.py -t 0.85 -p natural The-Pumpkin-Farm-of-Good-old-Days.jpg
paint_by_prog.py -t 0.7 Dragon-OutLine.jpg
paint_by_prog.py stejar-arbore-schiţă-natura.png
O frango não parece muito bom, e meu resultado mais recente para a imagem do Link não é o melhor; aquele que veio de uma versão anterior do código era basicamente amarelo pálido e tinha uma vibração interessante no deserto ...
Atuação:
Cada imagem leva alguns segundos para processar com as configurações padrão, o que significa que um algoritmo aproximado do vizinho mais próximo é usado para a etapa 5. O vizinho mais próximo verdadeiro é significativamente mais lento, levando talvez meio minuto (eu realmente não o cronometrei).
fonte
Java
Seleção aleatória de cores de sua escolha de paleta.
Aviso: a região está atualmente muito lenta, a menos que as regiões brancas sejam incomumente pequenas.
Requer duas entradas: o nome do arquivo e o ID da paleta. Inclui alguma correção de suavização de borda, mas não inclui lógica para pixels transparentes.
As seguintes paletas são atualmente reconhecidas:
Resultados:
Dragão, paleta Game Boy:
O outro dragão, paleta azul + verde:
GOL still life mona lisa (conforme processada por este programa ), paleta tricolor:
fonte