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 :

Matrice d'un espace euclidien vers projectif


Sujet :

OpenCV

  1. #1
    Nouveau membre du Club
    Inscrit en
    Juin 2008
    Messages
    68
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 68
    Points : 28
    Points
    28
    Par défaut Matrice d'un espace euclidien vers projectif
    Bonjour à tous,

    Je viens d'écumer le forum à la recherche d'un élément de réponse à une de mes questions fondamentale. Sans succès pour l'instant, donc...

    Voila :
    - je realise la detection de forme simple (rectangles supposés vrai dans l'espace euclidien) dans l'image

    - mais ils sont vus dans un espace projectif : je dispose donc des coordonnées pixel des 4 coins du rectangle dans l'espace projectif.

    Ma question est simple en apparence, mais je ne sais pas par quel angle aborder le problème :

    Je voudrai dessiner un cercle à l'intérieur de mon rectangle. Alors je sais comment calculer les coordonnée X,Y dans un espace euclidien, mais comment trouver les correspondances de ces coordonnées dans l'espace projectif (de mon image).

    Ca sent la matrice, mais si quelqu'un pouvait m'orienter un peu svp !!!

  2. #2
    Membre régulier Avatar de xtra.creativity
    Développeur informatique
    Inscrit en
    Mars 2007
    Messages
    108
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2007
    Messages : 108
    Points : 84
    Points
    84
    Par défaut
    En gros tu cherche a calculer la matrice de projection 2D , 3D ?

  3. #3
    Nouveau membre du Club
    Inscrit en
    Juin 2008
    Messages
    68
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 68
    Points : 28
    Points
    28
    Par défaut
    Et bien oui, ça doit être ca !!

    Voila certainement le mot clé qui me manquait. Donc je dispose des coordonnées dans l'espace projectif (donc dans l'image) :
    - des 4 coins du rectangle
    - des 3 points de fuites

    C'est grave docteur ?

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Je pense que tu dois construire ta matrice de projection grâce à cvGetPerspectiveTransform. Tu donnes en entrée d'une part la famille de quatre points de l'espace euclidien et d'autre part les quatre points correspondants dans l'espace projectif. Tu récupères une matrice 3x3.

    Pour le changement de coordonnées euclidien vers projectif : (X,Y)->(X', Y'), il suffit d'utiliser la multiplication de matrices :
    transp [X' Y'] = M x transp [X Y 1]
    (transp = transposée, pour avoir des vecteurs colonne)
    M étant la matrice 3x3 précitée

    Enfin, si tu as une image dans l'espace euclidien et que tu veux la convertir en une image dans l'espace projectif, il faut utiliser cvWarpPerspective.

    J'espère t'avoir débloqué un peu.

  5. #5
    Nouveau membre du Club
    Inscrit en
    Juin 2008
    Messages
    68
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 68
    Points : 28
    Points
    28
    Par défaut
    Niquel,

    Je te remercie, en effet, c'est beaucoup plus clair à présent !

    Maintenant je sais ce qu'il me reste à faire... Trouver les coordonnées des 4 coins du rectangle dans l'espace euclidien (et oui je ne les ai pas !). En revanche, je sais qu'il s'agit d'un rectangle vrai (les 4 angles à 90 dans l'espace euclidien).

    J'imagine qu'il doit exister un moyen de trouver au moins un rapport de longueur euclidienne entre les differents cotés, non ? Et donc d'alimenter cvGetPerspectiveTransform ?

    Si vous trouvez, je vous paierai en reconnaissance éternelle (ou en faute d'orthographe, c'est selon) !

  6. #6
    Invité
    Invité(e)
    Par défaut
    Sauf erreur de ma part, je pense que ça n'a pas d'importance. Tu peux prendre un carré, par exemple (-1,-1) (-1,1) (1,-1) (1,1) comme coordonnées dans l'espace euclidien et les mapper sur les coordonnées de ton espace projectif.

    Ensuite, pour tracer ton cercle, il "suffit" de tracer chaque point du cercle que tu veux dans le carré (par exemple (cos(t), sin(t)) avec t variant entre 0 et 2PI), puis de les mapper dans l'espace projectif à l'aide de la matrice de projection...

    Il y a plus clean. Tracer sur une image vierge le cercle et le carré euclidiens, transformer cette image en projectif avec cvWarpPerspective, puis fusionner les deux images (image projective initiale + image projective du carré et du cercle).

  7. #7
    Nouveau membre du Club
    Inscrit en
    Juin 2008
    Messages
    68
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 68
    Points : 28
    Points
    28
    Par défaut
    Effectivement, ça me semble jouable...

    Tout ce que je risque c'est d'obtenir une ellipse dans l'espace projectif. Pour ce que je veux faire c'est peut etre suffisant !

    Mais si les proportions du rectangle sont tres allongé j'ai peur que ça se voit un peu.

    En tout cas je vai essayer ca : donc comme promi :
    GRATIFICATION ETERNELLE

  8. #8
    Invité
    Invité(e)
    Par défaut
    Tout ce que je risque c'est d'obtenir une ellipse (...)
    Si les proportions du rectangle sont tres allongé j'ai peur que ça se voit (...)
    Je pensais que c'était précisément l'effet recherché. Si tu souhaites juste tracer un cercle exact entre les quatre points de ton espace projectif, tu n'as pas besoin de toute cette logique compliquée. Il te suffit de prendre la moyenne des quatre points sur l'image projective comme centre du cercle et un rayon de ton choix, par exemple, et de tracer un vrai cercle sur cette image (cvCircle).

    Est-ce que ton but n'est pas simplement de souligner la zone rectangulaire trouvée ? Dans ce cas, pourquoi ne pas tracer les quatre segments du quadrilatère, tout simplement...

  9. #9
    Nouveau membre du Club
    Inscrit en
    Juin 2008
    Messages
    68
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 68
    Points : 28
    Points
    28
    Par défaut
    Non non, tu avais bien saisi ma question dès le debut.

    Ce que voulais dire, c'est que si je considère un carré dans l'espace euclidien, alors qu'en fait il s'agit d'un rectangle tres allongé, avec un rapport longueur/largeur tres différent de 1, l'image du cercle une fois transposé dans l'espace projectif risque de paraitre bizarre (en fait la projection d'une ellipse euclidienne, plutot que la projection d'un cercle euclidien).

    Mais effectivement, si le rectangle a des proportions équilibrées, proche d'un carré, ça ne devrait pas trop se voir..

    C'est ça non ?

  10. #10
    Invité
    Invité(e)
    Par défaut
    Ah ok je comprends. Effectivement. A toi de voir ce qui donne le meilleur résultat. Déjà, tu pourrais réduire le rayon du cercle (0.5 * (cos t, sin t) par ex.). Tu pourrais aussi tracer un rectangle au lieu d'un carré dans l'espace euclidien, par exemple avec un rapport longueur sur largeur égal au rapport longueur/largeur dans l'espace projectif. Tu peux calculer ce dernier de façon approximative à partir de tes quatre points...
    Bon courage

  11. #11
    Nouveau membre du Club
    Inscrit en
    Juin 2008
    Messages
    68
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 68
    Points : 28
    Points
    28
    Par défaut
    Oui, ca permettrait une approximation probablement efficace,

    Mais je suis presque sûr qu'on doit pouvoir trouver une solution exacte.

    Je viens de tomber sur cette discussion.

    Ils se posent la meme question, apportent une réponse (l'homographie ?), mais que je suis incapable de décrypter par moi meme.

    Please Help !!

  12. #12
    Invité
    Invité(e)
    Par défaut
    Mais est-ce que les dimensions du rectangle (ou au moins son rapport longueur/largeur) font partie des données du problème ou sont inconnues ?

    • Dans le premier cas, il suffit de tracer dans l'espace euclidien un rectangle ayant ce même rapport, et à l'intérieur de ce rectangle, le cercle qui te convient.
    • Dans le second cas, il faut déterminer ce rapport. L'image et les quatre points ne sont pas suffisants (on utilise en général deux photos de la même scène prises avec des points de vue différents pour le déduire). Peut-être peut-on utiliser ce que tu appelles "les 3 points de fuite" mais je ne sais pas à quoi ils correspondent exactement dans ton idée (et j'ai peur qu'ils soient déduits des quatre autres, auquel cas ils ne nous aideront pas non plus). Peut-être peux tu attacher une image où ces 7 points sont représentés, pour comprendre.

    Sauf erreur de ma part, la discussion que tu cites ne dit pas autre chose...

  13. #13
    Nouveau membre du Club
    Inscrit en
    Juin 2008
    Messages
    68
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 68
    Points : 28
    Points
    28
    Par défaut
    Alors, on est dans le deuxieme cas, et effectivement, les 3 points de fuite sont issus des 4 coins du rectangle vert...

    Les trois points de fuite PF1 PF2 PF3 sont en dehors de l'image bien sur, mais on peut visionner un bout des 3 doites (R,G,B) partant du centre optique dans leur direction.

    Une autre facon de presenter le probleme, qui reviendrait presque au meme :
    est-il possible, à partir des distances dans l'image :
    centre optique - PF1
    centre optique - PF2
    centre optique - PF3

    ... de retrouver et de tracer des vecteurs unitaires ?
    Images attachées Images attachées  

  14. #14
    Invité
    Invité(e)
    Par défaut
    Au risque de paraître bébête, je comprends que les 3 points de fuite sont en dehors de l'image et que tu peux tracer des droites sur lesquelles ils figurent, mais je vois sur ton image 1 droite verte, 4 segments verts, une droite rouge et 5 droites bleues, alors j'ai un peu de mal à comprendre où est exactement le centre optique et où sont les 3 points de fuite (ou sur quelle droites exactement ils sont censés être...), et enfin, comment tous ces éléments sont obtenus et à quoi ils correspondent. Et s'agit-il de données délivrées par le système d'acquisition, de données calculées à partir d'autres (lesquelles ?), etc...?

  15. #15
    Nouveau membre du Club
    Inscrit en
    Juin 2008
    Messages
    68
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 68
    Points : 28
    Points
    28
    Par défaut
    Et bien en changeant quelques couleurs :

    Le centre optique est le centre de l'image (approximation, mais je n'ai pas besoin du precision effroyable non plus !), d'ou partent trois droites :
    - Rouge en direction de PF1
    - Vert en direction de PF2
    - Bleu en direction de PF3

    Je connais aussi les coordonnees des coins du rectangle bien sur... Et je sais tout ce petit monde est juste, et surtout que le rectangle est vrai !

    Voila pour ce que j'ai.. Donc... C'est grave ?
    Images attachées Images attachées  

Discussions similaires

  1. Réponses: 1
    Dernier message: 09/12/2013, 11h12
  2. Matrice 3D et espace
    Par héloiise dans le forum MATLAB
    Réponses: 0
    Dernier message: 06/05/2013, 14h42
  3. Réponses: 5
    Dernier message: 08/03/2010, 08h08
  4. Traiter un espace euclidien n dimentionel: librairie ?
    Par méphistopheles dans le forum C++
    Réponses: 1
    Dernier message: 04/11/2009, 11h34
  5. Conversion de l'espace RGB vers RGB normalisé
    Par hanane78 dans le forum Images
    Réponses: 5
    Dernier message: 16/08/2007, 13h38

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