Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

11

16.01.2018, 11:04

Was mir dabei jetzt noch nicht klar ist. Dein Objekt ist virtuell, wird also selbst von dir projiziert oder nicht? Somit sollte dir die Position des Objekts bekannt sein oder sehe ich das falsch. Warum gehst du dann den Schritt die Koordinaten aus deinem 2D Bild zu schätzen? Und wofür ist deine zweite Kamera da? Ist das originale Objekt vielleicht doch nicht virtuell? Kann es sein dass du hier von einem Marker im Raum sprichst?
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

12

16.01.2018, 12:27

Was mir dabei jetzt noch nicht klar ist. Dein Objekt ist virtuell, wird also selbst von dir projiziert oder nicht? Somit sollte dir die Position des Objekts bekannt sein oder sehe ich das falsch. Warum gehst du dann den Schritt die Koordinaten aus deinem 2D Bild zu schätzen? Und wofür ist deine zweite Kamera da? Ist das originale Objekt vielleicht doch nicht virtuell? Kann es sein dass du hier von einem Marker im Raum sprichst?


Im Moment findet alles im virtuellen Raum statt, stell es dir als Testumgebung vor (später ist jedoch eine Übertragung in die Realität geplant, aber das soll hier nicht weiter stören.)
Die Position des Objekts ist jederzeit bekannt, denn es liegt im Ursprung. Dem Programm unbekannt ist lediglich die Kameraposition (mir ist diese natürlich bekannt). Diese soll das Programm ja schätzen.
Die zweite Kamera dient hier eher der Anschaulichkeit. Im Endeffekt braucht man sie nicht, da nur das verschobene kopierte Objekt wichtig ist. Auch in Unity könnte man die zweite Kamera durch jedes andere Objekt ersetzen, so sieht man allerdings, ob das Resultat dem entspricht, was man erwartet (Das unverschobene Objekt sieht dabei für die geschätzte (also 2te) Kamera 100% genauso aus,
wie das verschobene Objekt für die richtige Kamera.)

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

13

16.01.2018, 12:39

Moment, d.h. es geht es dir jetzt auf einmal darum die Kameraposition zu schätzen? Ursprünglich hatte ich das nämlich so verstanden dass du die Kameraposition bereits kennst!? Ich vermute mal dein Stichwort lautet "camera pose estimation". Und das ist ein offenes Forschungsfeld, wenn du das von Grund auf selbst implementieren willst dann stell dich mal drauf ein dass das um viele Größenordnungen komplexer sein wird als du dir das im Moment vorstellst. Schau dich mal um, ich wette es gibt fertige AR Toolkits für Unity. Im schlimmsten Fall kannst du wohl z.B. auf OpenCV aufsetzen. Komplett von Null anfangen würd ich nur wenn dich die Thematik an sich interessiert. In dem Fall willst du dich wohl erstmal mit Multiview Geometry beschäftigen. Das Standardgrundlagenbuch in dem Feld ist afaik der Hartley Zisserman...

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

14

16.01.2018, 12:46

Na dann halten wir doch mal fest. Du hast einen Marker im Raum und deine Kamera soll dort ein Objekt drauf projizieren. Das gibt es an sich schon fertig. Soweit ich weiß bringt Unity mittlerweile selbst AR Zeugs mit. Ansonsten habe ich mal mit Vuforia gearbeitet. Kannst du in Unity benutzen und dir wird im Prinzip alles in der Richtung abgenommen. Da musst du dann auch keine Fehler mehr berechnen.
Das Problem was ich an deiner Idee sehe ist dass dein Objekt fehlplatziert wird eben weil die Bilderkennung ungenau arbeitet. Das Problem hast du beim abschätzen des Fehlers dann aber genau so. Ansonsten gäbe es den Fehler ja erst gar nicht.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

15

16.01.2018, 13:20

Mein Programm soll letztendlich die Kameraposition schätzen, ja.
Aber das ist eigentlich nicht Teil meiner Frage, sondern nur zum Verständnis, was ich insgesamt erreichen möchte.

Das einzige Problem, was ich habe, ist die Fehlerbestimmung.
Ein einfaches Maß wäre hier natürlich die Fehlposition der geschätzten Kamera zur richtigen Kamera,
ich möchte jedoch den Fehler am Objekt wissen (bzw. die Abweichung des echten Objekts zu einem Objekt, das ich auf Grundlage der geschätzten Kameraposition rendere).

