IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

OpenCV Discussion :

Analyse image cible fléchettes (cercles concentriques)


Sujet :

OpenCV

  1. #1
    Membre averti Avatar de predalpha
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    392
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 392
    Points : 363
    Points
    363
    Par défaut Analyse image cible fléchettes (cercles concentriques)
    Bonjour à tous,

    j'essaie de développer une application permettant d'analyser une cible de fléchette. L'objectif final est d'avoir une caméra filmant une cible de fléchettes traditionnelle et les lancers des joueurs.
    Sans pour le moment complexifier cet objectif, je suis parti tout simplement d'un jpeg d'une cible.

    A l'aide d'Emgu (openCV), je réussi à detecter le cercle extérieur d'une cible.

    Nom : Capture1.PNG
Affichages : 2407
Taille : 456,7 Ko

    Je ne suis pas parvenu à l'aide de la méthode de détection de cercles houghTransform à détecter tout les cercles concentriques. Alors, j'ai utilisé les mesures des cercles concentriques d'une vrai cible que j'ai adapté à l'aide d'un ratio pour dessiner ces derniers. Le ratio je l'obtiens car je connais la taille de la cible (image) par rapport à la taille d'une cible réelle.

    Nom : Capture2.PNG
Affichages : 2198
Taille : 447,6 Ko

    Toutefois, le résultat que j'obtiens manque de précision. Pouvez-vous m'aider à corriger cet effet ? Existe-t-il une meilleure solution pour analyser mon image ?

    Et que dois envisager pour une image de ce type ?

    Nom : fG00yWW.jpg
Affichages : 1918
Taille : 247,8 Ko

    Merci

  2. #2
    Membre actif Avatar de Masmeta
    Homme Profil pro
    Ing. R&D informatique industrielle
    Inscrit en
    Mai 2006
    Messages
    472
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Ing. R&D informatique industrielle
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2006
    Messages : 472
    Points : 221
    Points
    221
    Par défaut
    A la vue de ton image, tu as 3 couleurs dominante.
    Pourquoi ne fais tu pas un seuillage sur les blancs en les rendant noir puis ensuite une simple détection de contour (findcontour et drawcontour)?

  3. #3
    Membre averti Avatar de predalpha
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    392
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 392
    Points : 363
    Points
    363
    Par défaut
    merci beaucoup pour votre réponse. Lorsque vous parlez de seuillage sur les blancs, on parle bien de la fonction suivante ?
    http://docs.opencv.org/doc/tutorials...threshold.html

  4. #4
    Membre actif Avatar de Masmeta
    Homme Profil pro
    Ing. R&D informatique industrielle
    Inscrit en
    Mai 2006
    Messages
    472
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Ing. R&D informatique industrielle
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2006
    Messages : 472
    Points : 221
    Points
    221
    Par défaut
    oui c'est cela

  5. #5
    Membre averti Avatar de predalpha
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    392
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 392
    Points : 363
    Points
    363
    Par défaut
    Cela avance petit à petit, mais il est vrai qu'acquérir les connaissances sur le traitement de l'image est fastidieux quand on vient d'un bts infoG. Toutefois je persévère pour le moment.

    Nom : Capture3.PNG
Affichages : 1742
Taille : 472,0 Ko

    Mon objectif suivant va être de mettre en place la fonction "findcontour" que vous m'avez indiquée. Mais avant je dois appliquer un blur comme dans la fonction houghTransform.
    Ainsi je devrais être capable de pouvoir détecter les formes circulaires et les droites.
    Le plus petit cercle sera donc le centre.

  6. #6
    Membre averti Avatar de predalpha
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    392
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 392
    Points : 363
    Points
    363
    Par défaut
    J'arrive à obtenir le résultat suivant :

    Nom : Capture4.PNG
