Transformationsmatrix bilden

Guten Tag,

ich bin neu hier und habe eine ganz dringende Frage, an der ich mir seit Wochen die Zähne ausbeiße.
Und zwar habe ich aus zwei Aufnahmen von zwei unterschiedlichen Messsystemen desselben Punktes zwei verschiedene x-,y- und z-Koordinaten. Um beide vergleichen zu können, muss ich die einen Koordinaten in das andere Koordinatensystem überführen. Da ich nicht weiß, wie die beiden Koordinatensysteme zueinander stehen, fällt mir keine Möglichkeit ein, eine Transformationsmatrix zu bestimmen, die sowohl die Verschiebung, als auch die Rotation berücksichtigt. Diese Transformationsmatrix benötige ich, um auch andere Punkte überführen zu können. Also, wie kann ich die Transformationsmatrix aus den zwei Koordinatenpaaren bestimmen? Bin leider kein Experte auf dem Gebiet.

Vielen Dank

Also, wie kann ich die
Transformationsmatrix aus den zwei Koordinatenpaaren
bestimmen?

Hi !

Also ich denke dazu reichen zwei Koordinatentripel nicht aus.
Nimm z.B. (1|1|0) als Koordinaten des Punktes im einen Koordinatensystem und (0|1|1) im anderen. Die Transformationsmatrix ist dadurch noch nicht eindeutig bestimmt. Zwei mögliche Transformationsmatrizen wären z.B.

001
100
010

und

001
101
011

Beide Matrizen haben Determinante 1, sind also Basistransformationen, und beide bilden (1|1|0) auf (0|1|1) ab.
Um eine allgemeine Transformationsmatrix im Dreidimensionalen eindeutig bestimmen zu können, bräuchtest du die Koordinatentripel von drei Punkten, und zwar jeweils in beiden Koordinatensystemen.

Gruß

hendrik

Hey Henrik,
ich hab drei zusammengehörige Koordinatentripel aus den zwei verschiedenen Koordinatensystemen. Könntest du mir irgendwie erklären, wie ich aus diesen Punkten zu meiner Rotationsmatrix komme?
Stimmt diese Rotationsmatrix auch noch, wenn der Ursprung des einen Koordinatensystems gegenüber dem anderen verschoben ist?

Grüße

Hey Henrik,
ich hab drei zusammengehörige Koordinatentripel aus den zwei
verschiedenen Koordinatensystemen. Könntest du mir irgendwie
erklären, wie ich aus diesen Punkten zu meiner Rotationsmatrix
komme?

Hi !

Nennen wir die drei Punkte im einen Koordinatensystem mal
A(a1|a2|a3)
B(b1|b2|b3)
C(c1|c2|c3)

Die drei Bildpunkte im anderen Koordinatensystem nennen wir
X(x1|x2|x3)
Y(y1|y2|y3)
Z(z1|z2|z3)

D.h. A wird durch die Transformation auf X abgebildet usw.
Die Transformationsmatrix nennen wir T. Sie ist eine 3x3-Matrix und hat die Einträge
t11 t12 t13
t21 t22 t23
t31 t23 t33

Dass A durch T auf X abgebildet wird, bedeutet
t11a1+t12a2+t13a3=x1
t21a1+t22a2+t23a3=x2
t31a1+t32a2+t33a3=x3
Mit B,Y und C,Z erhälst du noch sechs analoge Gleichungen. Wenn du jetzt die Koordinaten deiner Punkte einsetzt erhälst du ein lineares Gleichungssystem mit 9 Gleichungen und 9 Unbekannten (die tij). Wenn du das löst, hast du die Einträge deiner Transformationsmatrix.

Stimmt diese Rotationsmatrix auch noch, wenn der Ursprung des
einen Koordinatensystems gegenüber dem anderen verschoben ist?

Ich verstehe nicht ganz was du meinst. Kannst du das etwas genauer erklären ?

Gruß

hendrik

Damit meine ich, dass das Koordinatensystem nicht nur verdreht sein kann, sondern sein Ursprung dem anderen Koordinatensystem gegenüber auch noch verschoben sein kann.

Dadurch erweitert sich laut Literatur die Rotationsmatrix auf

1 0 0 0
Lx t11 t12 t13
Ly t21 t22 t23
Lz t31 t32 t33

Demzufolge habe ich dann sogar 12 unbekannte. Daher habe ich ein Gleichungssystem mit 12 Gleichungen aus vier Punkten aufgestellt.

Die einzelnen Punkte, die ich für die Gleichungen herangezogen habe, lassen sich mit dieser Matrix im Anschluss auch prima hin und her rechnen. Aber wenn ich jetzt andere Punkte zu einem späteren Zeitpunkt nehme (beide Koordinatensysteme sind fest), dann stimmen die errechneten Koordinaten nicht.

Ich bin jetzt echt aufgeschmissen und weiß nicht woran das liegen kann.

Damit meine ich, dass das Koordinatensystem nicht nur verdreht
sein kann, sondern sein Ursprung dem anderen Koordinatensystem
gegenüber auch noch verschoben sein kann.

