Détection des roues du camion

Je travaille actuellement sur un projet pour lequel nous avons une série de photos de camions passant devant une caméra. J’ai besoin de détecter quel type de camion il s’agit (combien de roues il a). J’utilise donc EMGU pour essayer de détecter cela.

Le problème que j’ai est que je n’arrive pas à détecter les roues avec la détection HoughCircle d’EMGU, il ne détecte pas toutes les roues et détectera également les cercles aléatoires dans le feuillage.

Donc, je ne sais pas ce que je devrais essayer ensuite, j’ai essayé de mettre en œuvre SURF algo pour faire correspondre les roues entre elles, mais cela ne semble pas fonctionner non plus, car elles ne sont pas exactement les mêmes. Existe-t-il un moyen de mettre en place un système “souple” SURF algo?

C’est ce que je commence avec.

C’est ce que j’obtiens après la détection du cercle de Hough. Beaucoup de détections erronées, certaines ne sont même pas près d’avoir un cercle et les roues arrière sont détectées comme une seule pour une raison quelconque.

Hough Circles

Serait-il possible de confirmer que les cercles détectés sont réellement des roues utilisant SURF et les faisant correspondre entre eux? Je suis un peu perdu sur ce que je devrais faire ensuite, toute aide serait grandement appréciée.

(désolé pour le mauvais anglais)

METTRE À JOUR

Voici ce que j’ai fait. J’ai utilisé le suivi des taches pour pouvoir trouver la tâche dans mon ensemble de photos. Avec cela, je peux effectivement localiser le camion en mouvement. Ensuite, je divise le rectangle de la goutte en deux et prends la moitié inférieure à partir de là. Je sais que je reçois la zone qui devrait contenir les roues, ce qui augmente considérablement la détection. Je vais ensuite lancer un contrôle d’intensité légère en vrac sur les roues que je reçois. Comme ils sont en général plus noirs, je devrais avoir une valeur assez basse pour ceux-là et pouvoir éliminer tout ce qui est trop blanc, à 180/255 et plus. Je sais aussi que le rayon de mes cercles ne peut être supérieur à la moitié de la zone de détection divisée par deux.

Après la détection

Dans cette réponse, je décris une approche qui a été testée avec succès avec les images suivantes:

Le pipeline de traitement d’image commence par sous- échantillonner l’image d’entrée ou en effectuant une opération de réduction des couleurs pour réduire la quantité de données (couleurs) dans l’image. Cela crée des groupes de pixels plus petits avec lesquels travailler. J’ai choisi de sous- échantillonner :

La 2ème étape du pipeline effectue un flou gaussien afin de lisser / rendre flou les images:

Ensuite, les images sont prêtes à être seuillées , c’est-à-dire binarisées:

La 4ème étape nécessite l’exécution de Hough Circles sur l’image binarisée pour localiser les roues:

La dernière étape du pipeline consisterait à dessiner les cercles trouvés sur l’image originale:

Cette approche n’est pas une solution robuste. Cela n’a pour but que de vous inciter à poursuivre votre recherche de réponses.

Je ne fais pas C #, désolé. Bonne chance!

Premièrement, les projections de roues sont des ellipses et non des cercles. Deuxièmement, un dégradé de fond peut facilement produire un object en forme de cercle, il n’ya donc aucune surprise. Le problème avec les ellipses est bien sûr qu’ils ont 5 DOF et non 3DOF sous forme de cercles. Notez que cinq espaces dimensionnels de Hough deviennent impraticables. Certaines transformations de Hough généralisées peuvent probablement résoudre le problème d’ellipse aux dépens de nombreux cercles de fausses alarmes supplémentaires. Pour contrer FA, vous devez vérifier que ce sont bien des roues qui appartiennent à un camion et rien d’autre.

Vous devez probablement commencer par spécifier votre problème en termes d’objects et d’arrière-plans plutôt que de détecter les roues. Ceci est important car les objects créeraient un contexte visuel pour détecter les roues et l’parsing en arrière-plan montrera à quel point il serait facile de segmenter un camion (un object) en premier lieu. Si la caméra est statique, vous pouvez utiliser le mouvement pour détecter l’arrière-plan. Si le fond est relativement uniforme, un mélange de couleurs gaussien peut aider à en éliminer une grande partie.

Je suggère fortement d’utiliser: http://cvlabwww.epfl.ch/~lepetit/papers/hinterstoisser_pami11.pdf

et l’implémentation C #: https://github.com/dajuric/accord-net-extensions

(jetez un coup d’oeil aux échantillons)

Cet algorithme permet d’obtenir des performances en temps réel en utilisant plus de 2 000 modèles (20 à 30 ips), ce qui vous permet de couvrir les cas d’ellipse (projection) et de forme de cercle. Vous pouvez modifier un exemple de suivi manuel (FastTemplateMatchingDemo)

en mettant vos propres modèles binarys (faites-les dans Paint :-))

PS: Pour supprimer les faux positifs, un type de suivi est également incorporé. Le lien vers la bibliothèque que j’ai postée contient également des algorithmes de suivi tels que: Filtre de Kalman discret et Filtre de particules, le tout avec des échantillons!

Cette bibliothèque est encore en développement, il est donc possible que quelque chose ne fonctionne pas. S’il vous plaît n’hésitez pas à m’envoyer un message.