Question

Supposons que j'ai un fichier image / URL, et je veux que mon logiciel il recherche dans un ensemble de 100 images (ou au moins dans cet ordre de grandeur). L'image cible que le logiciel devrait trouver doit être le « même » image que l'image donnée, mais il devrait encore être en mesure de « pardonner » légère traitement sur l'un d'eux (les deux images ont été coupées différemment, ou ils ont été compressés différemment). La question est - est cette tâche d'un possible, étant donné que je n'ai pas des images avant que la recherche a lieu (il n'y aura pas d'indexation avant la recherche.) Est-il susceptible de travailler dans subsecond temps (rappelez-vous que le jeu est tout à fait comparer petite). Et si possible, quels outils puis-je utiliser pour cette tâche? Cela pourrait être des composants logiciels ou même un service en ligne (je peux vivre avec ça pour une preuve de concept). Can OpenSURF Aidez-moi? Pour concentrer ma question plus -. Je ne demande pas quels algorithmes à utiliser, à ce stade, je préfère utiliser un outil existant / API / services

Était-ce utile?

La solution

L'image cible que le logiciel devrait trouver devrait être le « même » image que l'image donnée, mais il devrait encore être en mesure de « pardonner » légère traitement sur l'un d'eux.

Si « légère traitement » ne comporte pas de rotation, mais seulement « culture », puis transversale simple corrélation devrait fonctionner, s'il pourrait y avoir une correction en perspective, rotation, correction de la distorsion de l'objectif, alors les choses sont plus compliquées.

Je pense que cette méthode est tout à fait pardonner à de légères corrections de couleurs. Quoi qu'il en soit, vous pouvez toujours convertir les images en niveaux de gris et de comparer les versions en niveaux de gris si vous voulez.

Pour concentrer ma question plus loin -. Je ne demande pas quels algorithmes à utiliser, à ce stade, je préfère utiliser un outil existant / API / services

Vous pouvez commencer à partir de cvMatchTemplate de la bibliothèque OpenCV (les Points de liaison à la version C de l'API, mais il est également disponible pour C ++ et Python). Utilisez l'image recadrée comme modèle, et le chercher dans toutes vos images.

Si les images que vous comparez ont des caractéristiques sombres sur fond clair, vous pouvez bénéficier de l'utilisation des méthodes de CV_TM_CCOEFF ou CV_TM_CCOEFF_NORMED. Ils soustraient à la fois la moyenne sur la zone de modèle à partir des deux images. méthodes normalisées (de CV_TM_*_NORMED) fonctionnent généralement mieux, mais sont plus lents que leurs homologues non normalisés.

Vous pouvez envisager de faire quelques images pré-traitement avec les avant la corrélation croisée. Si vous les normaliser en premier lieu, la corrélation croisée sera moins sensible à la légère luminosité / modification de contraste. Si vous détectez des bords d'abord, comme suggéré par @misha, vous perdrez l'information couleur / légèreté, mais les résultats pour le contour se chevauchent seront beaucoup mieux.

Autres conseils

jetxee vous avez désactivé sur la bonne voie. Toutefois, si vous utilisez simplement correspondant de modèle, vous pouvez rencontrer des problèmes où les interfère de fond avec le résultat correspondant de modèle. Par exemple, si votre modèle est un bâtiment et l'arrière-plan est principalement la lumière (par exemple le sable du désert), puis la mise en correspondance de modèle échouera car l'arrière-plan plus léger renvoie toujours une corrélation croisée plus élevé que le modèle plus sombre. Voici un exemple de ce problème.

La façon dont vous le résoudre est la même chose que ce qui est dans le lien:

  • Effectuer bord de détection à la fois sur votre modèle et l'image cible.
  • Jeter modèle d'origine et de l'image loin
  • Effectuer modèle détection en utilisant le modèle détecté de bord et de l'image cible détectée bord

En ce qui concerne le traitement pardonnant légère, l'étape de détection de bord prendra soin de cela. Tant que les bords des deux images ne sont pas modifiées de manière significative, l'approche (floue, déformée optiquement) fonctionne.

Je sais que vous ne cherchez pas spécifiquement pour les algorithmes, mais néanmoins, permettez-moi de suggérer ce qui suit qui peut accomplir exactement ce que vous essayez de faire, de façon très efficace ...

Pour les versions recadrées de la même image, y compris la rotation, la F OURRIER-Mellin transformer ou transformation log-polaire (attention pour le dessin semi-nu artsy - bonne source cependant). vous donnera la traduction, la rotation et coefficients échelle entre les deux images, permettant de déterminer quelles opérations ont été nécessaires pour aller de l'un à l'autre

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top