Détection d'une croix dans une image avec OpenCV

j'essaie de détecter une forme (une croix) dans Mon flux vidéo d'entrée avec l'aide de OpenCV. Actuellement, je suis en train de battre pour obtenir une image binaire de ma croix qui fonctionne assez bien. Malheureusement mon algorithme pour décider si le blob extrait est une croix ou non ne fonctionne pas très bien. Comme vous pouvez le voir dans l'image ci-dessous, tous les coins ne sont pas détectés sous certaines perspectives.

Enter image description here

j'utilise findContours() et approxPolyDP() pour obtenir un rapprochement de mon contour. Si je détecte 12 coins / sommets dans cette courbe approximée, la tache est supposée être une croix.

<!-Y a-t-il une meilleure façon de résoudre ce problème? J'ai pensé à SIFT, mais l'algorithme doit fonctionner en temps réel et j'ai lu que SIFT n'est pas vraiment adapté au temps réel.

41
demandé sur Ilmari Karonen 2013-01-30 23:33:27

2 réponses

j'ai quelques suggestions qui pourraient donner des résultats intéressants, bien que je n'en sois pas certain.

Si la croix est toujours au centre de votre image et se trouve toujours sur une surface plane, vous pouvez essayer de trouver une homographie entre la caméra et le plan sur lequel la croix se trouve. Cela vous permettrait de transformer une image d'échantillon de la croix (à une sélection de différentes rotations planes) en système de coordonnées de la Croix visualisée. Vous pourriez puis générer des gabarits que vous pouvez associer à l'image. Vous pouvez faire quelques tests d'accord de pixel simples pour déterminer si vous avez une correspondance.

Sinon, vous pouvez essayer de former un Classificateur basé sur Haar pour reconnaître la croix. Ce type de classificateur est souvent utilisé dans la détection de visages et détecte les bords orientés dans les images, classant les visages par les positions relatives de plusieurs bords orientés. Il a une bonne précision de classification sur les tailles et est extrêmement rapide. Bien que je ne puisse pas garantir son exactitude dans cette situation particulière, il pourrait fournir de bons résultats pour des formes simples telles qu'une croix.

9
répondu Max Allan 2013-01-30 20:17:42

calcul de la coque convexe et puis profiter de la défauts de convexité peut-travail.

tous les croisements doivent présenter quatre défauts de convexité, soit quatre ensembles de deux points, ou quatre vecteurs. De plus, si votre forme était une croix, alors ces quatre vecteurs auront deux paires d'angles supplémentaires.

8
répondu David Wurtz 2013-02-06 20:25:15