J'ai fait quelque chose de similaire, en décomposant les images en signatures à l'aide de transformée en ondelettes .
Mon approche a été de choisir les plus significatifs n coefficients de chaque canal transformé, et en enregistrant leur emplacement. Ceci a été fait en triant la liste des tuples (puissance, emplacement) selon abs(puissance). Des images similaires auront des points communs en ce sens qu'elles auront des coefficients significatifs aux mêmes endroits.
J'ai trouvé qu'il était préférable de transformer l'image au format YUV, qui vous permet effectivement de pondérer la similitude de forme (canal Y) et de couleur (canaux UV).
Vous pouvez trouver mon implémentation de ce qui précède dans mactorii que je n'ai malheureusement pas travaillé autant que j'aurais dû :-)
Une autre méthode, que certains de mes amis ont utilisée avec des résultats étonnamment bons, consiste simplement à redimensionner votre image à, disons, un 4x4 pixel et à la stocker comme votre signature. La similarité entre deux images peut être évaluée en calculant, par exemple, la valeur de Distance de Manhattan entre les 2 images, en utilisant les pixels correspondants. Je n'ai pas les détails de la façon dont ils ont effectué le redimensionnement, donc vous devrez peut-être jouer avec les différents algorithmes disponibles pour cette tâche afin d'en trouver un qui convienne.
0 votes
Il y a quelques bonnes réponses dans cette autre question similaire : stackoverflow.com/questions/25977/
2 votes
Beaucoup de "pourrait" et de "pourrait". Quelqu'un a essayé toutes ces suggestions et sait ce qui est le mieux ?
0 votes
Cela fait 13 ans, mais je voudrais mettre à jour ici que les vecteurs de caractéristiques d'image basés sur ML peuvent être robustes et facilement comparés à la similarité cosinus. Vous pouvez rechercher le projet img2vec ou quelque chose comme latentvector.space pour une intégration API plus facile (clause de non-responsabilité : je gère ce service).