Cela dépend entièrement de la façon dont vous voulez que l'algorithme soit intelligent.
Par exemple, voici quelques problèmes:
- images recadrées vs image non recadrée
- images avec un texte ajouté par rapport à une autre sans
- images en miroir
L' algorithme le plus simple et le plus simple que j'ai vu pour cela consiste simplement à suivre les étapes suivantes pour chaque image:
- mettre à l'échelle à quelque chose de petit, comme 64x64 ou 32x32, ne pas tenir compte du rapport hauteur / largeur, utiliser un algorithme de mise à l'échelle de combinaison au lieu du pixel le plus proche
- mettre à l'échelle les gammes de couleurs pour que le plus sombre soit le noir et le plus clair soit le blanc
- faites pivoter et retournez l'image de sorte que la couleur la plus claire soit en haut à gauche, puis en haut à droite est la prochaine plus sombre, en bas à gauche est la prochaine plus sombre (dans la mesure du possible bien sûr)
Modifier un algorithme de mise à l'échelle combinant est celui qui, lors de la réduction de 10 pixels à un, le fera en utilisant une fonction qui prend la couleur de tous ces 10 pixels et les combine en un seul. Peut être fait avec des algorithmes tels que la moyenne, la valeur moyenne ou des algorithmes plus complexes comme les splines bicubiques.
Calculez ensuite la distance moyenne pixel par pixel entre les deux images.
Pour rechercher une correspondance possible dans une base de données, stockez les couleurs de pixel sous forme de colonnes individuelles dans la base de données, indexez-en un certain nombre (mais pas toutes, sauf si vous utilisez une très petite image) et effectuez une requête qui utilise une plage pour chaque valeur de pixel, c.-à-d. chaque image où le pixel de la petite image est compris entre -5 et +5 de l'image que vous souhaitez rechercher.
C'est facile à implémenter et assez rapide à exécuter, mais bien sûr, ne gérera pas les différences les plus avancées. Pour cela, vous avez besoin d'algorithmes beaucoup plus avancés.