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:
- bekannten Pixel m_1 (linke Seite der Gleichung) und dazugehöriger Vektor v_1.
- bekannten Pixel m_2 und dazugehöriger Vektor v_2.
- 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 .
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.