ich einen Bildpunkt in der linken Kamera bekommen (Pointl) und den entsprechenden Bildpunkt in der rechten Kamera (pointR) von meine Stereokamera mit Feature-Matching. Die beiden Kameras sind parallel und sind gleichzeitig "high". Es gibt nur eine x-Übersetzung zwischen ihnen.OpenCV Stereo-Vision-3D-Koordinaten auf 2D-Kamera-Ebene Projektion anders als 2D-Punkte auf 3D-Triangulation
Ich kenne auch die Projektionsmatrizen für jede Kamera (projL, projR), die ich während der Kalibrierung mit initUndistortRectifyMap
erhalten habe.
Für den Punkt Triangulation, ich rufe: triangulatePoints(projL, projR, pointL, pointR, pos3D)
(documentation), wobei pos3D die Ausgabe 3D-Position des Objekts ist.
Nun, ich will Projekt der 3D-Koordinaten in das 2D-Bild der linken Kamera:
2Dpos = projL * 3dPos
Die resultierenden x-Koordinate ist richtig . Aber das Y-Coodinate ist ungefähr 20 Pixel falsch.
Wie kann ich das beheben?
Edit: Natürlich, ich brauche homogene Koordinaten zu verwenden, um es mit der Projektionsmatrix (3x4) zu multiplizieren. Aus diesem Grund habe ich eingestellt:
3dPos[0] = x;
3dPos[1] = y;
3dPos[2] = z;
3dPos[3] = 1;
Ist es falsch, zu setzen 3dPos[3]
zu 1
?
Hinweis:
- Alle Bilder neu zugeordnet werden, das tue ich dies in einer Art Schritt Vorverarbeitung.
- Natürlich verwende ich immer die homogenen Koordinaten
Wissen Sie, wie man das in OpenCV macht? Ich habe versucht, irgendeine Lösung zu finden; habe keine gefunden. – black
Zeigen Sie, was Sie versucht haben. –
Ich verstehe, dass ich meine 2pos, die ich mit der Formel in der Frage bekommen habe, nicht entziffern soll, oder? Aber auf dieser Seite (http://docs.opencv.org/2.4/modules/calib3d/doc/camera_calibration_and_3d_reconstruction.html) habe ich keine Lösung gefunden, um einen bestimmten Punkt zu entschärfen. Es gibt nur die Lösung, eine Rektifikationskarte auf eine ganze Matte anzuwenden. – black