Pergunta

Algoritmo para um desenho e pintura robô -

Olá

Eu quero escrever um pedaço de software que analisa a imagem e, em seguida, produz uma imagem que capta o que um humano percebe olho na imagem original, usando um mínimo de caminho bezier objetos de variável de cor e opacidade.

Ao contrário do recente concurso de compressão Twitter Super ( ver: stackoverflow.com/questions/891643/ twitter-image-codificação de desafio ) , meu objetivo não é criar uma réplica que é fiel à imagem, mas em vez de replicar a experiência humana de olhar para a imagem.

Por exemplo, se a imagem mostra originais um balão vermelho no canto superior esquerdo, ea reprodução tem algo que se parece com um balão vermelho no canto superior esquerdo, então eu vou ter alcançado meu objetivo, mesmo se o balão no a reprodução não é bastante na mesma posição e não exatamente o mesmo tamanho ou cor.

Quando eu digo "como percebido por um ser humano", eu quero dizer isso em um sentido muito limitado. Eu não estou tentando analisar o significado de uma imagem, eu não preciso saber o que uma imagem é de, estou interessado apenas nas características visuais chave de um olho humano notaria, na medida em que isso pode ser automatizado por um algoritmo que não tem capacidade de conceituar o que é realmente observando.

Por este critério incomuns da percepção humana mais precisão fotográfica?

Este software poderia ser usado para conduzir um desenho e pintura robô, que será colaborar com um artista humano ( ver:. video.google.com/videosearch?q=mr%20squiggle )

Ao invés de tratar marcas feitas pelo ser humano que não são fotograficamente perfeita como sendo necessariamente erros, o algoritmo deve procurar incorporar o que já está na tela na imagem final.

brilho Então relativa, matiz, saturação, tamanho e posição são muito mais importante do que ser fotograficamente idêntico ao original. A manutenção da topologia das características, de blocos de cor, gradientes, convexa e curva côncava será mais importante o tamanho exato forma e cor dessas características

Ainda comigo?

O meu problema é que eu sofrer um pouco da "quando você tem um martelo tudo parece um prego" síndrome. Para mim parece que a maneira de fazer isso é usando um algoritmo genético com algo como a comparação de transformadas wavelet (ver: grail.cs.washington.edu/projects/query/ ) usado por Retrievr (ver: labs.systemone.at/retrievr/ ) para selecionar soluções de ajuste.

Mas a principal razão pela qual eu vejo isso como a resposta, é que estes são estas são as técnicas que eu conheço, existem soluções, provavelmente, muito mais elegante usando técnicas que eu faço agora não nada sobre.

Seria especialmente interessante para ter em conta os aspectos, o sistema de visão humana analisa uma imagem, necessidades atenção por isso, talvez especiais a serem pagos a linhas retas e ângulos, bordas de alto contraste e grandes blocos de cores semelhantes.

Você tem alguma sugestão para as coisas que eu deveria ler sobre a visão, os algoritmos de imagem, algoritmos genéticos ou projetos semelhantes?

Obrigado

Mat

PS. Alguns da ortografia acima pode parecer errado para você e sua verificação ortográfica. É apenas variações de ortografia internacionais que podem ser diferentes do padrão em seu país: por exemplo, Australian padrão: cor vs padrão americano: cor

Foi útil?

Solução

Há um modelo que pode implementado como um algoritmo para calcular um mapa de saliência para uma imagem, determinando quais partes da imagem iria receber mais atenção de um ser humano.

O modelo é chamado Itti koch modelo
Você pode encontrar um papel startin aqui
E mais recursos e c ++ código fonte aqui

Outras dicas

Eu não posso responder à sua pergunta diretamente, mas você deve realmente dar uma olhada artista / programador (Lisp) Harold Cohen de máquina de pintura Aaron .

Isso é uma grande tarefa. Você pode estar interessado em imagem vectorizing (não sei o que é chamado oficialmente), que é usado para recolher imagens rasterizadas (tais como fotografias tiradas com uma câmera) e gera um conjunto de linhas de Bezier (eu acho) que o aproximada imagem que você colocou no Desde bons algoritmos muitas vezes de saída muito alta qualidade (leia-se: complexos). conjuntos de linha que também estaria interessado em simplificação algoritmos que podem ajudar enormemente.

Infelizmente eu não estou ao lado de minha biblioteca, ou eu poderia recomendar uma série de livros sobre psicologia da percepção.

A primeira coisa que você deve considerar é a fisiologia do olho humano é tal que quando examinamos uma imagem ou cena, estamos apenas capturar pedaços muito pequenos de cada vez, como nossos olhos dardo em torno rapidamente. Nossa mente peices as diferentes partes em conjunto para tentar formar um todo.

Você pode começar por encontrar um algoritmo para o caminho de um globo ocular, uma vez que se lança ao redor. Talvez ele é atraído por contraste?

Em seguida é que os nossos olhos ajustar a "exposição", dependendo do contexto. É como aquelas imagens High Dynamic Range, se eles foram peiced juntos não por várias posições de uma cena inteira, mas por muitas imagens pequenas, cada equilibrado em seu próprio, mas misturados em seus arredores para formar uma gama dinâmica elevada.

Agora, houve um achado em um cérebro de macaco que há um único neurônio que se acende se houver uma linha diagonal no canto superior esquerdo de seu campo de visão. neurônios semelhantes podem ser encontrados em linhas verticais e linhas horizontais em diversas áreas do campo que macaco de visão. O "diagonalness" determina a frequência com que que os incêndios neurônio.

um poder especulado que outros neurônios pode ser encontrado e mapeados para outras qualidades, tais como vermelhidão, ou texturedness, e outras coisas.

Há algo que os humanos podem fazer que eu não vi um programa de computador que nunca capaz de fazer. É algo chamado "fechamento", onde um ser humano é capaz de preencher as informações sobre algo que eles estão vendo, que na verdade não existe na imagem. um exemplo:

          *






*                    *

é que um triângulo? Se você soubesse que era antes, então você provavelmente poderia fazer um programa para ligar os pontos. Mas o que se é apenas pontos? Como você pode saber? Eu não iria tentar este a menos que eu tivesse alguma maneira muito inteligente de lidar com isso.

Há muitos outros fatos sobre a percepção humana que você pode ser capaz de usar. Boa sorte, você não ter escolhido uma tarefa simples.

eu acho que uma coisa que poderia ajudá-lo nesta tarefa enorme é o envolvimento humano. i significa dados. como você pode ter muitas pessoas sentadas olhando para pontos aleatórios (como do post anterior) e conectá-los como eles vêem certo. você pode aproveitar esses dados.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top