Frage

Als Nachtrag zu meine vorherige Frage Zur Bestimmung der Kameraparameter habe ich ein neues Problem formuliert.

Ich habe zwei Bilder des gleichen Rechtecks:

Das erste ist ein Bild ohne jegliche Transformationen und zeigt das Rechteck so, wie es ist.

Das zweite Bild zeigt das Rechteck, nachdem eine 3D-Transformation (XYZ-Rotation, Skalierung, XY-Translation) angewendet wurde.Dadurch sieht das Rechteck wie ein Trapez aus.

Ich hoffe, das folgende Bild beschreibt mein Problem:

Alternativtext http://wilco.menge.nl/application.data/cms/upload/transformation%20matrix.png

Wie bestimmen Sie welche Transformationen (genauer gesagt:welche Transformationsmatrix) haben diese Transformation verursacht?

Ich kenne die Pixelpositionen der Ecken in beiden Bildern, daher kenne ich auch die Abstände zwischen den Ecken.

War es hilfreich?

Lösung

Ich bin verwirrt. Ist das ein 2d oder ein 3D-Problem?

So wie ich es verstehe, haben Sie ein flaches Rechteck in 3D-Raum eingebettet ist, und Sie sind an zwei 2d „Bildern“ von ihm suchen - eine der ursprünglichen Version und einem auf der Grundlage der transformierten Version. Ist das richtig?

Wenn dies richtig ist, dann gibt es nicht genügend Informationen, um das Problem zu lösen. Angenommen, die beiden Bilder genau gleich aussehen. Dies könnte sein, weil die Übersetzung der Identität ist, oder es könnte sein, weil die Übersetzung das Rechteck doppelt so weit weg von der Kamera bewegt und verdoppelt seine Größe (also genau das gleiche es aussehen zu lassen).

Andere Tipps

Dies ist ein mathematisches Problem, nicht Programmierung ..

Sie müssen eine Reihe von Gleichungen definieren (Ihrer Transformationsmatrix, meine Vermutung ist, 3 Gleichungen) und löst es dann für die 4 Transformationen der Eckpunkt.

habe ich immer nur dies mit deutschen Worten beschrieben ... so die oben klingt seltsam ..

Auf der Grundlage der Informationen, die Sie haben, ist dies nicht so einfach. Ich werde Ihnen ein paar Ideen zu spielen, aber. Wenn Sie die 3D-Koordinaten der Ecken haben, würden Sie es leichter haben. Hier ist die Grundidee.

  1. Verschieben einer Ecke zum Ursprung. Danach Drehungen findet über den Ursprung nehmen.
  2. Bestimmen Sie Vektoren der Achsen. Tun Sie dies, indem Sie die benachbarten Ecken vom Ursprungspunkt subtrahiert wird. Diese werden eine lokale x- und y-Achse für die Welt sein.
  3. Winkel bestimmen die Vektoren verwendet. Sie können die Punkt- und Kreuzprodukte verwenden, um den Winkel zwischen der lokalen x-Achse und der globalen x-Achse (1, 0, 0).
  4. um zu bestimmen,
  5. Drehen um den Winkel in Schritt 3 Dadurch erhalten Sie eine neue x-Achse, die die globale x-Achse und eine neue lokale y-Achse entsprechen sollte. Sie können dann eine weitere Drehung um die x-Achse bestimmen, die die y-Achse in Ausrichtung mit der globalen Y-Achse bringen.

Ohne die z-Koordinaten, können Sie sehen, dass dies schwierig sein wird, aber dies ist der allgemeine Prozess. Ich hoffe, das hilft.

Die Lösung wird nicht einzigartig sein, wie Alex319 betont.

Wenn das zweite Bild wirklich ein Trapez ist, wie Sie sagen, wird das nicht allzu schwierig sein.Aufgrund der Perspektive handelt es sich um ein Trapez (kein Parallelogramm), daher muss es ein gleichschenkliges Trapez sein.

Zeichnen Sie die beiden Diagonalen.Sie schneiden sich in der Mitte des Rechtecks, sodass die Übersetzung erfolgt.

Drehen Sie das Trapez, bis seine parallelen Seiten parallel zu zwei Seiten des ursprünglichen Rechtecks ​​sind.(Welche zwei?Es spielt keine Rolle.)

Zeichnen Sie eine dritte Parallele durch die Mitte.Skalieren Sie dies auf die Seiten des von Ihnen gewählten Rechtecks.

Nun zur Drehung aus der Ebene.Messen Sie den Abstand von der Mitte zu einer der parallelen Seiten und verwenden Sie das Sinusgesetz.

Wenn es kein Trapez, sondern nur ein Viereck ist, wird es schwieriger. Sie müssen die Winkel zwischen den Diagonalen verwenden, um die Drehachse zu ermitteln.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top