2017-02-28 2 views
1

Supposons que j'ai une image d'une voiture prise de mon appareil photo mobile et que j'ai une autre image de la même voiture téléchargée sur Internet. (Pour plus de simplicité, veuillez supposer que les deux images contiennent la même projection latérale de la même voiture.)Comment comparer si deux images représentant le même objet si les images de l'objet appartiennent à deux sources différentes - dans OpenCV?

Comment puis-je détecter que les deux images représentent le même objet, c'est-à-dire la voiture, dans ce cas, en utilisant OpenCV?

J'ai essayé la correspondance de modèle, la fonction de correspondance de caractéristiques (ORB), etc., mais celles-ci ne fonctionnent pas et ne donnent pas de résultats satisfaisants.

+1

Pouvez-vous mettre les résultats de la correspondance ORB/modèle que vous avez essayé de voir pourquoi ils ne fonctionnent pas ou ne donnent pas de résultats satisfaisants? –

+0

Envisager d'accepter la meilleure réponse si vous avez été utile. – m3h0w

Répondre

1

La correspondance de caractéristiques SIFT peut produire de meilleurs résultats que l'ORB. Cependant, le problème principal ici est que vous n'avez qu'une image de chaque type (de la caméra mobile et de l'Internet.) Si vous avez un grand nombre d'images de ce modèle de voiture, vous pouvez former un système d'apprentissage automatique utilisant ces images. Plus tard, vous pouvez soumettre une image de la voiture au système d'apprentissage automatique et il y a beaucoup plus de chances que le système d'apprentissage automatique le reconnaisse

Du point de vue de l'apprentissage automatique, utiliser une seule image comme maître et l'appariement avec une autre est analogue à enseigner à un enfant la lettre «A» en utilisant une seule lettre manuscrite «A», et en s'attendant à ce qu'il/elle reconnaisse toute lettre manuscrite «A» écrite par quiconque

+0

Donc, si nous remplaçons l'image de Car par celle d'une couverture de livre, puisque la couverture d'un livre est unique et si le même processus est appliqué, avez-vous une suggestion pour cela? Comme si j'avais une image de caméra mobile de l'enfer de Dan Brown et une image téléchargée par Internet de la même chose. Que suggérez-vous dans ce cas? – Neelesh

+0

Les composants de texte et d'illustration des couvertures de livres en font un candidat bien meilleur pour les fonctions SIFT. Les couvertures de livre sont généralement planaires, de sorte que les différences entre la photo et la référence peuvent être principalement représentées en utilisant une transformation affine, le bruit et les changements d'éclairage. SIFT fonctionne assez bien dans ces conditions. J'ai essayé l'exemple OpenCV SIFT sur des couvertures de livres, juste pour tester. Fonctionne généralement bien. – Totoro

+0

L'article à http://ai.pku.edu.cn/aiwebsite/research.files/collected%20papers%20-%20others/Book%20Cover%20Identification%20by%20Using%20Four%20Directional%20Features%20Filed.pdf est un peu vieux, mais l'algorithme devrait être facile à implémenter dans OpenCV. TinEye est une entreprise qui fournit des logiciels pour cela, vous pouvez aussi regarder leur travail. – Totoro

1

Pensez à comment vous pouvez décrire mathématiquement les caractéristiques de la voiture afin que chaque voiture s différent. Peut-être que chaque voiture a une taille différente de roues? Peut-être que la distance entre la poignée de la porte et le bas de la vitre latérale est une caractéristique unique pour chaque voiture? Peut-être que la proportion de la largeur des vitres avant de chaque voiture par rapport à la largeur de la vitre arrière est une caractéristique individuelle de cette voiture?

Vous ne pouvez probablement pas répondre oui avec 100% de confiance à l'une de ces questions. Mais, ce que vous pouvez faire, c'est combiner ces éléments dans un vecteur de caractéristiques multidimensionnel et effectuer une classification.

Maintenant, quelle sera la partie cruciale ici est que, puisque vous faites la description de la fonctionnalité manuelle, vous devez prendre soin de faire un excellent travail et de tester chaque étape du chemin. Par exemple, vous devez concevoir des entités qui seront invariantes en termes d'échelle et de perspective. Ici, je vous recommande de lire sur comment face detection a été conçu pour répondre à cette exigence.

L'apprentissage automatique sera-t-il une meilleure solution? Cela dépend grandement de deux choses. Premièrement, quel type de données envisagez-vous de lancer à l'algorithme? Deuxièmement, comment pouvez-vous contrôler le processus.

Ce que la plupart des gens ne réalisent pas aujourd'hui, c'est que l'apprentissage automatique n'est pas une solution magique à chaque problème. C'est un outil et, en tant qu'outil, il doit être manipulé correctement pour obtenir des résultats. Si je devais vous donner un conseil, je dirais que vous ne le maîtriserez pas encore très bien.

Ma suggestion: se familiariser avec l'extraction de caractéristiques de base et les algorithmes généraux de traitement d'image. Détection de contours (Canny, Sobel), recherche de contour, description de forme, transformation de hough, opérations morphologiques, masquage, etc. Sans ces outils, je dirais que dans ce cas précis, même Machine Learning ne vous sauvera pas.

Je suis désolé: il n'y a pas de raccourci ici. Vous devez faire vos devoirs afin de faire fonctionner celui-là. Mais ne laissez pas cela vous effrayer. C'est un super projet. Bonne chance!