Forum: Mikrocontroller und Digitale Elektronik OpenCV 3D-2D Transformation (projectPoints)


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Hansi (Gast)


Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.