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 :

Paramètres extrinsèques et position de la caméra


Sujet :

OpenCV

  1. #1
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2008
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2008
    Messages : 14
    Points : 17
    Points
    17
    Par défaut Paramètres extrinsèques et position de la caméra
    Bonjour à tous.

    J'ai un petit problème avec la fonction qui calcul les paramètres extrinsèques de la caméra. En effet, le vecteur de translation ainsi que le vecteur de rotation semblent faux.

    Voici le code en question :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
     
     
    //Coordonnées 3D du plan
    double data_object_points[] = 
    { 1,-1,0,
    1,1,0,
    -1,1,0,
    -1,-1,0};
     
     
    //Coordonnées 2D du plan
    double data_image_points[] = 
    { A.x,A.y,
     B.x,B.y,
    C.x,C.y,
    D.x,D.y};
     
    //Params intrinsic
    double data_intrinsic_matrix[] = { 821.51,-4.00136 ,344.993,
    					0, 820.367 , 238.763,
    					0,0,1 };
     
    double data_distortion_vector[]={ -0.00611905, 1.11889, 0,0 };
     
    //Init Mat
    CvMat object_points=cvMat(4,3,CV_32FC1,data_object_points);
    CvMat image_points=cvMat(4,2,CV_32FC1,data_image_points);
    intrinsic_matrix=cvMat(3,3,CV_32FC1,data_intrinsic_matrix);
    distortion_coeffs=cvMat(4,1,CV_32FC1,data_distortion_vector);
     
    double data_rotation[] = { 0,0,0 };
    double data_translation[] = { 0,0,0 };
    rotation_vector=cvMat(3,1,CV_32FC1,data_rotation);
    translation_vector=cvMat(3,1,CV_32FC1,data_translation);
     
    cvFindExtrinsicCameraParams2(&object_points,&image_points,&intrinsic_matrix,&distortion_coeffs,&rotation_vector,&translation_vector );
    Pour tester si ces paramètres sont bons, j'utilise opengl et la fonction glutLookAt(data_translation[0],data_translation[1],data_translation[2],0,0,0,
    data_rotation[0],data_rotation[1],data_rotation[2])
    qui permet d'orienter et placer la caméra. Les résultats obtenus sont faux.

    Quelqu'un voit-il l' (les) erreur(s) ?
    Serait-il possible d'obtenir un exemple de code ou un lien expliquant le calcul de pose de la camera ?

    Merci et bonne journée.

  2. #2
    Futur Membre du Club
    Inscrit en
    Janvier 2009
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 8
    Points : 9
    Points
    9
    Par défaut
    Vérifie que les repères dans lesquels sont exprimés la translation et la rotation sont les memes pour la fonction OpenCv et pour glutLookAt, je ne suis pas sur que ce soit le cas (Tranformation repère monde vers repère caméra ou l'inverse). C'est juste une première idée...

  3. #3
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2008
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2008
    Messages : 14
    Points : 17
    Points
    17
    Par défaut
    Après une journée de réflexion, je pense qu'il est possible que pour calculer les paramètres extrinsèques (à savoir 6 ou 12 inconnues - je sais pas exactement comment se fait le calcul) il faille plus de 4 points dont la correspondance 2D - 3D est connue. Le problème viendrait peu être de là.

    Faut-il un nombre minimum de points pour trouver les paramètres extrinsèques à l'aide de cvFindExtrinsicCameraParams2()?

    Pour le glutlookat je verrais plus tard ( il y a effectivement surement un problème de repère ).

    Merci

  4. #4
    Candidat au Club
    Inscrit en
    Mars 2009
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    j'ai eu le même problème et c'était l'init des matrices qui était pas bon.
    si tes datas sont en double, j'ai mis des CV_64FC1 dans l'init matrice au lieu de CV_32FC1.
    et ça a marché.

    je ne sais pas si ça pourra aider.

Discussions similaires

  1. Réponses: 1
    Dernier message: 18/03/2011, 14h13
  2. Position d'une caméra 2D isométrique
    Par sebcap26 dans le forum Physique
    Réponses: 9
    Dernier message: 24/11/2010, 11h17
  3. Interpretation des paramètres extrinsèques
    Par lesafir dans le forum OpenCV
    Réponses: 3
    Dernier message: 09/04/2009, 23h41
  4. [OpenSceneGraph] Position d'une caméra dans l'espace
    Par Invité(e) dans le forum OpenSceneGraph
    Réponses: 2
    Dernier message: 28/08/2008, 10h58
  5. Réponses: 2
    Dernier message: 04/11/2007, 13h10

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