GLS mit 6 Unbekannten und 3x4 Bekannten lösen

Hallöchen!

Uff, ich hab mir beim Formulieren des Betreffs fast nen Ast abgebrochen, weil ich nicht wusste, wie ich es besser erklären soll.

Ich habe folgende Gleichung:
( m_x ) = ( a_11 a_12 ) * ( v_x ) + ( m_x0 )
( m_y ) ( a_21 a_22 ) ( v_y ) + ( m_y0 )

m_x m_y : 2-zeiliger Vektor
a_ij : 2x2 Matrix mit 4 gesuchten Unbekannten
v_x v_y : 2-zeiliger Vektor v
m_x0 m_y0: 2-zeiliger Vektor mit 2 gesuchten Unbekannten

Das ganze ist eine Kalibrierung für ein EyeTracking-System, das auf einem Vektor zwischen zwei bestimmten Punkten im Auge basiert. Dieser Vektor ist der Vektor v.

In der Kalibrierung meines Systems werden jetzt 3 zusammengehörige Werte bestimmt, indem der Nutzer nacheinander auf 3 bekannte Punkte (Pixelkoordinaten) gucken soll. Ich bekomme also:

  1. bekannten Pixel m_1 (linke Seite der Gleichung) und dazugehöriger Vektor v_1.
  2. bekannten Pixel m_2 und dazugehöriger Vektor v_2.
  3. bekannten Pixel m_3 und v_3.

Auf dem Papier ist mir ganz klar, wie ich das löse: Mit einem Wertepaar anfangen, einsetzen, umformen, nächstes Wertepaar einsetzen, und die Formeln „kreuz und quer“ ineinander einsetzen :smile: .
Dann hätte ich am Ende alle 6 Unbekannten a_ij und m_x0 und m_y0. Danach würde ich dieselbe Formel anwenden, um auszurechnen, wo der User jetzt hinguckt, indem ich den Vektor v als Eingabe nehme, und m_x und m_y ist dann mein Ergebnis.

ABER: Wie programmiere ich die Lösung dieses GLS?
Ich schreibe in C++ mit OpenCV.

Hallo,

Wenn du dich ein wenig mit Matrizen auskennst, sollte Dir das Stichwort Gauss etwas sagen. Für den Fall, dass nicht:

http://de.wikipedia.org/wiki/Gau%C3%9Fsches_Eliminat…

Grüße,