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

C++ Discussion :

Centre d'une figure


Sujet :

C++

Vue hybride

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

    Informations forums :
    Inscription : Mai 2010
    Messages : 9
    Par défaut Centre d'une figure
    Bonjour à tous et à toutes


    Alors voila, je bloque dans mon code en ce moment, donc j'espère que quelqu'un pourra m'aider, ou me mettre sur la voie :/


    Pour le moment, mon code se contente de tracer un cercle blanc sur fond noir, avec 5 "trous" équidistants.

    Ce que j'aimerais faire, c'est savoir ou ce trouve le centre de ma figure, je m'explique :

    Ma figure donne ceci (voir pièce jointe), et est placée aléatoirement sur l'écran quand on lance l'application.

    J'aimerais donc par je ne sais qu'elle moyen, parcourir l'écran pour trouver le cercle blanc et déterminer son centre, puis trouver la position angulaire du petit cercle noir (entouré en rouge sur l'image en pièce jointe)


    Quelqu'un peut-il m'aider ?
    Merci d'avance pour vos réponses.


    Cordialement,
    Kadath.
    Images attachées Images attachées  

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    1 415
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 1 415
    Par défaut
    Salut !

    Ce n'est pas trivial, il s'agit d'une tâche de vision par ordinateur. A ta place, je me tournerais vers l'utilisation d'une librairie comme OpenCV. Ton problème est assez simple du point de vue de la lib et une transformée de Hough généralisée devrait faire l'affaire.

    PS osef : j'ai testé OpenCV hier soir et ça roxe

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    195
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 195
    Par défaut
    La premiere partie du probleme est triviale.
    J'imagine aue dans ton image il n y a que ces figures au moment ou tu va lancer l'algorithme.

    Tout depend aussi de la nature de l'application ( doit elle etre rapide ou precise ?)

    Ce que je te propose :

    Si l'application doit etre la plus precise possible.
    - un petit filtre qui construit une image tampon ou sera dessine les contours.
    Des qu il y a une difference de couleur tu met le pixel correspondant a 255 dans l'image tampon.

    - tu parcourt le contour du grand cercle blanc en calculant son perimetre.

    - tu calcul son diametre ( plus particulierement son rayon )

    - tu repart d'un point du cercle et tu parcourt son demi perimetre.

    - Une fois ici tu calcul le vecteur entre ces deux positions.

    - tu translate un de tes points du rayon dans la direction et le sens du vecteur ( adequoit ).

    La tu as ton centre d'une facon precise.

    Pour le cercle noir je suis pas sur d'avoir compris. Si tu veux recuperer le premier cercle noir sur la droite vers le haut c'est facile :

    - tu parcourt ton image tampom de contour et tu selectionne le cercle qui possede tous ses points avec :
    - une abscisse positive
    - une ordonnee positive et minimale.

    Si tes cercles sont bien equidistants sa marche.

    N'hesite pas a te faire des petites structure pouvant accueillir des familles de points, sa te facilitera la tache dans la recherche de cercles.

    En esperant avoir put t aider.

    Ps : Vraiment desole pour les accents , le clavier que j ai est QWERTY

    Ps2 : Biensur tu peux te tourner vers OpenCV si tu n a pas envie de te fatiguer. Tout depend du but pedagogique ou applicatif de ton application.

  4. #4
    Membre Expert
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    1 415
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 1 415
    Par défaut
    Citation Envoyé par nightwar Voir le message
    Ps2 : Biensur tu peux te tourner vers OpenCV si tu n a pas envie de te fatiguer. Tout depend du but pedagogique ou applicatif de ton application.
    En effet. Ca dépend de l'image d'entrée : si c'est du beau noir et blanc nickel à pile poil 255 et 0, sans déchets, ça facilite grandement les choses. J'étais parti du principe que l'image d'entrée n'était pas aussi propre, mais ça peut être le cas, au temps pour moi.

    Ca peut aussi être, sans aucune critique à l'égard des idées de Nightwar qui devraient fonctionner, l'occasion de mettre les doigts dans les outils mathématiques "génériques" utilisés pour ce genre de choses.

    Peut-on en savoir un peu plus sur ce que tu fais ? La vision est un sujet qui m'intéresse particulièrement, je suis curieux

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 9
    Par défaut
    Alors, oui l'image est seulement composée de couleur bien propres (un beau noir en 0,0,0 et un beau blanc en 255, 255, 255)

    J'utilise la librairie SDL, et SDL_gfxprimitives pour mes cercles.



    J'avais imaginé une boucle, qui parcourrai l'écran horizontalement jusqu'a trouver un pixel blanc. Puis une boucle parcourrai toujours horizontalement la zone blanche jusqu'a rencontrer un pixel qui ne serait pas blanc

    A partir de ca, on pourrait prendrait la moitié de cette valeur puis une boucle parcourrai depuis ce milieu de droite la zone blanche mais verticalement cette fois, puis, en prenant le milieu de la valeur obtenue, et en l'associant a celle obtenue par le parcours de la zone en horizontal, on obtiendrais le centre du cercle.
    (Cette partie serait donc intégrée après le traçage du cercle blanc mais avant les cercles noirs)



    Mais c'est plus difficile a coder que ce que je ne le pensait..

    Je fait (ou plutôt j'essaie de faire) une application qui génère une sorte de jante (cercle blanc composé de cinq cercles noirs équidistants positionnés aléatoirement a chaque lancement de l'application) et dont on déterminerai la position angulaire du premier cercle noir à droite, et qui afficherait donc sa position a l'écran sous forme:

    x=r*cos(θ)
    y=r*sin(θ)

    r étant le rayon du cercle de positionnement.


    Avec un schéma, ce sera peut être plus clair ^^'


    Si l'un de vous peut m'aider un peu a avancer, je suis preneur..
    Merci d'avance pour vos réponses
    (Et merci pour vos réponses passées^^)
    Images attachées Images attachées   

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    195
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 195
    Par défaut
    Tant mieux alors car je travaille dans la vision .
    En fait c'est plus un probleme de traitement d'image que de vision mais ne chipotons pas.

    Ca peut aussi être, sans aucune critique à l'égard des idées de Nightwar qui devraient fonctionner, l'occasion de mettre les doigts dans les outils mathématiques "génériques" utilisés pour ce genre de choses.
    Aucune critique tu as tout a fait raison. Certaine personne ( comme moi ) aime maitriser de A a Z l'algorithme mis en jeu. Mais Utiliser des outils generiques est fortement recommande.

    En effet. Ca dépend de l'image d'entrée : si c'est du beau noir et blanc nickel à pile poil 255 et 0, sans déchets, ça facilite grandement les choses. J'étais parti du principe que l'image d'entrée n'était pas aussi propre, mais ça peut être le cas, au temps pour moi.
    Oui c'est un point non negligeable dans le deroulement de l'algo. Il y a toujours une facon d'eliminer ces "dechets" mais cela peut s'averer fastidieux.


    Ton algorithme presente un defaut.
    Que fais tu si tu rencontre un pixel noir correspondant a un des petits cercle noir sur ta trajectoire.

    Peut tu par contre explicite clairement les conditions ?:

    - placement aleatoire et equidistant des cercles noirs ?
    - taille du cercle blanc fixe ( important ! )

    Coder ce genre d'algorithme est evident si tu possede une structure solide. Je peux te renseigner sur ce pourquoi tu bloque



    EDIT
    (Cette partie serait donc intégrée après le traçage du cercle blanc mais avant les cercles noirs)
    Sa m'apprendra a lire a la va vite. Tu as cependant des cas critiaue ou tes droites sont tangante au cercle .Dans ce cas la tu dois gerer pas mal de comportements.

    Et puis honnetement je ne comprend pas le but de l'application si tu peut lancer l'algo avant le dessin des cercles noirs ? Peut tu approfondir le but ?

  7. #7
    Membre Expert
    Avatar de kmaniche
    Inscrit en
    Janvier 2006
    Messages
    1 717
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 717
    Par défaut
    Si l'objet qui t'intéresse est en blanc, Pourquoi ne pas calculer simplement le centre de gravité de l'image entière ?

  8. #8
    Membre Expert
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    1 415
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 1 415
    Par défaut
    Citation Envoyé par nightwar Voir le message
    Et puis honnetement je ne comprend pas le but de l'application si tu peut lancer l'algo avant le dessin des cercles noirs ? Peut tu approfondir le but ?
    C'était ce que je demandais quand je demandais d'en savoir un peu plus. Peux tu nous parler de l'application ? ça nous aidera à t'aider (si je puis m'exprimer ainsi).

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 9
    Par défaut
    Citation Envoyé par nightwar Voir le message

    Peut tu par contre explicite clairement les conditions ?:

    - placement aleatoire et equidistant des cercles noirs ?
    - taille du cercle blanc fixe ( important ! )

    * Par placement équidistants, j'entends que les cercles seront toujours espacés de 360/5 soit 72°.
    * Le rayon du cercle blanc fixe est de 250 pixels

    Citation Envoyé par nightwar Voir le message
    Et puis honnetement je ne comprend pas le but de l'application si tu peut lancer l'algo avant le dessin des cercles noirs ? Peut tu approfondir le but ?
    Je ne comprend pas ce que tu ne comprends pas?
    Dans mon code, je veux juste commencer par tracer le cercle blanc, puis trouver son centre et placer les cercles noirs, afin justement de ne pas rencontrer de pixel noir correspondant a l'un des cercles noir lors de la recherche du centre.


    Le but final étant de trouver la position angulaire du premier cercle noir de droite par rapport a l'axe horizontal (diamètre du cercle blanc) et de l'afficher a l'écran.

    Et ce quelque soit la position du cercle blanc sur l'écran.
    (cf les schémas en pièces jointes dans mon message précédent).


    EDIT:
    Citation Envoyé par nightwar Voir le message
    Tu as cependant des cas critiaue ou tes droites sont tangante au cercle .
    Etant donné la taille du cercle par rapport a l'écran, en parcourant l'écran entre certaines valeurs, je pense qu'il n'y aura pas de soucis de cas ou les droites seront tangentes

Discussions similaires

  1. Dessiner une figure avec graphics.h
    Par Firas_tn dans le forum C
    Réponses: 2
    Dernier message: 29/03/2006, 20h33
  2. Inclure une figure dans la marge
    Par mat514 dans le forum Tableaux - Graphiques - Images - Flottants
    Réponses: 2
    Dernier message: 16/03/2006, 18h10
  3. Probleme afficher au centre d'une frame
    Par brasco06 dans le forum AWT/Swing
    Réponses: 9
    Dernier message: 18/02/2006, 21h51
  4. Insérer une figure
    Par subzero82 dans le forum Tableaux - Graphiques - Images - Flottants
    Réponses: 4
    Dernier message: 24/01/2006, 16h49
  5. Insertion d'une figure
    Par mohamed.chedly dans le forum Tableaux - Graphiques - Images - Flottants
    Réponses: 2
    Dernier message: 24/06/2005, 16h56

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