Pergunta

Estou tentando calcular o semelhança (ler: Distância de Levenshtein) de duas imagens, usando Python 2.6 e Pil.

Eu planejo para nós e o Python-Levenshtein Biblioteca para comparação rápida.

Principal Pergunta:

O que é uma boa estratégia para comparar imagens? Minha ideia é algo como:

  • Converta em RGB (transparente -> branco) (ou talvez converta em monocromático?)
  • Ampliar o menor para o tamanho maior
  • Converta cada canal (= o único canal, se convertido em monocromático) em uma sequência (valor do item = valor da cor do pixel)
  • Calcule a distância de Levenshtein entre as duas seqüências

Obviamente, isso não lida com casos como imagens espelhadas, imagens cortadas etc. Mas, para comparação básica, isso deve ser útil.

Existe uma estratégia melhor documentada em algum lugar?

EDITAR: Aaron H está certo sobre a questão da velocidade. O cálculo do Levelshtein leva uma eternidade para imagens maiores do que algumas centenas por algumas centenas de pixels. No entanto, a diferença entre os resultados após a redução da escala para 100x100 e 200x200 é menor que 1% no meu exemplo, por isso pode ser aconselhável configurar um tamanho máximo da imagem de ~ 100px ou mais ...

EDITAR: Obrigado preludemendfuue, essa pergunta é o que eu estava procurando.

A propósito, a distância de Levenshtein pode ser otimizada ao que parece, mas está me dando alguns resultados muito ruins, talvez por causa de muitos elementos redundantes no fundo. Tenho que olhar para outros algoritmos.

Eidt: O desvio quadrado médio da raiz e a ração de pico de sinal para ruído parecem ser outras duas opções que não são muito difíceis de implementar e aparentemente não são muito caras da CPU. No entanto, parece que vou precisar de algum tipo de análise de contexto para reconhecer formas, etc.

De qualquer forma, obrigado por todos os links, e também por apontar a direção para Numpy/Scipy.

Foi útil?

Solução

Você pode dar uma olhada no Stsci Biblioteca, é feita para comparar e analisar imagens. Deve dar o que você quer, mas pode ser um pouco exagerado.

Se quiser simplificar, você pode reduzir a quantidade de cores e a resolução primeiro e depois calcular a distância.

Outras dicas

Verificação de saída imgseek:

O imgseek é uma coleção de projetos gratuitos de similaridade visual de código aberto. A consulta (imagem que você está procurando) pode ser expressa como um esboço áspero pintado pelo usuário ou como outra imagem que você fornece (ou uma imagem em sua coleção). O algoritmo de pesquisa utiliza a decomposição da wavelet multiresolução das imagens de consulta e banco de dados.

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