Recherche d'images similaires

Recherche d'images similaires - Algo - Programmation

Marsh Posté le 07-01-2010 à 10:39:39    

Bonjour (j'ai posté la même question dans une autre partie du forum, mais on m'a conseillé de venir ici...)
 
Pour m'amuser, je suis en train d'écrire un petit logiciel qui permet d'identifier des images identiques sous des format différents (par exemple GIF et JPEG). L'idée de ce logiciel serait à peu près la suivante:
 
1) scan d'un disque (ou d'une partie) pour retrouver toutes les images
2) Pour chaque image, calculer une sorte "d'invariant d'image" et mémoriser la valeur associée au nom de l'image.
3) Si deux ou plusieurs images ont un invariant proche, donner à l'utilisateur le nom de ces images pour qu'il en fasse ce qu'il veut
 
L'idée de l'invariant d'image c'est une fonction qui me donnerait des valeurs proches pour la même image qui serait mémorisée une fois en gif et une fois en jpeg (ou n'importe quelle paire de formats pas trop exotiques comme png, bmp etc). Je recherche donc des  fonctions mathématiques pour calculer ces invariants. En cherchant sur gogol on voit que certains proposent d'utiliser une transformation cosinus discrète (DCT) ou une transformation de Radon. Auriez-vous s.v.p. des références bibliographiques pour ce genre de moulinettes ? Connaissez-vous d'autres types d'invariants qui pourraient convenir ?  
 
Dans le même domaine, je recherche aussi des programmes open-source dont je pourrais m'inspirer (mon soft sera bien entendu aussi open-source). Il existe bien entendu des tonnes de programmes commerciaux pour faire ce genre de recherche, ou même des programmes gratuits, mais je n'en ai pas (encore) trouvé dont les sources sont disponibles et dont la licence permet l'examen et la modification de ces sources.
 
D'avance merci de votre aide

Reply

Marsh Posté le 07-01-2010 à 10:39:39   

Reply

Marsh Posté le 08-01-2010 à 10:43:11    

Je pense que déjà, tu devrais passer par un format intermédiaire, le bmp, pour travailler sur les pixels (matrice lignesxcolonnes) et non directement sur les octets des différents formats de fichiers, histoire de comparer ce qui est comparable.
Ensuite, tu cherches des images strictement identiques (quasiment au pixel près) où y'a une tolérance? Prends-tu en compte les transformations qui auraient été éventuellement appliquées à l'image (rotation, homothétie...)?
 
Pour ma part, je ferais plutôt une ACP : http://fr.wikipedia.org/wiki/Analy [...] rincipales


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 08-01-2010 à 16:31:55    

En terme de signature, ça doit être difficile. Je pense plutot à un calcul de coeff de corrélation (pour ceux qui se souviennent des décodeurs pirates de canal+, ils remettaient les lignes de l'image hertzienne dans l'ordre en calculant le coeff de co entre chacune)
 
1-tu redimensionnes les images en petit format avec toutes la meme dimension
2-tu passes en niveau de gris
3-puis en image pleine rectangulaire
4-tu calcules coeff de corrélations entre des lignes ou des colonnes des images.
 

Reply

Marsh Posté le 08-01-2010 à 16:47:55    

Pour info, l'ACP passe par une phase de calcul de corrélation entre les données analysées, ici les images. La suite de l'algo, c'est de faire une SVD. La SVD présente l'intérêt d'éliminer les données parasités, bruit et peut-être même les pbs dûs à des transformations (rotation...).
 
Je te dis ça parce que je l'ai mis en application pour des calculs de similitudes de documents (de taille variable). Dans ce contexte là, le pb des roation/homothétie, c'est les mots qui sont sous la forme conjuguée, pluriel... résolue via la lemnisation. ;)

Message cité 1 fois
Message édité par rufo le 08-01-2010 à 16:49:57

---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 10-01-2010 à 11:04:55    

rengzehn a écrit :

En terme de signature, ça doit être difficile. Je pense plutot à un calcul de coeff de corrélation (pour ceux qui se souviennent des décodeurs pirates de canal+, ils remettaient les lignes de l'image hertzienne dans l'ordre en calculant le coeff de co entre chacune)
 
1-tu redimensionnes les images en petit format avec toutes la meme dimension


 
Oui c'est une idée, il faut juste trouver un format qui soit adapté à toutes les images. Pour l'instant (càd pour la version 0.1-alpha de mon programme) c'est déjà d'identifier la même image simplement codée sous des formats différents donc avec des valeurs de pixels légèrement différentes
 

rengzehn a écrit :


2-tu passes en niveau de gris


 
J'ai réfléchi à cette méthode, mais il me semblait (à tord ?) qu'il était difficile de trouver la bonne valeur de transformation (les 3 coefficients des couleurs RGB). Les différents sites web que j'ai visité donnent des valeurs légèrement différentes et j'ai un peu peur que ces différences conduisent à des images plus difficiles à identifier. C'est néanmoins une piste que je dois suivre.
 

rengzehn a écrit :


3-puis en image pleine rectangulaire
4-tu calcules coeff de corrélations entre des lignes ou des colonnes des images.


Ce sont justement les calculs de ce coefficient de corrélation qui me pose problème. Mais dans un autre message rufo suggère une piste à laquelle je n'avais pas pensé (version polie pour dire que je n'avais aucune idée de son existence).
 
Merci de ton aide, je garde tes conseils bien précieusement dans mon dossier.

Reply

Marsh Posté le 10-01-2010 à 11:09:50    

rufo a écrit :

Pour info, l'ACP passe par une phase de calcul de corrélation entre les données analysées, ici les images. La suite de l'algo, c'est de faire une SVD. La SVD présente l'intérêt d'éliminer les données parasités, bruit et peut-être même les pbs dûs à des transformations (rotation...).
 
Je te dis ça parce que je l'ai mis en application pour des calculs de similitudes de documents (de taille variable). Dans ce contexte là, le pb des roation/homothétie, c'est les mots qui sont sous la forme conjuguée, pluriel... résolue via la lemnisation. ;)


 
Voilà plein de choses que je ne connaissais pas. Je suppose que l'acronyme "SVD" signifie "singular value decomposition". Si c'est le cas j'avais vu cette méthode, mais je ne savais pas qu'on pouvait l'utiliser dans ce cadre.
 
En tout cas merci pour ces pistes !

Reply

Marsh Posté le 11-01-2010 à 13:58:54    

Regardes le § "Applications" de l'article sur l'ACP : http://fr.wikipedia.org/wiki/Analy [...] rincipales
Il parle justement de classification et de calcul de distance.
 
Pour te convaincre que la SVD (t'as bon pour la signification) fonctionnerait bien dans ton cas, lis cette article : http://fr.wikipedia.org/wiki/D%C3% [...] i%C3%A8res
En particulier le § "interprétation statistique"  :

Citation :

Ainsi, la SVD permet de construire un modèle empirique, sans théorie sous-jacente, d'autant plus précis qu'on y injecte de termes.
Il est par ailleurs possible de reconstruire, en utilisant une basede vecteurs singuliers d'un premier jeu de données, un autre jeu dedonnées avec plus ou moins de précision, afin de déterminer lasimilarité entre les deux. Selon ce principe, des systèmes dedécomposition, de reconnaissance et de reconstruction faciale ont étédéveloppés
 


et le § "décomposition 2D".
 
Dans mon cas d'utilsiaiton, c'est bien entendu le § "Application aux langues naturelles" que j'ai utilisé ;)


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed