2016-05-07 9 views
1

Ich möchte meine Kameras kalibrieren und eine xyz-Achse zeichnen. (wie auf diesem Link angezeigt: http: //docs.opencv.org/3.1.0/d7/d53/tutorial_py_pose.html)OpenCV Projectpoints macht falsche Z-Achse (kalibriert mit Schachbrett)

Leider ist meine Kalibrierung etwas seltsam und ich kann nicht scheinen, es zu beheben . Ich machte ein cad-Modell andere mögliche Fehler zu minimieren ...

Also im Grunde, ich tue zwei Schritte:

  1. eichen jede Kamera
  2. Verwendung projectpoints die Linien zu zeichnen

Ich weiß nicht, wo es schief geht ...

Variablen von cameraCalibration. Die Punkte von Bildpunkten werden von einem Schachbrett gefunden.

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

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

Der Code der Punkte

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 (Plotten der X (grün), Y (rot) und Z (blau) Achse)

Die Z-Achse zu finden, ist immer falsch . Es sollte nur nach oben (oder zumindest falsch in der gleichen Richtung)

Die Basisbilder i in this album verwendet, wenn Sie es selbst versuchen wollen (ich machte sie mich so frei Gebrauch für alle!)

Weiß jemand warum und wie kann ich das beheben?

Antwort

0

Für jeden, der dieses Problem hat: nimm mehr Bilder ...

+0

Meinst du während der Schachbrett-Kalibrierung? Wie viele Bilder hast du benutzt? –

+0

Anstatt ein Bild für die Kalibrierung für jede Kamera zu verwenden, verwendete ich ungefähr 60 Bilder pro Kamera. Jedes Bild hatte das Schachbrett in einer anderen Position, auf diese Weise konnte der Kalibrierungsalgorithmus in open cv die intrinsischen Verzerrungsparameter und den Rotations- und Translationsvektor genauer berechnen. – fivezero05