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

Développement 2D, 3D et Jeux Discussion :

Correction de la perspective


Sujet :

Développement 2D, 3D et Jeux

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 17
    Points : 11
    Points
    11
    Par défaut Correction de la perspective
    Bonjour tout le monde,

    J’ai un problème dans mon application de traitement d’image webcam. J’aimerais faire une « correction de la perspective » sur quelques points de l’image. Je pensais utiliser les formules de projection 3D (wikipedia 3D_projection).
    Grâce à cela la difficulté maintenant est de déterminer l’angle et la distance de la webcam par rapport à l’image.
    J’ai sur la feuille une grille qui me sert de repère et je n’ai pas vraiment d’idée sur les fonctions qui me permettraient d’avoir ces données. Les dimensions de la grille sont connues bien sur.

    Voila une image pour mieux voir l’histoire :




    Si on savait que la grille était droite la tache aurait été plus simple je pense mais la elle peut être rotaté et alors la forme de la grille en perspective devient beaucoup plus complexe.

    Est-ce que quelqu'un saurait m'expliquer comment déterminer une fonction qui permette de trouver le point de la webcam en 3d et l'angle ?

  2. #2
    Membre expérimenté

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2006
    Messages
    450
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2006
    Messages : 450
    Points : 1 630
    Points
    1 630
    Par défaut
    J'ai eu un cours de perception 3D et ils résolvaient ce problème. Mais c'est d'une complexité sans nom (enfin pour moi :p) ! Déjà si tu veux faire une correction de perspective de ton image tu dois non seulement trouver la matrice de changement de repère entre ton repère caméra et ton repère objet mais en plus tu dois en même temps calculer le modèle de distorsion de la projection (qui peut avoir plusieurs ordres suivant la précision que tu veux) tout ça avec la méthode des moindres carrés.

    Et de ce problème tu dois résoudre un autre problème qui est d'avoir une précision subpixel (sinon pas assez de précision) de la position de tes amers dans ton image et pour cela il faut faire une modélisation de la croix qui représente ton amer dans l'image (vu que c'est une grille...) et pareil faut résoudre avec la méthode des moindres carrés et c'est pas de la tarte mdr.

    Voici un liens vers des scans des pages de mon cours qui parlent de ça. Mmais bon ça m'étonnerait que tu puisses t'en servir surtout que pour le modèle de la croix (dernier scan), la formule n'est pas donnée (il nous l'avait donné dans le TP mais j'ai pas gardé...). Bref c'est vraiment du cours très succint... donc désolé si c'est incompréhensible . Ca te fait au moins une piste à suivre :p. Voilou !

    http://ibarz.julien.free.fr/perception
    Je ne réponds à aucune question par MP, posez vos questions sur le forum adéquat.
    Profils : G+ - LinkedIn

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 17
    Points : 11
    Points
    11
    Par défaut
    Merci pour ta réponse. Je me doutais bien que ce n'était pas un problème simple.
    Nous sommes allés voir notre prof de math qui nous l'a confirmé. Il nous a dit qu'une piste pouvait être de faire une sorte de pyramide dont l'inconnue serait le sommet (4 plans qui passent par les lignes du plan objet et du plan image). En réalité ce qu'on cherche à faire c'est l'inverse du calcul de l'ombre projetée nous a t-il dit.
    En tout cas, je jetterai un œil à tes cours, merci beaucoup mais je doute être capable de programmer ce truc !
    Je vais probablement implémenter un algo simple de distorsion jusqu'à arriver à un carré ! je sais pas ce que ça va donner, mais sur le papier ça à l'air pas mal.

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 17
    Points : 11
    Points
    11
    Par défaut
    En fait c'est ça que j'aimerai faire :

    http://www.mediachance.com/pbrush/help/perspectc.html

    A priori ça utilise pas de projection 3D mais c'est pas non plus évident. :s

  5. #5
    Nouveau membre du Club
    Inscrit en
    Décembre 2006
    Messages
    30
    Détails du profil
    Informations personnelles :
    Âge : 51

    Informations forums :
    Inscription : Décembre 2006
    Messages : 30
    Points : 27
    Points
    27
    Par défaut
    Bonjour,

    Sujet très intéressant.
    à priori je ferais ça graphiquement. Si le but est de retrouver la position de la caméra.
    Du type retrouver tous les points de fuite et donc la ligne
    d'horizon
    Avoir un idée de la taille d'un objet sur la photo et
    donc le rapport taille photo/taille réelle pour retrouver
    la ligne de sol.

    Mais pas facile

    JLuc
    Images attachées Images attachées  

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 17
    Points : 11
    Points
    11
    Par défaut
    Oui pas facile...
    Trouver le point de fuite est une opération assez facile (que j'ai d'ailleurs déjà pratiquement fait grâce a une transformée en Hough sur la grille) mais je n'ai pas vraiment d'idée sur la façon dont ça pourrait nous aider à déterminer l'angle de la caméra.
    La grille est un carré dont je connais la longueur réel d'un coté. Si j'avais un simple trapèze, je pourrais facilement le corriger grace à cette information seulement mais la je pense que c'est un peu plus compliqué.

    TanEk
    Encore merci pour ton cours, je l'ai lu rapidement mais je n'ai pas trop d'idée sur la façon dont on peux le programmer et faire les calibrages.
    Si tu as des explications sur ton cours cela me serait d'une grande aide.
    A un moment ils parlent d' "appariements 2D/3D", qu'est ce que c'est ?
    je n'ai pas vraiment compris la dernière feuille qui donne des explications pour le calibrage. Comment faire ?

  7. #7
    Nouveau membre du Club
    Inscrit en
    Décembre 2006
    Messages
    30
    Détails du profil
    Informations personnelles :
    Âge : 51

    Informations forums :
    Inscription : Décembre 2006
    Messages : 30
    Points : 27
    Points
    27
    Par défaut
    ci-joint un exemple. Mais peut être plus compliqué
    Je vous conseille un bon bouquin sur les projections
    graphiques.
    Garder en mémoire qu'il faut des données sur les objets
    ...
    JLuc
    Images attachées Images attachées  

  8. #8
    Membre expérimenté

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2006
    Messages
    450
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2006
    Messages : 450
    Points : 1 630
    Points
    1 630
    Par défaut
    Bonjour,

    Alors dans mon cours en fait il fait un truc que tu n'as pas besoin de faire c'est la distorsion de l'image due à la focale. Ce qui n'est pas ton cas tu veux seulement corriger la perspective. L'appariemment 2D/3D c'est dire quel pixel est lié à quel position dans l'espace.

    Donc normalement ton problème est résolu par les moindres carrés dans les deux premières pages. Mais c'est ce m34 qui me dérange dans sa modélisation. D'ailleurs il dit bien que son truc est mal posé alors je me demande vraiment si c'est possible de le résoudre... m34 c'est si j'ai bien compris la position en z de la caméra.
    Je ne réponds à aucune question par MP, posez vos questions sur le forum adéquat.
    Profils : G+ - LinkedIn

  9. #9
    Nouveau membre du Club
    Inscrit en
    Décembre 2006
    Messages
    30
    Détails du profil
    Informations personnelles :
    Âge : 51

    Informations forums :
    Inscription : Décembre 2006
    Messages : 30
    Points : 27
    Points
    27
    Par défaut
    pour la correction de perspective, j'utiliserais Thales
    et une translation suivant y avec x comme ligne d'horizon...

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 17
    Points : 11
    Points
    11
    Par défaut
    Thales s'utilise pour 2 droites parralleles seulement... Bon je vais essayer de suivre vos pistes et je vous dit ce qu'il en est dans quelques jours.
    Merci à vous.

  11. #11
    Nouveau membre du Club
    Inscrit en
    Décembre 2006
    Messages
    30
    Détails du profil
    Informations personnelles :
    Âge : 51

    Informations forums :
    Inscription : Décembre 2006
    Messages : 30
    Points : 27
    Points
    27

  12. #12
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    467
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 467
    Points : 681
    Points
    681
    Par défaut
    Citation Envoyé par utoz07 Voir le message
    En fait c'est ça que j'aimerai faire :
    http://www.mediachance.com/pbrush/help/perspectc.html
    A priori ça utilise pas de projection 3D mais c'est pas non plus évident. :s
    En fait c'est très très simple si si !

    Il suffit juste de plaquer ta photo sur un rectangle.

    Pour ça tu DOIS connaîtres les bases de la 3D (D3D ou openGL)
    Si tu sais afficher un rectangle (2 triangles) bien droit et texturé avec ta photo c'est gagné !

    Pour les 4 vertex du rectangle tu y places une des coordonnées des 4 coins de "ton-image-en-perspective" dans ta photo.

    Bon normalement jusque là tu devrais connaître parce que c'est vraiment la base de la base de la 3D.

    Il te faut déjà arriver à cela si tu veux comprendre la suite.


    Alors... tu constates qu'il y a un petit soucis de perspective . Pour corriger cela qu'une seule chose à faire : modifier les poids des vertex !

    Un vertex en 3D projective a 4 coordonnées (x, y, z, w).
    Par exemple le point (1, 3, 5, 1) a le même enplacement dans l'espace que le point (2, 6, 10, 2) sauf qu'il est 2 fois plus lourd.

    Il faut donc appliquer le bon poids aux 4 vertex et le tour est joué. Comment les trouver ?

    C'est très simple et seulement avec des calculs élémentaires .


    Tu vois la grille. Il faut que tu saches en dessiner une de seulement 4 carreaux (2x2) :

    Soit A,B,C et D les points aux sommets du rectangle-en-perspective

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    A--X--B
    |      \
    Y   O   \
    |        \
    |         \
    C----------D
    - le centre O est le croisement des 2 diagonales AD et CB
    - le points de fuite H est le croisement des 2 horizontales AB et CD
    - le points de fuite V est le croisement des 2 verticales AC et BD

    Maintenant le point X au centre de AB est forcement le croisement entre AC et OV.

    Note bien que (A+B)/2 n'est PAS egale à X sur un rectangle en perspective.

    Pour en revenir au bon poids il suffit de résoudre l'équation : (A + Bk)/(1+k) = X

    k un scalaire est l'inconnu le poids à trouver

    Il ne reste plus qu'à trouver le poids de C et D. (n'oublie pas que (1, 3, 5, 1) == (2, 6, 10, 2) )


    Normalement cela devrait beaucoup t'aider.

  13. #13
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 17
    Points : 11
    Points
    11
    Par défaut
    Désolé de ne pas avoir répondu plus tot.
    Donc voila j'ai reussi grâce à la méthode en effet simple de ijk-ref.
    Donc merci beaucoup.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Correction de perspectives
    Par Ryooo dans le forum Traitement d'images
    Réponses: 0
    Dernier message: 18/07/2014, 16h07
  2. Réponses: 3
    Dernier message: 17/06/2013, 17h00
  3. Correction de perspective
    Par gmonta dans le forum Algorithmes et structures de données
    Réponses: 6
    Dernier message: 15/12/2005, 17h37

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