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

Algorithmes et structures de données Discussion :

estimation des distances dans une photo a 2 points de fuite


Sujet :

Algorithmes et structures de données

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    277
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 277
    Points : 141
    Points
    141
    Par défaut estimation des distances dans une photo a 2 points de fuite
    j'ai pris une photo d'un cadrillage (ici 9 carrés de 1 par 1), mon objectif est de retrouver la valeur des pixels de caque carré du cadrillage. Pour ça il faut donc que je connaisse précisement la place de chaque carré.

    La difficulté est de connaitre la relation entre mon carré originel de 1 par 1 avec mon carré de x par y obtenu avec la photo, effectivement sur la photo apparait 2 points de fuite.

    En regardant sur la toile j'ai trouvé les relations sur le rapport anharmonique, mais je n'arrive pas à le faire coïncider avec mon probleme.

    Si je pouvais avoir une relation du type x en fonction d'un angle, des points de fuites ou quelque chose d'autre ce serait pas mal, idem pour y.

    Bon j'espère que vous avez bien compris??

    merci de m'aiguiller sur de la documentation ou des methodes à appliquer ou autre chose...

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    277
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 277
    Points : 141
    Points
    141
    Par défaut
    je vous passe le type d'image sur lequel je travaille:

    vous pouvez voir en vous approchant très près de l'image des petits points gris qui sont sensés être au milieu de chaque "carré". C'est sur ces pixels que j'estime l'information: noir ou blanc.

    C'est cette mesure que je souhaite affiner...
    Images attachées Images attachées  

  3. #3
    Membre confirmé
    Profil pro
    Enseignant
    Inscrit en
    Avril 2004
    Messages
    440
    Détails du profil
    Informations personnelles :
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2004
    Messages : 440
    Points : 451
    Points
    451
    Par défaut
    Salut !

    Je pense à truc qui ressemble un peu à de la bidouille mais qui peut être pas mal...

    Pourquoi ne pas extraire les lignes extérieures de ton quadrillage ? ça te donne un quadrilatère dont tu peux estimer la déformation pour le rendre rectangulaire...
    Cette transormation, tu l'appliques à toute l'image, et hop !

    Pour extraire les lignes, une fois n'est pas coutume, tu peux utilises Hough sur les bords de ton image :
    -détecter les bords de l'image
    -sur les bords, faire la transformée de Hough pour détecter les lignes (par exemple autant de lignes qu'il y a de carrés noirs)
    - pour chaque bord, trouver LA ligne qui passe le plus proche de toutes les lignes (par ex sur le bord droit tu as 7 carrés, donc 7 lignes, et 1 droite qui passe au plus proche de ces 7 lignes)
    -ça donne un quadrilatère qu'on cherche à transformer en rectangle...

    Voilà, en espérant avoir été clair...
    "Cultiver les sciences et ne pas aimer les hommes, c'est allumer un flambeau et fermer les yeux." Proverbe chinois

  4. #4
    Membre expert
    Avatar de LadyWasky
    Femme Profil pro
    Inscrit en
    Juin 2004
    Messages
    2 932
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 53
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 932
    Points : 3 565
    Points
    3 565
    Par défaut
    Citation Envoyé par gronaze
    j'ai pris une photo d'un cadrillage (ici 9 carrés de 1 par 1), mon objectif est de retrouver la valeur des pixels de caque carré du cadrillage. Pour ça il faut donc que je connaisse précisement la place de chaque carré.

    La difficulté est de connaitre la relation entre mon carré originel de 1 par 1 avec mon carré de x par y obtenu avec la photo, effectivement sur la photo apparait 2 points de fuite.

    En regardant sur la toile j'ai trouvé les relations sur le rapport anharmonique, mais je n'arrive pas à le faire coïncider avec mon probleme.

    Si je pouvais avoir une relation du type x en fonction d'un angle, des points de fuites ou quelque chose d'autre ce serait pas mal, idem pour y.

    Bon j'espère que vous avez bien compris??

    merci de m'aiguiller sur de la documentation ou des methodes à appliquer ou autre chose...
    En fait, je pense que celà doit aussi être une fonction de la distance objectif<-->quadrillage, de la focale utilisée par l'objectif (rapport entre la taille réelle de l'objet et son image)
    Bidouilleuse Delphi

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    277
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 277
    Points : 141
    Points
    141
    Par défaut
    j'ai repris l'idée de Waskol, c'est à dire:
    avec mon image je calcul 2 points de fuite, un en haut et un sur le côté (avec une approche plan).
    et fait je pense que ces 2 points de fuite sont confondus si on passe dans la troisième dimension. il(s) représent(ent) l'endroit d'où a été prise la photo.

    et avec toutes ces données il est possible de trouver la loi exacte permettant d'estimer la taille (en x et y) de chacun des petits carrés....me suis-je trompé??? Comment trouver cette loi??

  6. #6
    Membre expert
    Avatar de LadyWasky
    Femme Profil pro
    Inscrit en
    Juin 2004
    Messages
    2 932
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 53
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 932
    Points : 3 565
    Points
    3 565
    Par défaut
    En fait c'est un problème d'optique :
    - On va considérer un axe Oz :

    O--------------------------------->z

    - dessus on place la photo sur lequel ton objet est projeté, il se trouve à une distance d de O
    <-d-->

    O-----|------------------------------>z


    O prend un point du monde réel (X,Y,Z) que l'on projette sur l'écran (x,y), on aura alors :
    X/x=Y/y=Z/d (merci Thales)

    donc
    -> x=X*d/Z
    -> y=Y*d/Z

    Ensuite, sur l'écran, pour déterminer tes point de fuite, il te faut quatre points :
    k1(x1,y1), k2(x2,y2), k3(x3,y3), k4(x4,y4)

    ...qui déterminent un rectangle dans le monde réel, donc faisant partie d'un même plan P :
    en fait trois points déterminent ce plan :
    K1(X1,Y1,Z1), K2(X2,Y2,Z2), K3(X3,Y3,Z3), le quatrième étant calculé à partir de ceux ci pour former un rectangle.
    Avec Angle(K1K2K3)=pi/2, on a
    Vecteur(K2K1).Vecteur(K2K3)=0
    => (X2-X1)(X3-X2)+(Y2-Y1)(Y3-Y2)+(Z2-Z1)(Z3-Z2)=0 (Equation 1)
    Z3 est une fonction de X1,X2,X3,Y1,Y2,Y3,Z1 et Z2

    Et pour K4
    Vecteur (OK4)=Vecteur(OK1)+Vecteur(K2K3)
    X4=X1+(X3-X2) ==> (X4-X3)=(X1-X2)
    Y4=Y1+(Y3-Y2) ==> (Y4-Y3)=(Y1-Y2)
    Z4=Z1+(Z3-Z2) ==> Z4=Z1-((X2-X1)(X3-X2)+(Y2-Y1)(Y3-Y2))/(Z2-Z1)
    donc Z4 est éliminable en fonction de X1,X2,X3,Y1,Y2,Y3,Z1 et Z2


    On en revient à nos deux points de fuites F1(xf1,yf1) et F2(xf2,yf2)

    Pour les calculer, il te faut deux droites d'un pour l'un (deux cotés opposés du rectangle projeté) : la droite qui passe par k1 et k2 (M1)
    celle qui passe par k3 et k4 (M2)

    pour l'autre point de fuite : k1 et k4 (M3), k2 et k3 (M4)

    à l'intersection des droites tu as tes points de fuites :

    Equation de M1 :
    y=(y2-y1)*(x-x1)/(x2-x1)+y1
    Equation de M2 :
    y=(y4-y3)*(x-x3)/(x4-x3)+y3

    d'où l'Intersection F1 (si elle existe) :
    yf1=(y2-y1)*(xf1-x1)/(x2-x1)+y1
    et (y2-y1)*(xf1-x1)/(x2-x1)+y1=(y4-y3)*(xf1-x3)/(x4-x3)+y3

    A l'arrivée, par substitution tu te retrouve avec :
    g1(X1,X2,X3,Y1,Y2,Y3,Z1,Z2)*xf1/d=g2(X1,X2,X3,Y1,Y2,Y3,Z1,Z2)

    si la fonction g1 est nul, alors ton point de fuite est à l'infini
    --> sinon on passe au calcul de y :
    si (x2-x1) est nul, ton point est aussi à l'infini
    sinon ton point de fuite existe et tu as ses coordonnées

    à l'arrivée, tu devrait obtenir les coordonnées de F1 et F2 en fonction de :
    X1,X2,X3,Y1,Y2,Y3,Z1,Z2 et d.

    Donc il te faut connaitre au moins deux distances et quearrives à déterminer d. d est le paramêtre qui te manque et qui doit dépendre de la focale de ton appareil photo.
    Et au final tu devrais pouvoir obtenir toutes les fonctions qui te sont nécessaires.

    ////////////////////////////////////////////////
    Ensuite :
    vas lire ceci, http://www4.ac-lille.fr/~math/classe...rspectives.htm
    tout en bas de la page.

    Donc
    1) tu as autant de points de fuites que de directions dans l'espace
    2) Dans nos calculs précédents, si on éloigne les points K2 et K3 de K1 et K4 jusqu'a l'infini, leur projections respectives sur l'écran devraient correspondre au point de fuite recherché :
    donc avec les limites et les distances, on devrait aussi pouvoir calculer les points de fuite
    3) Ce qui est sur, c'est que la position du point de vue (distance d) est cruciale pour les calculs. pour ce calcul, tu peux jeter un oeil ici :
    http://www.summilux.net/documents/perspective.html
    (en bas : "application amusante")


    Ici, ils utilisent aussi une grille de calibrage :
    http://www.irit.fr/ACTIVITES/EQ_TCI/...OURS/co04.html

    Enfin, sur wikipedia, ils montre une propriété de la projection conique concernant les distance qui peut simplifier tes calculs:
    http://fr.wikipedia.org/wiki/Perspective

    BOn courage
    Bidouilleuse Delphi

  7. #7
    Expert éminent Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Points : 7 903
    Points
    7 903
    Par défaut
    Bonjour,

    ...si tu arrives à déterminer d....
    Pour trouver la distance d, on peut chercher par itération la "meilleure" distance en calculant, pour la projection théorique des lignes du quadrillage associée à cette distance d, le nombre de transitions noir/blancs de part et d'autre de ces lignes.
    La meiileure distance sera celle qui donne le maximum de transitions, ce qui est le cas quand le quadrillage théorique "colle" au quadrillage de la photo.
    " Le croquemitaine ! Aaaaaah ! Où ça ? " ©Homer Simpson

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    277
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 277
    Points : 141
    Points
    141
    Par défaut
    hello,

    Désolé de répondre aussi tard mais j'avais d'autres choses sur le feu...

    Bon les explications que tu m'as donné Waskol ont l'air très pointue, je vais essayer de comprendre ce que tu m'as dit... C'est vraiment sympa de me filer un coup de main, je sais pas si j'aurais le temps de finir ça ce soir mais je te tiens au courant de mon avancement

    allez bye et bon WE

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

Discussions similaires

  1. Mesures de distances dans une photo
    Par Houarcheneger dans le forum Traitement d'images
    Réponses: 4
    Dernier message: 09/05/2012, 07h40
  2. Réponses: 8
    Dernier message: 20/05/2008, 18h02
  3. insérer des images dans une bd postgresql
    Par ephet dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 20/01/2004, 09h18
  4. [langage] Comment rajouter des champs dans une liste
    Par toto_titi dans le forum Langage
    Réponses: 4
    Dernier message: 28/08/2003, 14h09
  5. Ordre des champs dans une table
    Par patapetz dans le forum Outils
    Réponses: 5
    Dernier message: 30/07/2003, 06h53

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