OpenCV 3D-2D Transformation (projectPoints)

Gast #5556530
Lesenswert?
• ▲
▼
Hey Leute,

kleine Frage die mich seid einiger Zeit quält. Ich möchte eine Distanz 
vom Fahrzeug (in dem eine Kamera angebracht ist) in ein Kamerabild 
einzeichnen. Dazu bietet sich ja die Methode "projectpoints" von opencv 
an. Schonmal zu Beginn das Problem: ich bin der Meinung ich habe den 
richtigen Weg gewählt (den ich gleich erläutere) kriege allerdings einen 
leichten Versatz (eingezeichnet: 10-11m / real: 9m).

Beim Tippen ist mir aufgefallen, dass sicherlich der sourceCode zur 
Beurteilung des Fehlers hilfreich wäre, also befindet der sich auch im 
Anhang. Kurze Info, da ich die Klasse in der die Aufrufe stattfinden 
nicht beigefügt habe: Die .cpp ist chronologisch der aufrufe geordnet -> 
zuerst die setter, dann msgRcv und dann die Berechnung.


Mein Weg:
Ich habe die Werte der Translation sowie Rotation der Kamera in Bezug 
auf das Fahrzeugkoordinatensystem (Hinterachse) gegeben.
Da sich die Achsenbezeichnungen sich zwischen opencv-Koordinaten und 
Fahrzeugkoordinaten unterscheiden (Fahrzeug: X=tiefe bzw Roll, 
Y=horizontal bzw. Nick, Z=Höhe bzw. Gier / Opencv: x= horizontal, 
Y=Vertikal, Z=Tiefe), wandel ich diese als erstes um. Kurz gesagt: 
angle_camera_depthZ = angle_car_depthX , angle_camera_heightY = 
angle_car_yawZ.. Das selbe mit dem anderen Winkel und den Translationen. 
Bei Verwirrung leuchtet folgendes Bild vielleicht besser ein: 
https://de.wikipedia.org/wiki/Drehratensensor#/media/File:Roll_pitch_yaw_gravitation_center_de.png


Anschließend stelle ich mir meine Rotationsmatrizen auf, dazu wird die 
Matrix um bspw. die Y-Achse mit angle_camera_heightY bzw. angle_car_yawZ 
gefüllt. Habe ich alle 3 Matrizen aufgestellt, folgt R = Rx  Ry  Rz. 
Anschließend benutze ich den Rodrigues, um mir den Rotationsvektor 
berechnen zu lassen. Nun stelle ich mein Translationsvektor auf, der die 
Koordinatenverschiebung zum Weltkoordinatensystem enthält.
Zu guter letzt übergebe ich Projectpoints alle Werte.


Vielleicht kann mir jemand sagen, wo der Fehler liegt, dass ein Versatz 
entsteht. Grundsätzlich ergibt das Ergebnis wie erwähnt halbwegs Sinn 
(auch bei sehr hohen Entfernungen strebt er gegen Bildmitte).

Wäre über Hilfe sehr dankbar.

Euer Hansi
Angehängte Dateien:

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.