Dadurch erweitert sich laut Literatur die Rotationsmatrix auf

1 0 0 0
Lx t11 t12 t13
Ly t21 t22 t23
Lz t31 t32 t33

Was soll denn das für eine Rotationsmatrix sein ? Die kannst du ja gar nicht mit dem Ortsvektor eines dreidimensionalen Punktes multiplizieren, denn sie hat ja vier Spalten.
Was meinst du denn mit verschoben ? Falls du eine Translation meinst, das ist keine lineare Abbildung, d.h. sowas lässt sich auch nicht als Multiplikation mit einer Matrix darstellen.
Eine Scherung ist eine lineare Abbildung die man vielleicht als Verschiebung bezeichnen könnte, meinst du das ?

Gruß

hendrik

Falls du eine affin lineare Transformation, d.h. z.B. eine Rotation und eine Translation, darstellen willst, empfiehlt es sich in homogenen Koordinaten zu rechnen. Dabei hängst du an jeden Vektor noch eine 1 am Schluss dran. Die Transformationsmatrix wird zu einer 4x4-Matrix der Form

r<sub>11</sub> r<sub>12</sub> r<sub>13</sub> t<sub>14</sub>
r<sub>21</sub> r<sub>22</sub> r<sub>23</sub> t<sub>24</sub>
r<sub>31</sub> r<sub>32</sub> r<sub>33</sub> t<sub>34</sub>
0 0 0 1

Die r-Einträge sind für die Rotation verantwortlich, die t-Einträge für die Translation. Die letzte Zeile erzeugt wieder eine 1 als letzten Eintrag des Ergebnisvektors.
Die ersten drei Einträge des Ergebnisvektors sind die Koordinaten deines Bildpunktes.
Du suchst dir also die Koordinatentripel von vier Punkten jeweils in beiden Koordinatensystemen und erweiterst sie alle um eine 1 als vierte Koordinate. Dann stellst du das lineare Gleichungssystem auf wie gehabt und erhälst so die Einträge deiner Transformationsmatrix.
Wenn du im dreidimensionalen affin linear rechnen willst, d.h. mit Translation, musst du diese 4x4-Matrix nehmen und die Koordinatentripel der Punkte immer um eine 1 als vierte Koordinate erweitern. Mit einer 3x3-Matrix kriegst du die Translation nicht dargestellt.

Grüße

hendrik

Hey Hendrik,
genauso bin ich auch vorgegangen. Allerdings stimmen, nachdem ich mit dem linearen Gleichungssystem alle Elemente der 4x4 Matrix bestimmt habe, nur die Koordinatentripel, die ich zur Lösung des Gleichungssystems genutzt habe. Multipliziere ich die Matrix aber mit einem anderen beliebigen Punkt, dann stimmen die Koordinatentripel nicht mehr.
Ich denke, ich habe irgendeinen mathematischen Denkfehler, den ich nicht finde. Deshalb schreibe ich mal mein Vorgehen schemenhaft auf. Vielleicht fällt dir etwas auf.

Ich habe die Formel
x’ r11 r12 r13 t1 x
y’= r21 r22 r23 t2 . y
z’ r31 r32 r33 t3 z
1 0 0 0 1 1

Nun erstelle ich mein Gleichungssystem:

x1’=r11*x1+r12*y1+r13*z1+t1
x2’=r11*x2+r12*y2+r13*z2+t1
x3’=r11*x3+r12*y3+r13*z3+t1
x4’=r11*x4+r12*y4+r13*z4+t1

jetzt bestimme ich mit Gaus-Jordan r11,r12,r13,t1
dann nehme ich die nächste Zeile der Matrix

y1’=r21*x1+r22*y1+r23*z1+t2
y2’=r21*x2+r22*y2+r23*z2+t2
y3’=r21*x3+r22*y3+r23*z3+t2
y4’=r21*x4+r22*y4+r23*z4+t2

und bestimme r21,r22,r23,t2
Das selbe dann mit der nächsten Zeile

z1’=r31*x1+r32*y1+r33*z1+t2
z2’=r31*x2+r32*y2+r33*z2+t2
z3’=r31*x3+r32*y3+r33*z3+t2
z4’=r31*x4+r32*y4+r33*z4+t2

Jetzt wo ich alle Elemente der Matrix habe, setze ich diese in die Matrix ein und multipliziere sie mit dem Koordinatentripel (x1,y1,z1)
Das funktioniert super. Genau wie mit den Punkten (x2,y2,z2) nehme ich jetzt aber die Koordinaten (x100,y100,z100)aus meiner Messreihe, so stimmt das Ergebnis nicht mehr.

Vielleicht findest du ja einen Denkfehler?

Vielen Dank aber erstmal,
Grüße

Hey Puma,

klingt soweit alles richtig.
Wenn du andere Punkte transformieren willst, darfst du nicht vergessen sie vorher in homogenen Koordinaten darzustellen, also mit einer 1 als vierter Koordinate.
Wenn es dann immer noch zu falschen Koordinaten des Bildpunktes kommt, sehe ich zwei mögliche Gründe dafür.

  1. Messfehler
    Dann sollten die berechneten Koordinaten wenigstens ungefähr mit den gemessenen übereinstimmen.

  2. Die Transformation des einen Koordinatensystems in das andere ist nicht affin linear.

