2016-05-07 6 views
1

Je veux calibrer mes caméras et tracer un axe xyz. (comme montré sur ce lien: http: //docs.opencv.org/3.1.0/d7/d53/tutorial_py_pose.html)OpenCV Projectpoints fait mauvais axe Z (calibré avec échiquier)

Malheureusement, mon étalonnage fait quelque chose de bizarre et je n'arrive pas à le réparer . J'ai fait un goujat modèle pour minimiser d'autres erreurs possibles ...

Donc, fondamentalement, je fais deux étapes:

  1. Calibrer chaque caméra
  2. utilisation projectpoints pour tracer les lignes

Je ne sais pas où ça va mal ...

Variables de cameraCalibration. Les points des points images sont trouvés par un échiquier.

vector< vector<cv::Point2f> > imagePoints; 
vector< vector< cv::Point3f> > objectPoints; 

vector<cv::Mat> rvecs, tvecs; 
cv::Mat intrinsic_Matrix, distortion_coeffs; 

Le code pour trouver les points

cv::Point2f clsCameraControl::FindSpecific(cv::Point3f o3Dpoint) 
{ 
    cv::Mat rvec, tvec; 
    rvec.create(1, 3, cv::DataType<double>::type); 
    tvec.create(1, 3, cv::DataType<double>::type); 
    rvec = rvecs[0].clone(); 
    tvec = tvecs[0].clone(); 

    cv::solvePnP(objectPoints[0], imagePoints[0], intrinsic_Matrix, distortion_coeffs, rvec, tvec); 

    vector<cv::Point3f> Input1; 
    vector <cv::Point2f> Output1; 
    Input1.insert(Input1.end(), o3Dpoint); 
    Output1.clear(); 
    cv::projectPoints(Input1, rvec, tvec, intrinsic_Matrix, distortion_coeffs, Output1); 

    return Output1[0]; 
} 

This image represents the four results i got (traçant le X (vert), Y (rouge) et Z (axe bleu))

L'axe Z est toujours tort . Il devrait être juste vers le haut (ou du moins tout faux dans la même direction)

Les images de base i utilisés sont in this album, si vous voulez essayer vous-même (je les ai fait moi-même utiliser si libre pour tout le monde!)

Est-ce que quelqu'un sait pourquoi et comment je peux résoudre ce problème?

Répondre

0

Pour toute personne ayant ce problème: prenez d'autres photos ...

+0

Voulez-vous dire lors de l'étalonnage de l'échiquier? Combien de photos avez-vous utilisé? –

+0

Au lieu d'utiliser une image pour l'étalonnage de chaque caméra, j'ai utilisé environ 60 images par caméra. Chaque image avait l'échiquier dans une autre position, de cette façon l'algorithme d'étalonnage en cv ouvert pouvait calculer les paramètres de distorsion intrinsèques et le vecteur de rotation et de traduction avec plus de précision. – fivezero05