Algorithme pour trouver des images similaires
J'ai besoin d'un algorithme qui permet de déterminer si deux images sont "similaires", et reconnaît des modèles similaires de la couleur, la luminosité, la forme etc.. j'ai peut-être besoin de quelques conseils pour les paramètres que le cerveau humain utilise pour "classer" des images. ..
J'ai regardé la dimension de hausdorff en fonction d'appariement, mais qui semble principalement pour la mise en correspondance d'objets transformés et des motifs de forme.
- Il a été un certain temps depuis que j'ai fait de la vision par ordinateur, mais de vérifier Matlab, il ya quelques bonnes fonctions pour l'analyse d'images, puis en comparant la similitude des matrices résultantes, basée sur divers paramètres de votre comparaison.
- Il y a quelques bonnes réponses à cette autre question similaire: stackoverflow.com/questions/25977/...
- beaucoup de 'nuages' et 'pouvoir'. Personne essayer toutes ces suggestions, et de savoir ce qui est mieux?
Vous devez vous connecter pour publier un commentaire.
J'ai fait quelque chose de similaire, par la décomposition des images dans les signatures à l'aide la transformée en ondelettes.
Mon approche a été de choisir les plus importantes n coefficients de chaque transformée de canal, et l'enregistrement de leur emplacement. Cela a été fait par tri de la liste de (alimentation,de l'emplacement) de n-uplets en fonction abs(alimentation). Similaire images présentent des similitudes en ce qu'ils y aura des coefficients dans les mêmes endroits.
J'ai trouvé que c'était mieux pour transformer l'image en format YUV, qui vous permet en poids de la similitude dans la forme (canal Y) et la couleur (UV canaux).
Vous pouvez trouver dans ma mise en œuvre de la mactorii, qui, malheureusement, je n'ai pas travaillé autant que je devrais avoir 🙂
Une autre méthode, que certains de mes amis ont utilisé avec des résultats étonnamment bons, c'est simplement de redimensionner votre image à dire, un 4x4 pixels et les magasins qui sont votre signature. Le degré de similitude des 2 images sont peut être marqué par dire, le calcul de la Distance Manhattan entre les 2 images, en utilisant des pixels correspondants. Je n'ai pas les détails de la façon dont ils ont joué le redimensionnement, de sorte que vous pourriez avoir à jouer avec les différents algorithmes disponibles pour cette tâche d'en trouver un qui convient.
pHash susceptibles de vous intéresser.
J'ai utilisé TAMISER afin de détecter te même objet dans des images différentes. Il est vraiment puissant, mais plutôt complexe, et peut-être exagéré. Si les images sont censés être assez similaire quelques paramètres simples basés sur la différence entre les deux images peuvent vous dire un peu. Quelques conseils:
Vous pouvez utiliser De Perception De L'Image Diff
C'est un utilitaire de ligne de commande qui permet de comparer deux images à l'aide de la perception métrique. C'est, il utilise un modèle de calcul du système visuel humain pour déterminer si les deux images sont visuellement différents, de sorte que des changements mineurs dans les pixels sont ignorés. De Plus, il réduit considérablement le nombre de faux positifs causées par les différences de génération de nombre aléatoire, de l'OS ou de l'architecture de la machine différences.
Mon laboratoire nécessaires pour résoudre ce problème, et nous avons utilisé Tensorflow. Voici un application complète mise en œuvre pour la visualisation d'images similaires.
Pour un tutoriel sur la vectorisation d'images pour le calcul de similarité, découvrez cette page. Voici le Python (de nouveau, voir le post de flux de travail complet):
C'est un problème difficile! Il dépend de la précision que vous devez être, et cela dépend du type d'images que vous travaillez avec. Vous pouvez utiliser les histogrammes de comparer les couleurs, mais qui ne veut évidemment pas prendre en compte la distribution spatiale de ces couleurs dans les images (c'est à dire les formes). Détection de bord suivie par une sorte de segmentation (c'est à dire à choisir les formes) peut fournir un modèle pour le rapprochement avec une autre image. Vous pouvez utiliser coocurence matrices de comparer les textures, en considérant les images comme des matrices de valeurs de pixel, et en comparant ces matrices. Il y a quelques bons livres sur image matching et de vision industrielle-Une recherche sur Amazon trouverez quelques.
Espérons que cette aide!
Image logiciel de reconnaissance de solutions sont en fait pas purement basée sur des algorithmes, mais faire usage de la réseau de neurones concept à la place. Découvrez http://en.wikipedia.org/wiki/Artificial_neural_network et à savoir NeuronDotNet qui comprend également des échantillons intéressants: http://neurondotnet.freehostia.com/index.html
Il est lié de recherche à l'aide de réseaux de neurones de Kohonen/auto-organisation des cartes
À la fois plus académique systèmes (Google pour PicSOM ) ou moins académique
( http://www.generation5.org/content/2004/aiSomPic.asp , (peut-être pas adapté
pour tous les environnements de travail) présentations existent.
Le calcul de la somme des carrés des différences des pixels de la couleur des valeurs de a considérablement version réduite (par exemple: 6x6 pixels) fonctionne très bien. Les images identiques rendement 0, images similaires rendement de petits nombres, les différentes images de rendement importantes.
Les autres gars au-dessus de l'idée de rompre en YUV première ça a l'air intéressant - bien que mon idée fonctionne très bien, je veux que mes images sont calculés comme "différents" de sorte qu'il donne un résultat correct - même dans la perspective d'une colourblind observateur.
Cela ressemble à un problème de vision. Vous voudrez peut-être regarder dans Adaptative Amplifiant ainsi que les Brûlures Ligne algorithme d'Extraction. Les concepts de ces deux devraient les aider à l'approche de ce problème. Détection de bord est un moyen encore plus simple endroit pour commencer si vous êtes nouveau à des algorithmes de vision, comme il explique les notions de base.
Autant que les paramètres pour la catégorisation:
Selon la quantité des résultats exacts dont vous avez besoin, vous pouvez simplement briser les images en n x n pixels des blocs et de les analyser. Si vous obtenez des résultats différents dans le premier bloc, vous ne pouvez pas arrêter le traitement, résultant dans certaines améliorations de performance.
Pour analyser les cases que vous pouvez par exemple obtenir la somme des valeurs de couleur.
Que vous pourriez effectuer une sorte de bloc-correspondance d'estimation de mouvement entre les deux images et de mesurer l'ensemble de la somme des résidus et de vecteur de mouvement coûts (un peu comme on le ferait dans un encodeur vidéo). Cela permettrait de compenser le mouvement; pour les points de bonus, ne affine la transformation de l'estimation de mouvement (compense pour les zooms et les étirements et similaires). Vous pouvez également faire de blocs se chevauchent ou du flux optique.
Comme une première passe, vous pouvez essayer d'utiliser des histogrammes de couleur. Cependant, vous avez vraiment besoin pour affiner votre problème de domaine. Générique image matching est un problème très difficile.
J'ai trouvé cet article très utile en expliquant comment elle fonctionne:
http://www.hackerfactor.com/blog/index.php?/archives/432-Looks-Like-It.html
Excuses pour rejoindre la fin de la discussion.
On peut même utiliser l'ORBE de la méthodologie pour détecter des caractéristiques similaires de points entre deux images.
Lien suivant donne directement la mise en œuvre de l'ORB en python
http://scikit-image.org/docs/dev/auto_examples/plot_orb.html
Même openCV a obtenu la mise en œuvre directe de l'ORB. Si vous avez plus d'infos à suivre l'article de recherche donné ci-dessous.
https://www.researchgate.net/publication/292157133_Image_Matching_Using_SIFT_SURF_BRIEF_and_ORB_Performance_Comparison_for_Distorted_Images
Il y a quelques bonnes réponses dans l'autre thread sur ce sujet, mais je me demande si quelque chose impliquant une analyse spectrale pourrait fonctionner? I. e., sortir de l'image en bas de la phase et de l'amplitude de l'information et de comparer ceux-ci. Cela peut éviter certains des problèmes de rognage, de la transformation et de l'intensité des différences. De toute façon, c'est juste moi de spéculer car cela semble être un problème intéressant. Si vous avez effectué une recherche http://scholar.google.com je suis sûr que vous pourriez venir avec plusieurs documents à ce sujet.