Hast du auf die Reihenfolge geachtet ? Die Transformation ist nur affin linear wenn zuerst rotiert und dann translatiert wird. Wenn zuerst translatiert und dann rotiert wird, ergibt sich ein nicht lineares Gleichungssystem.

Gruß

hendrik

Hey Hendrik,
das mit der 1 im Vektor hab ich beachtet. Ich denke, es wird dann wirklich an der falschen Reihenfolge liegen. Was mir noch aufgefallen ist, ist das Matrixelement r11. Hier habe ich einen Wert rausbekommen, der bei -1,8 liegt. Da dieses Element aber den Kosinus des Winkels zwischen den beiden x-Achsen der Koordinatensysteme wiedergibt, kann das ja schonmal nicht sein. Denn der Kosinus eines Winkels liegt ja immer zwischen 1 und -1.

Was meinst du damit, erst Rotation und dann Translation ausführen? Muss das schon bei der Berechnung der Matrixelemente beachtet werden. sprich, erst die 3x3 Rotationsmatrix ausrechnen und anschließend die 3x1 Translationsanteile? Oder erst bei der Berechnung der neuen Koordinaten rotieren und anschließend translieren?
Sorry für diese blöden Fragen. Aber Mathe ist bei mir schon ein Weilchen her.

Grüße

Hey Hendrik,
das mit der 1 im Vektor hab ich beachtet. Ich denke, es wird
dann wirklich an der falschen Reihenfolge liegen. Was mir noch
aufgefallen ist, ist das Matrixelement r11. Hier habe ich
einen Wert rausbekommen, der bei -1,8 liegt. Da dieses Element
aber den Kosinus des Winkels zwischen den beiden x-Achsen der
Koordinatensysteme wiedergibt, kann das ja schonmal nicht
sein. Denn der Kosinus eines Winkels liegt ja immer zwischen 1
und -1.

Naja, das kommt darauf an um welche Achse du drehst. Du kannst jede Drehung im dreidimensionalen Raum als Hintereinanderausführung von drei einzelnen Rotationen auffassen, eine um die x1-Achse, eine um die x2-Achse und eine um die x3-Achse. Das Hintereinanderausführen der Rotationen entspricht der Multiplikation der dazugehörigen Rotationsmatrizen, und dabei können in der Tat Einträge entstehen die betragsmäßig größer als 1 sind.

Was meinst du damit, erst Rotation und dann Translation
ausführen? Muss das schon bei der Berechnung der
Matrixelemente beachtet werden. sprich, erst die 3x3
Rotationsmatrix ausrechnen und anschließend die 3x1
Translationsanteile? Oder erst bei der Berechnung der neuen
Koordinaten rotieren und anschließend translieren?

Mir fällt gerade auf, dass das nicht ganz richtig war, was ich erzählt habe. Wenn man zuerst translatiert und dann rotiert ist die Transformation trotzdem noch affin linear. Algebraisch sieht das folgendermaßen aus:

  1. erst Rotation, dann Translation: x’=Rx+t
  2. erst Translation, dann Rotation: x’=R(x+t)
    R ist die Rotationsmatrix und t der Translationsvektor.
  3. ist ohne Frage affin linear, aber 2) auch, denn ich kann ja einen Hilfsvektor s=Rt definieren, dann gilt x’=R(x+t)=Rx+Rt=Rx+s, und das ist affin linear.
    Das bedeutet, dass die Ursache für die falschen Koordinaten weiterer Punkte doch nichts mit der Reihenfolge der einzelnen Transformationen zu tun haben kann. Wenn du Messfehler ausschließen kannst, bleibt als Erklärung also nur, dass die Transformation gar nicht affin linear ist.
    Wo kommen denn deine beiden Koordinatensysteme eigentlich her ?

Gruß

hendrik

Ich habe bestimmte Körperpunkte, wie z.B. Kniegelenk, Hüftgelenk, Schulter, usw. bei einer Bewegung mit zwei verschiedenen Motion Capture Systemen aufgenommen. Beide Systeme geben mir die Koordinaten bezüglich dieser Punkte in ihrem jeweiligen globalen Koordinatensystem. schaue ich mir jetzt die Bewegungsverläufe einzelner Punkte an, so sind diese leicht verschoben und verdreht. Aber die Verläufe sehen sich sehr ähnlich.
Nun wollte ich die Punkte quasi übereinander legen. und das mit einem allgemeinen Ausdruck, der auf alle anderen Punkte auch anwendbar ist.

Die Punkte müssten also rein theoretisch schon von einander abhängen.

Sind denn beide Koordinatensysteme in kartesischen Koordinaten ? Nicht dass das eine in Polarkoordinaten oder sowas misst.
Wie genau messen die Motion Capture Systeme denn, kennst du die Größe möglicher Messfehler ?
Sind beide Koordinatensysteme fest ? Man könnte ja auch auf die Idee kommen den Ursprung ins Kniegelenk zu legen.

Gruß

hendrik