An sich muss das eine einfache Berechnung sein. Es soll ja nur das gemacht werden, was Unity macht (siehe "Einfache Umsetzung in Unity"). Ich möchte es nur in einem Skript außerhalb von Unity durchführen umsetzen.


@Schorsch: Die Fehlplatzierung des Objekts ist hier ja nicht mein Problem. In der Tat kommt die durch mein Programm, es ist ja nicht perfekt. Mich interessiert hier ja nur die Größe des Fehlers des Programms.

(Aber vielen Dank schon mal für eure Antworten und eure aufgenommene Mühe, mein Problem zu verstehen. :) )

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

16

16.01.2018, 13:39

Das Problem ist dass es zu einem 2D Punkt auf der Bildebene einer Kamera unendlich viele 3D Punkte gibt, die alle auf den selben 2D Punkt projizieren. Du kannst also nicht einfach von 2D Punkt zurück auf den 3D Punkt kommen...

Edit: Moment, aus deiner Schätzung solltest du doch dann zu jedem Objektpunkt dessen relative Position zur Kamera bekommen!? In dem Fall kannst du die dann doch einfach mit der relativen Position des echten Punktes zur echten Kamera vergleichen!?

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »dot« (16.01.2018, 13:46)


17

16.01.2018, 13:54

"Projizieren" hatte ich falsch verwendet. Es bleibt alles im 3D Raum. (zumindest nach der Schätzung)

Vielleicht erklär ich es mal bildlich:
Stell dir vor, wir hätten im Ursprung zwei gleiche Objekte o1 und o2.
Außerdem haben wir eine echte Kamera und eine falsche.
Objekt o1 wird nun fest mit der falschen Kamera verbunden, wie mit einem Stab fixiert.
Egal, was ich mit der falschen Kamera mache, wie ich sie verschiebe oder drehe, relativ bleiben beide immer gleich verschoben - in der Kamerasicht bewegt sich das o1 nie, im Worldspace natürlich schon.
Nun setze ich die falsche Kamera auf die genaue Position und Orientierung der echten Kamera.
o1 bewegt sich mit und ist nun, im besten Fall, in der Nähe von o2.
Jetzt ließe sich der Fehler berechnen.

Zu deinem Edit:
Ja, da fehlt nur die Berücksichtigung der Orientierung der Kameras, oder hab ich dich falsch verstanden?

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

18

16.01.2018, 13:58

Ah, jetzt denke ich verstanden zu haben.
Nun ist die Frage, wie du so einen Fehler definieren willst. Abstand der Positionen von o1 und o2? Nötiger Drehwinkel, um o1 so zu drehen, dass es gleich ausgerichtet ist wie o2? Beides zusammen?

19

16.01.2018, 14:01

Ah, jetzt denke ich verstanden zu haben.
Nun ist die Frage, wie du so einen Fehler definieren willst. Abstand der Positionen von o1 und o2? Nötiger Drehwinkel, um o1 so zu drehen, dass es gleich ausgerichtet ist wie o2? Beides zusammen?


Mir genügt eigentlich der Abstand. Wenn ich das Objekt mit drei Punkten annähere, ((1,0,0),(0,1,0),(0,0,1)) wäre hier auch die Orientierung berücksichtigt. Der Fehler muss keinen Rückschluss auf die nötige Verbesserung liefern. Er soll nur aussagen, wie gut die Überlagerung momentan ist.

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

20

16.01.2018, 14:01

Nun setze ich die falsche Kamera auf die genaue Position und Orientierung der echten Kamera.
o1 bewegt sich mit und ist nun, im besten Fall, in der Nähe von o2.
Jetzt ließe sich der Fehler berechnen.

Und was genau für Werte hast du nun und was genau fehlt dir für diese Berechnung!? Kennst du die beiden Kameraposen im Worldspace und nimmst an dass o1 und o2 gleich sind oder kennst du die Koordinaten von o1 und o2 relativ zu den jeweiligen Kameras und nimmst an dass die Posen der Kameras im Worldspace gleich sind!?

Werbeanzeige