Rotation von Facetracker-Gesichtskoordinaten in der Ebene eliminieren
-
Hi,
war mir nicht ganz sicher ob ich die Frage in das Matheboard schreiben sollte oder hier, aber ich denke hier wurde evtl. schon öfters das Problem angegangen.Mein Problem: Ich habe einen Facetracker der mir 2D Koordinaten der Punkte zurückgibt. Für mein Projekt muss ich die Gesichtspunkte auf einer 2D Ebene fixieren. Mein Problem ist es jetzt die Rotation des Kopfes wegzubringen. Da mir der Facetracker keine Tiefeninformationen der Punkte liefert bin ich gerade etwas ratlos wie ich das machen soll. Eine Idee die ich hatte ist es die Punkte auf ein Standard-Gesicht zu übertragen und dann die Drehung zu berechnen.
Kennt vielleicht jemand einen mathematischen Ansatz?Für jede Hilfe bin ich dankbar.
-
Hi,
schwieriges Problem erstmal. Wenn dir dritte Dimension fehlt fehlt sie halt.
Wenn du jedoch das 3D Gesicht des Users kennst (zur Not tut's auch ein Standardgesicht, aber was ist dann mit breiten vs. schmalen Gesichtern?)
ist deine Idee gar nicht schlecht.seien v_i \in R^2 die getrackten 2D Verts und p_i \in \R^3 die Verts des Standardgesichts, dann suchst du R so,
dass \sum dist(v_i - projtoplane(R*p_i)) == min.
Das läuft auf einen Sonderfall des Procrustes Problems heraus, da projtoplane ja nichts anderes ist, als "beziehe nur die x und y Komponente in die Abstandsberechnung ein".
Wie du dir die Lösung zum Procrustes Problem herleitest, findest du z.B. hier
http://igl.ethz.ch/projects/ARAP/svd_rot.pdf
oder bei GoogleCiao, Jochen
-
Also die Idee mit dem Standardgesicht habe ich erst einmal verworfen. Der Facetracker liefert zusätzlich noch einen Rotationsvektor(x,y,z). Die Rotation um die z-Achse eliminiere ich aber mit einem von mir selbst berechneten Winkel. Ist jetzt die Frage wie ich die anderen Winkel benutzen kann. Wie also eliminiere ich die Rotation um die anderen Achsen? Eine simple Multiplikation mit der Drehmatrix der jeweiligen Achse funktioniert ja leider nicht, weil sich die Punkte in einer Ebene befinden. Wenn ich meinen Kopf nach oben, unten, links, oder rechts drehe, habe ich doch eine affine Transformation der Bildpunkte oder? Wie kann ich diese nun eliminieren?
Grüße
mad1Z