Affichages : 1805
Taille : 1,28 Mo

    Là je sèche un peu. Trop de cercles en général et aussi des cercles manquants. Avez-vous une idée ?

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 91
    Points : 50
    Points
    50
    Par défaut
    Tu peux aussi décomposer ton image selon les composantes couleurs :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    std::vector<cv::Mat> bgr(3);
    split(image, bgr);
    Et ensuite travailler sur la détection des zones sur les parties rouge et verte.

  8. #8
    Membre averti Avatar de predalpha
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    392
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 392
    Points : 363
    Points
    363
    Par défaut
    Merci Olivier pour votre réponse mais je pense que les couleurs vont me poser un problème de précision dans les zones.

    Mes différents essais m'ont permis de comprendre qu'une cible de fléchette est une zone relativement complexe à analyser par ordinateur. Les lignes traversant les cercles posent tous les problèmes liés à l'analyse de l'image. Toutes mes tentatives ont pour le moment échouées mais je persévérerais lorsque j'aurais un peu plus de temps.

    Mon prochain essai dans le domaine consistera à appliquer une perspective sur la cible et de lui super positionner une forme géométrique de cible (que je dessinerais par programmation). Peut-être me heurterais-je à moins de difficultés mais à un calibrage nécessaire de l'image de base.

  9. #9
    Membre averti Avatar de predalpha
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    392
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 392
    Points : 363
    Points
    363
    Par défaut
    J'ai un peu avancé cf printscreen ci-dessous :

    en jaune : l'ellipse
    en bleu : les "vertices" de l'ellipse
    en rouge : mon pattern de cible que je dessine de A à Z en partant du centre trouvé et d'un coefficient "à la main".

    Nom : Capture5.PNG
Affichages : 1940
Taille : 1 014,3 Ko

    Finalement je suis parti sur votre idée olivier. J'ai splité l'image en RGB et fait un ROI sur le centre de mon channel Rouge. Ceci m'a permis de détecter la plus petite ellipse (formes jaunes et bleues).
    Ensuite je dessine mon pattern sur l'image résultat pour obtenir les cercles et traits rouges à l'aide d'un coefficient à la main.

    Je souhaiterais effectuer une transformation de mon image résultat. Toutefois je ne sais pas convertir une ellipse en cercle ce qui pourrait me donner la matrice homographique afin d'appliquer une perspective sur l'image.
    Ci-dessous un code test pour réaliser une perspective :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    // Input Quadilateral or Image plane coordinates
                    PointF[] inputQuad = new PointF[4];
                    // Output Quadilateral or World plane coordinates
                    PointF[] outputQuad = new PointF[4];
                    Image<Bgr, Byte> outPut = opImage.Clone();
                    HomographyMatrix lambda = new HomographyMatrix();
                    inputQuad[0] = new PointF(-30, -60);
                    inputQuad[1] = new PointF(opImage.Cols + 50, -50);
                    inputQuad[2] = new PointF(opImage.Cols + 100, opImage.Rows + 50);
                    inputQuad[3] = new PointF(-50, opImage.Rows + 50);
                    outputQuad[0] = new PointF(0, 0);
                    outputQuad[1] = new PointF(opImage.Cols - 1, 0);
                    outputQuad[2] = new PointF(opImage.Cols - 1, opImage.Rows - 1);
                    outputQuad[3] = new PointF(0, opImage.Cols - 1);
                    lambda = CameraCalibration.GetPerspectiveTransform(inputQuad, outputQuad);
                    opImage = opImage.WarpPerspective(lambda, Emgu.CV.CvEnum.INTER.CV_INTER_NN, Emgu.CV.CvEnum.WARP.CV_WARP_FILL_OUTLIERS, new Bgr(0, 0, 0));
    Si vous avez des idées meilleures ou plus simples, je suis preneur.

Discussions similaires

  1. Tracé d'images suivant un cercle
    Par Cyrilz dans le forum Algorithmes et structures de données
    Réponses: 3
    Dernier message: 11/09/2009, 13h48
  2. Réponses: 3
    Dernier message: 05/02/2009, 14h31
  3. Cercles concentriques !
    Par kronos85 dans le forum VB.NET
    Réponses: 6
    Dernier message: 29/10/2008, 14h07
  4. SQLBrowser, analyse batch ciblée
    Par dinobogan dans le forum Outils
    Réponses: 6
    Dernier message: 20/06/2008, 15h43
  5. Analyser image + générer des "map"
    Par gwendy dans le forum Langage
    Réponses: 1
    Dernier message: 12/12/2007, 11h20

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo