Techniques de comparaison D'images avec Java

je suis à la recherche de plusieurs méthodes pour comparer deux images pour voir comment ils sont similaires. Actuellement j'ai l'intention d'avoir des pourcentages comme 'indice de similarité' résultat final. Mon plan de programme est quelque chose comme ceci:

  1. l'utilisateur sélectionne 2 images à comparer.
  2. avec un bouton, les images sont comparées en utilisant plusieurs méthodes différentes.
  3. à la fin, chaque méthode aura un pourcentage à côté de lui indiquant comment similaire le les images sont basées sur cette méthode.

j'ai beaucoup lu dernièrement et certaines choses que j'ai lues semblent être incroyablement complexes et avancées et pas pour quelqu'un comme moi avec seulement une année d'expérience Java. Jusqu'à présent, j'ai lu à propos de:

  • la transformation de Fourier - im trouvant cela assez confus à mettre en œuvre en Java, mais apparemment L'API D'imagerie avancée de Java a un classe pour elle. Bien que je ne suis pas sûr comment convertir la sortie à un résultat réel

  • algorithme SIFT - semble incroyablement complexe

  • histogrammes - probablement le plus facile de tous mentionnés jusqu'à présent

  • Pixel grabping - semble viable, mais s'Il ya une quantité considérable de variation entre les deux images il ne semble pas que cela va produire une sorte de résultat précis. J'ai peut-être tort?

j'ai aussi l'idée de pré-traiter une image en utilisant d'abord un filtre de Sobel, puis de la comparer. Le problème est la partie de comparaison réelle.

donc oui, je cherche à voir si quelqu'un a des idées pour comparer des images en Java. J'espère qu'il y a des gens ici qui ont déjà fait des projets similaires. Je veux juste obtenir des informations sur des techniques de comparaison viables qui ne sont pas trop difficiles à mettre en œuvre en Java.

Merci d'avance

7
demandé sur Flynn 2010-12-01 22:22:20

2 réponses

  • transformée de Fourier-ceci peut être utilisé pour calculer efficacement la corrélation croisée , qui vous indiquera comment aligner les deux images et comment ils sont similaires, quand ils sont alignés de manière optimale.
  • descripteurs D'EIPD - ces descripteurs peuvent être utilisés pour comparer des caractéristiques locales. Ils sont souvent utilisés pour l'analyse de correspondance et la reconnaissance d'objets. (Voir aussi SURF )
  • Histogrammes-Le corrélation croisée normalisée donne souvent de bons résultats pour comparer des images à un niveau mondial. Mais puisque vous comparez juste les distributions de couleur vous pourriez finir par déclarer une scène extérieure avec beaucoup de neige comme similaire à une scène intérieure avec beaucoup de papier peint blanc...
  • Pixel attraper, Aucune idée de ce que c'est...

, Vous pouvez obtenir un bon aperçu de ce document . Un autre domaine que vous pourriez examiner est de recherche d'images basée sur le contenu (CBIR) .

désolé de ne pas être spécifique à Java. HTH.

4
répondu bjoernz 2010-12-01 20:06:06

Comme une meilleure alternative à la simple pixel de l'accaparement, essayez MISS . ne exiger que vos images sont essentiellement de la même objet à partir de la même angle, cependant. C'est utile si vous comparez des images qui ont été compressées avec différents algorithmes, par exemple (JPEG vs JPEG2000). En outre, il s'agit d'une approche assez simple que vous devriez être en mesure de mettre en œuvre assez rapidement pour voir certains résultats.

I Je ne connais pas D'implémentation Java, mais il y a une implémentation C++ utilisant OpenCV . Vous pouvez essayer de réutiliser cela (par quelque chose comme javacv ) ou tout simplement l'écrire à partir de zéro. L'algorithme lui-même n'est pas si compliqué de toute façon, donc vous devriez être en mesure de l'implémenter directement.

1
répondu mpenkov 2010-12-02 11:27:33