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 :

Utilisation de cvMinEnclosingCircle


Sujet :

OpenCV

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 57
    Par défaut Utilisation de cvMinEnclosingCircle
    Bonjour,

    Je viens de tenter de mettre en oeuvre la fontion cvMinEnclosingCircle (pour trouver le cercle minimum englobant n points).
    Test réalisé avec 3 points qui dans mes souvenirs donne une réponse exacte (cercle dont le centre est l'intersection des 3 médianes du triangle).

    Résultat des plus approximatifs : pour l'un des points, le cercle trouvé passe à plus de 15 pixels (pour un rayon de 270), l'erreur étant moindre pour les 2 autres. Aucun des points n'est sur le cercle.

    Je ne vois aucune astuce dans l'utilisation de la fonction.

    Problème connu ou pas ? Un avis ?

  2. #2
    Membre éprouvé Avatar de hunta_kirua
    Profil pro
    Inscrit en
    Février 2008
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 110
    Par défaut
    Salut,

    Je viens d'essayer un cas trivial ({1,0}{0,1}{-1,0}) et ça fonctionne chez moi. J'ai le centre en {0,0} et un rayon à 1.03. C'est pas exceptionnel mais loin de 15 pixels d'erreur. Je joints le code au cas où :

    #include "cv.h"
    #include <iostream>

    void main()
    {
    float radius;
    CvPoint2D32f center;
    CvMemStorage* storage=cvCreateMemStorage(0);

    CvSeq* seq = cvCreateSeq( CV_32SC2, sizeof(CvContour),
    sizeof(CvPoint), storage );
    CvPoint pt1={1,0};
    CvPoint pt2={0,1};
    CvPoint pt3={-1,0};

    cvSeqPush( seq, &pt1 );
    cvSeqPush( seq, &pt2 );
    cvSeqPush( seq, &pt3 );

    cvMinEnclosingCircle(seq, &center, &radius);

    std::cout<<"Centre du cercle : "<<center.x<<" et "<<center.y<<std::endl;
    std::cout<<"Rayon de : "<<radius<<std::endl;

    }

    Si tu as toujours ton problème, donne-moi les coordonnées des points que tu utilises pour voir si c'est une exception.

    A+

    Hunta

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 57
    Par défaut
    Merci pout ton contrôle.

    Mes points {x, y}:
    {428, 627}
    {585, 634}
    {378,1114}

    Résultat : centre {481.50, 874.00} et rayon 269.11
    Le tout à l'arrondi près.

    C'est le tracé de ces données qui ne me va pas du tout.

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 57
    Par défaut
    Je percute après avoir répondu ... mais si au lieu de 1 du mets 500 ... tu vas obtenir comme moi un rayon de 515 (avec un centre en 0,0) ... soit 15 pixels d'erreur (donc linéaire car 500*0.03=15 et on a la même erreur).
    CQFD mais je suis surpris et j'ai peur de passer à côté.

  5. #5
    Membre éprouvé Avatar de hunta_kirua
    Profil pro
    Inscrit en
    Février 2008
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 110
    Par défaut
    J'ai testé tes coordonnées et je trouve le résultat suivant :
    centre {481.5, 874} et rayon de 269.207
    J'ai aussi testé en {500,0}, {0,500} et {-500,0} et j'ai bien, comme tu l'as deviné, le centre en {0,0}et le rayon à 515.... Il semblerait bien qu'on ait une erreur de 0.3 pixel par pixel du rayon... pas très précis...
    A priori, tu n'es pas le seul à avoir ce problème car j'ai trouvé un message en parlant sur le groupe OpenCV (http://tech.groups.yahoo.com/group/OpenCV/message/20058) mais pas de solution...
    Reste plus qu'à le coder pour avoir un truc plus précis ou regarder le code de la fonction

    A+

    Hunta

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 57
    Par défaut
    Je viens de me réinscrire à Yahoo .. pour constater que les messages sur cette fonction sont de 2004 et 2005 et calme plat depuis
    Il me semble que dans un changelog cette fonction avait été corrigée (dans une beta avant la 1.0).
    Je vais poster un petit coup sur le forum pour voir ...

    nb : je crois qu'une release est prévue pour 2008, c'est temps de se manifester (pour ma part pas moyen d'obtenir quelque chose de correct avec cvFindCornerSubPix quand je me mets dans une zone à 2 pixels du résultat recherché)

Discussions similaires

  1. utiliser les tag [MFC] [Win32] [.NET] [C++/CLI]
    Par hiko-seijuro dans le forum Visual C++
    Réponses: 8
    Dernier message: 08/06/2005, 15h57
  2. Réponses: 4
    Dernier message: 05/06/2002, 14h35
  3. utilisation du meta type ANY
    Par Anonymous dans le forum CORBA
    Réponses: 1
    Dernier message: 15/04/2002, 12h36
  4. [BCB5] Utilisation des Ressources (.res)
    Par Vince78 dans le forum C++Builder
    Réponses: 2
    Dernier message: 04/04/2002, 16h01
  5. Réponses: 2
    Dernier message: 20/03/2002, 23h01

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