Estas são simplesmente idéias que tive pensando sobre o problema, nunca tentei, mas gosto de pensar em problemas como este!
Antes de você começar
Considere normalizar as imagens; se uma tiver uma resolução mais alta que a outra, considere a opção de que uma delas seja uma versão compactada da outra; portanto, reduzir a resolução poderá fornecer resultados mais precisos.
Considere digitalizar várias áreas prospectivas da imagem que possam representar partes ampliadas da imagem e várias posições e rotações. Começa a ficar complicado se uma das imagens é uma versão distorcida de outra, esses são os tipos de limitações que você deve identificar e comprometer.
O Matlab é uma excelente ferramenta para testar e avaliar imagens.
Testando os algoritmos
Você deve testar (no mínimo) um grande conjunto de dados de teste analisados em humanos, onde as correspondências são conhecidas com antecedência. Se, por exemplo, nos seus dados de teste você tiver 1.000 imagens, das quais 5% correspondem, agora você tem uma referência razoavelmente confiável. Um algoritmo que encontra 10% de positivos não é tão bom quanto aquele que encontra 4% de positivos em nossos dados de teste. No entanto, um algoritmo pode encontrar todas as correspondências, mas também possui uma alta taxa de falsos positivos de 20%, portanto, existem várias maneiras de classificar seus algoritmos.
Os dados do teste devem tentar ser projetados para cobrir o maior número possível de dinâmicas que você esperaria encontrar no mundo real.
É importante notar que cada algoritmo para ser útil deve ter um desempenho melhor do que a estimativa aleatória, caso contrário, é inútil para nós!
Você pode aplicar seu software no mundo real de maneira controlada e começar a analisar os resultados que produz. Esse é o tipo de projeto de software que pode continuar infinitamente; sempre há ajustes e melhorias que você pode fazer; é importante ter isso em mente ao projetá-lo, pois é fácil cair na armadilha do projeto interminável.
Baldes de cor
Com duas fotos, digitalize cada pixel e conte as cores. Por exemplo, você pode ter os 'buckets':
white
red
blue
green
black
(Obviamente, você teria uma resolução mais alta de contadores). Toda vez que você encontra um pixel 'vermelho', aumenta o contador vermelho. Cada balde pode ser representativo do espectro de cores, quanto maior a resolução, mais precisa, mas você deve experimentar uma taxa de diferença aceitável.
Depois de ter seus totais, compare-os com os totais para uma segunda imagem. Você pode achar que cada imagem tem uma pegada bastante única, suficiente para identificar correspondências.
Detecção de borda
Que tal usar a detecção de borda .
(fonte: wikimedia.org )
Com duas imagens semelhantes, a detecção de borda deve fornecer uma pegada exclusiva utilizável e bastante confiável.
Tire as duas fotos e aplique a detecção de borda. Talvez meça a espessura média das bordas e depois calcule a probabilidade de a imagem poder ser dimensionada e redimensione, se necessário. Abaixo está um exemplo de um filtro Gabor aplicado (um tipo de detecção de borda) em várias rotações.
Compare as imagens pixel por pixel, conte as correspondências e as não correspondências. Se eles estiverem dentro de um certo limite de erro, você terá uma correspondência. Caso contrário, você pode tentar reduzir a resolução até um certo ponto e ver se a probabilidade de uma correspondência aumenta.
Regiões de Interesse
Algumas imagens podem ter segmentos / regiões de interesse distintos. Essas regiões provavelmente contrastam muito com o restante da imagem e são um bom item para procurar nas outras imagens para encontrar correspondências. Veja esta imagem, por exemplo:
(fonte: meetthegimp.org )
O trabalhador da construção civil em azul é uma região de interesse e pode ser usado como um objeto de pesquisa. Provavelmente, existem várias maneiras de extrair propriedades / dados dessa região de interesse e usá-los para pesquisar seu conjunto de dados.
Se você tiver mais de 2 regiões de interesse, poderá medir as distâncias entre elas. Veja este exemplo simplificado:
(fonte: per2000.eu )
Temos três regiões de interesse claras. A distância entre a região 1 e 2 pode ser de 200 pixels, entre 1 e 3 400 pixels e 2 e 3 200 pixels.
Pesquise outras imagens em regiões de interesse semelhantes, normalize os valores da distância e veja se você tem correspondências em potencial. Essa técnica pode funcionar bem para imagens rotacionadas e em escala. Quanto mais regiões de interesse você tiver, maior a probabilidade de uma correspondência à medida que cada medição de distância corresponder.
É importante pensar no contexto do seu conjunto de dados. Se, por exemplo, seu conjunto de dados for arte moderna, as regiões de interesse funcionarão muito bem, pois as regiões de interesse provavelmente foram projetadas para serem uma parte fundamental da imagem final. Se, no entanto, você estiver lidando com imagens de canteiros de obras, as regiões de interesse podem ser interpretadas pela copiadora ilegal como feias e podem ser cortadas / editadas livremente. Lembre-se de recursos comuns do seu conjunto de dados e tente explorar esse conhecimento.
Transformando
Transformar duas imagens é o processo de transformar uma imagem na outra através de um conjunto de etapas:
Observe que isso é diferente de desvanecer uma imagem em outra!
Existem muitos pacotes de software que podem transformar imagens. É tradicionalmente usado como efeito de transição, duas imagens não se transformam em algo a meio caminho geralmente, uma extrema se transforma em outra como resultado final.
Por que isso poderia ser útil? Dependendo do algoritmo de morphing usado, pode haver uma relação entre similaridade de imagens e alguns parâmetros do algoritmo de morphing.
Em um exemplo bastante simplificado, um algoritmo pode ser executado mais rapidamente quando houver menos alterações a serem feitas. Sabemos então que há uma probabilidade maior de que essas duas imagens compartilhem propriedades entre si.
Essa técnica pode funcionar bem para todos os tipos de imagens rotacionadas, distorcidas, distorcidas, com zoom. Novamente, essa é apenas uma idéia que tive, e não é baseada em nenhuma academia pesquisada até onde eu saiba (embora não pareça difícil), portanto pode ser muito trabalho para você com resultados limitados / sem resultados.
Fechando
A resposta de Ow nesta pergunta é excelente, lembro-me de ler sobre esse tipo de técnica de estudo de IA. É bastante eficaz na comparação de corpus lexicons.
Uma otimização interessante ao comparar corpus é que você pode remover palavras consideradas muito comuns, por exemplo 'The', 'A', 'And' etc. Essas palavras diluem nosso resultado. Queremos descobrir qual a diferença entre os dois corpus. para que eles possam ser removidos antes do processamento. Talvez haja sinais comuns semelhantes nas imagens que poderiam ser removidos antes da compactação? Pode valer a pena investigar.
A taxa de compactação é uma maneira muito rápida e razoavelmente eficaz de determinar como dois conjuntos de dados são semelhantes. Lendo sobre como a compactação funciona , você terá uma boa idéia de por que isso pode ser tão eficaz. Para um algoritmo de lançamento rápido, isso provavelmente seria um bom ponto de partida.
Transparência
Novamente, não tenho certeza de como os dados de transparência são armazenados para determinados tipos de imagem, gif png etc., mas isso pode ser extraído e serviria como um corte simplificado e eficaz para comparar com a transparência dos conjuntos de dados.
Inversão de sinais
Uma imagem é apenas um sinal. Se você tocar um ruído de um alto-falante e tocar outro ruído em outro alto-falante em perfeita sincronia no mesmo volume, eles se cancelam.
(fonte: themotorreport.com.au )
Inverta as imagens e adicione-as à sua outra imagem. Dimensione as posições it / loop repetidamente até encontrar uma imagem resultante em que um número suficiente de pixels seja branco (ou preto? Vou me referir a ela como uma tela neutra) para fornecer uma correspondência positiva ou parcial.
No entanto, considere duas imagens iguais, exceto uma que tem um efeito de brilho aplicado a ela:
(fonte: mcburrz.com )
Inverter um deles e adicioná-lo ao outro não resultará em uma tela neutra que é o nosso objetivo. No entanto, ao comparar os pixels das duas imagens originais, podemos ver claramente uma relação clara entre as duas.
Não estudei cores há alguns anos e não tenho certeza se o espectro de cores está em uma escala linear, mas se você determinou o fator médio de diferença de cores entre as duas imagens, poderá usar esse valor para normalizar os dados antes de processar com essa técnica.
Estruturas de dados em árvore
No começo, eles não parecem adequados para o problema, mas acho que eles poderiam funcionar.
Você pode pensar em extrair certas propriedades de uma imagem (por exemplo, compartimentos de cores) e gerar uma árvore de Huffman ou uma estrutura de dados semelhante. Você pode comparar duas árvores por similaridade. Isso não funcionaria bem para dados fotográficos, por exemplo, com um amplo espectro de cores, mas desenhos animados ou outras imagens com cores reduzidas podem funcionar.
Provavelmente isso não funcionaria, mas é uma ideia. A estrutura de dados trie é ótima para armazenar léxicos, por exemplo, um dicionário de dicção . É uma árvore de prefixo. Talvez seja possível construir uma imagem equivalente a um léxico (novamente, só consigo pensar em cores) para construir um trio. Se você reduziu, digamos, uma imagem de 300 x 300 em quadrados de 5x5, decomponha cada quadrado de 5x5 em uma sequência de cores para criar um teste a partir dos dados resultantes. Se um quadrado 2x2 contiver:
FFFFFF|000000|FDFD44|FFFFFF
Temos um código trie bastante exclusivo que estende 24 níveis, aumentando / diminuindo os níveis (IE, reduzindo / aumentando o tamanho do nosso sub-quadrado) pode gerar resultados mais precisos.
A comparação de três árvores deve ser razoavelmente fácil e pode fornecer resultados efetivos.
Mais ideias
Tropecei em um artigo interessante sobre a classificação de imagens de satélite , que descreve:
As medidas de textura consideradas são: matrizes de coocorrência, diferenças de nível de cinza, análise de tons de textura, características derivadas do espectro de Fourier e filtros de Gabor. Algumas características de Fourier e alguns filtros de Gabor foram consideradas boas escolhas, principalmente quando uma única faixa de frequência foi usada para classificação.
Pode valer a pena investigar essas medidas com mais detalhes, embora algumas delas não sejam relevantes para o seu conjunto de dados.
Outras coisas a considerar
Provavelmente, existem muitos artigos sobre esse tipo de coisa; portanto, a leitura de alguns deles deve ajudar, embora possam ser muito técnicos. É uma área extremamente difícil em computação, com muitas horas infrutíferas de trabalho gastas por muitas pessoas tentando fazer coisas semelhantes. Mantê-lo simples e desenvolver essas idéias seria o melhor caminho a percorrer. Deve ser um desafio razoavelmente difícil criar um algoritmo com uma taxa de correspondência melhor que aleatória e começar a melhorar isso realmente começa a ficar bastante difícil de alcançar.
Provavelmente, cada método precisaria ser testado e aprimorado, se você tiver alguma informação sobre o tipo de imagem que verificará, isso seria útil. Por exemplo, anúncios, muitos deles continham texto; portanto, o reconhecimento de texto seria uma maneira fácil e provavelmente muito confiável de encontrar correspondências, especialmente quando combinadas com outras soluções. Como mencionado anteriormente, tente explorar propriedades comuns do seu conjunto de dados.
Combinar medidas e técnicas alternativas, cada uma com um voto ponderado (dependendo de sua eficácia) seria uma maneira de criar um sistema que gere resultados mais precisos.
Se o emprego de múltiplos algoritmos, como mencionado no início desta resposta, for possível encontrar todos os positivos, mas com uma taxa de falsos positivos de 20%, seria interessante estudar as propriedades / pontos fortes / fracos de outros algoritmos, pois outro algoritmo pode ser eficaz na eliminação de falsos positivos retornados de outro.
Cuidado para não cair na tentativa de concluir o projeto sem fim, boa sorte!