Image Techniques de Comparaison avec Java
Je suis à la recherche de plusieurs méthodes pour comparer deux images pour voir comment ils se ressemblent. Actuellement j'ai l'intention d'avoir des pourcentages comme 'indice de similarité' résultat final. Mon programme de contour est quelque chose comme ceci:
- Utilisateur sélectionne les 2 images à comparer.
- Avec un bouton, les images sont comparées à l'aide de plusieurs méthodes.
- À la fin, chaque méthode aura un pourcentage indiquant à quoi ressemblent les images sont basées sur cette méthode.
J'ai fait beaucoup de lecture ces derniers temps, et certaines choses que j'ai lu semble être incroyablement complexe et avancée et pas pour quelqu'un comme moi, avec seulement un an de Java de l'expérience. Jusqu'à présent, j'ai lu sur:
- La transformée de Fourier - im à trouver cela un peu confus à mettre en œuvre en Java, mais apparemment, la Java Advanced Imaging API dispose d'une classe. Si je ne suis pas sûr de la façon de convertir la sortie d'un résultat réel
- Algorithme SIFT - semble incroyablement complexe
- Histogrammes - probablement le plus facile de tous mentionnés jusqu'à présent
- Pixel de l'accaparement - semble viable, mais si il y a une quantité considérable de variation entre les deux images, il ne regarde pas comme il va produire toute sorte de résultat précis. J'ai peut-être tort?
J'ai aussi l'idée de pré-traitement d'une image à l'aide d'un filtre de Sobel d'abord, puis de les comparer. Le problème est la comparaison de la partie.
Donc oui, je suis à la recherche pour voir si quelqu'un a des idées pour comparer des images en Java. En espérant qu'il y a des gens ici qui ont fait des projets similaires avant. Je veux juste obtenir des commentaires sur l'viable techniques de comparaison qui ne coûtent pas trop difficile à mettre en œuvre en Java.
Merci d'avance
OriginalL'auteur Flynn | 2010-12-01
Vous devez vous connecter pour publier un commentaire.
Vous pouvez obtenir un bon aperçu de ce document. Un autre champ que vous pourriez regarder en est content based image retrieval (CBIR).
Désolé de ne pas être Java spécifique. HTH.
Vous pouvez probablement trouver de bons points de départ, si vous la recherche pour "java fft bibliothèque" et "fft le traitement de l'image" (FFT = transformée de fourier rapide). Vous ne devriez probablement pas mettre en œuvre la FFT vous-même. NB: Vous avez besoin de "s'ajuster" la taille d'une image si vous souhaitez utiliser la FFT.
OriginalL'auteur bjoernz
Comme une meilleure alternative à la simple pixel tâtonner, essayer SSIM. Il ne exiger que vos images sont essentiellement de la même objet à partir de la même angle, cependant. C'est utile si vous êtes à la comparaison des images qui ont été compressés avec des algorithmes différents, par exemple (par exemple, JPEG vs JPEG2000). Aussi, il est assez simple d'approche que vous devriez être en mesure de mettre en œuvre assez rapidement, à voir des résultats.
Je ne sais pas d'une implémentation de Java, mais il y a un C++ mise en œuvre à l'aide d'OpenCV. Vous pourriez essayer de le ré-utiliser (par le biais de quelque chose comme javacv) ou tout simplement écrire à partir de zéro. L'algorithme lui-même n'est pas si compliqué que ça de toute façon, donc vous devriez être en mesure de mettre en œuvre directement.
OriginalL'auteur mpenkov