Algoritmos de hash normal ou de cálculo CRC não funcionam bem com dados de imagem. A natureza dimensional da informação deve ser levada em consideração.
Se você precisar de impressões digitais extremamente robustas, de modo que transformações afins (escala, rotação, translação, inversão) sejam contabilizadas, você pode usar uma transformação de Radon na fonte da imagem para produzir um mapeamento normativo dos dados da imagem - armazene-o com cada imagem e em seguida, compare apenas as impressões digitais. Este é um algoritmo complexo e não para os fracos de coração.
algumas soluções simples são possíveis:
- Crie um histograma de luminosidade para a imagem como uma impressão digital
- Crie versões reduzidas de cada imagem como uma impressão digital
- Combine a técnica (1) e (2) em uma abordagem híbrida para melhorar a qualidade de comparação
Um histograma de luminosidade (especialmente aquele que é separado em componentes RGB) é uma impressão digital razoável para uma imagem - e pode ser implementado com bastante eficiência. Subtrair um histograma de outro produzirá um novo historgrama que você pode processar para decidir o quão semelhantes são duas imagens. Os histogramas, porque os únicos que avaliam a distribuição e ocorrência de informações de luminosidade / cor lidam muito bem com as transformações afins. Se você quantizar as informações de luminosidade de cada componente de cor até um valor de 8 bits, 768 bytes de armazenamento são suficientes para a impressão digital de uma imagem de quase qualquer tamanho razoável. Os histogramas de luminosidade produzem falsos negativos quando as informações de cor em uma imagem são manipuladas. Se você aplicar transformações como contraste / brilho, posterizar, mudança de cor, mudanças nas informações de luminosidade.
Usar imagens em escala é outra maneira de reduzir a densidade de informações da imagem a um nível mais fácil de comparar. Reduções abaixo de 10% do tamanho da imagem original geralmente perdem muitas informações para serem úteis - portanto, uma imagem de 800x800 pixels pode ser reduzida para 80x80 e ainda fornecer informações suficientes para realizar uma impressão digital decente. Ao contrário dos dados do histograma, você deve executar o dimensionamento anisotrópico dos dados da imagem quando as resoluções da fonte têm proporções variáveis. Em outras palavras, reduzir uma imagem de 300x800 em uma miniatura de 80x80 causa deformação da imagem, de forma que quando comparada com uma imagem de 300x500 (que é muito semelhante) irá causar falsos negativos. Impressões digitais em miniatura também costumam produzir falsos negativos quando transformações afins estão envolvidas. Se você virar ou girar uma imagem,
Combinar as duas técnicas é uma maneira razoável de proteger suas apostas e reduzir a ocorrência de falsos positivos e falsos negativos.