2016-04-30 15 views
1

Ich habe seit einer Woche mit einem Problem gekämpft, dass ich nicht ein Gesicht von Nicht-Front wie das linke Gesicht in dieser image nach vorne wie das rechte Gesicht in der gleichen drehen kann Bild.drehen Gesicht von nicht-vorne nach vorne opencv

enter image description here

1). Ich benutze ein Tutorial über Delaunay bei learnopencv Website alle auf das Dreieck von der linken Fläche (etwa 138 Dreiecken) wie folgt zu erhalten:

... 

triangle num 4: [100, 383] | [120, 374] | [112, 385] 

triangle num 5: [120, 374] | [100, 383] | [92, 345] 

triangle num 6: [136, 396] | [137, 379] | [151, 394] 

triangle num 7: [137, 379] | [136, 396] | [118, 395] 

triangle num 8: [92, 345] | [86, 414] | [80, 451] 

triangle num 9: [86, 414] | [92, 345] | [100, 383] 

triangle num 10: [86, 414] | [100, 383] | [118, 395] 

triangle num 11: [116, 336] | [120, 374] | [92, 345] 

triangle num 12: [120, 374] | [116, 336] | [133, 344] 

... 

2). und diese Bibliothek: https://github.com/chili-epfl/attention-tracker (die die Kopfpose schätzen kann), um eine 4x4-Matrix-Transformation der Kopfpose des linken Gesichts zu erhalten, scheint diese Matrix ein Ergebnis der Funktion Rodrigues in opencv zu sein.

0.659585 -0.749291 -0.0592507 0.0591621 

-0.0327269 -0.107385 0.993679 -0.00523744 

-0.750917 -0.653477 -0.0953513 -0.280204 

0   0   0   1 

Also ich weiß nicht, was der nächste Schritt ist von Schritt 1 mit der 4x4-Matrix aus Schritt 2 alle auf das Dreieck zu drehen das Ergebnis des rechten Gesichts zu bekommen. Pls Hilfe!

+0

Vielleicht wäre ein Code und Bilder hilfreich, um Antworten zu bekommen ... – tfv

+0

Der Code ist wirklich lange zu lesen, also denke ich, das Ergebnis von meinem Code hier wird klarer sein. Um genauer zu sein, ist meine Dreiecksliste wie folgt deklarieren: cv :: vector list_tri_points Also jedes Element wird eine Liste von 2D-Punkte wie das Ergebnis in Schritt1 und die Matrix 4x4 bei Schritt 2 Ich speichere in einer Variablen vom Typ cv :: Mat Was ich erreichen möchte, ist irgendwie Transform alle Dreiecke in list_tri_points in neue Liste von Dreiecken mit Hilfe von Matrix 4x4. Und diese neue Liste von Dreiecken wird für eine Vorderseite präsentieren –

Antwort

1

Das Projizieren eines Gesichts von der nicht frontalen Ansicht auf die frontale Ansicht ist ein komplexes Problem, selbst wenn Sie eine projizierte Orientierungsposition des Gesichts haben. Ich empfehle zwei Open-Source-Bibliotheken, die ich vorher benutze.

Die erste wird von MIT zur Verfügung gestellt. Dieser Code ist nicht nur Frontalizer und kann für jedes Objekt verwendet werden. https://bitbucket.org/gbhuang/congealreal

Der zweite Bibliothekslink ist unter dem nur für die Flächenprojektion vorgesehen.

https://github.com/eranid/adience_align

ich denke, die zweite Bibliothek am nützlichsten ist.

+0

Danke Zangeneh für die Beantwortung meiner Frage. Mein Zweck besteht darin, eine Gesichtserkennung durchzuführen, indem die Verhältnisse zwischen allen möglichen Paaren von Orientierungspunkten des Eingabebildes (nicht-frontales Gesichtsbild) mit Verhältnissen des gespeicherten Bildes (frontales Gesichtsbild) verglichen werden. Aber mit einer nicht-frontalen Fläche können die Verhältnisse nicht stimmen, also muss ich sie in eine frontale Fläche umwandeln und dann die Verhältnisse berechnen. Aber wenn Sie, wie Sie sagten, ein komplexes Problem haben, gibt es andere Lösungen, um die Verhältnisse von 2 Gesichtern korrekt zu vergleichen, die zählen, um Unterschiede zu erzeugen, aber ohne Projektion des Gesichts? –

+0

Wenn Sie ein Gesichtserkennungssystem implementieren möchten, das Gesichter in verschiedenen Pose erkennen kann, gibt es zwei Möglichkeiten. Der erste Weg ist die Verwendung von Frontalization-Modul und der zweite ist die Verwendung von Gesichtspose Schätzung, die sagen, ob Gesicht ist nicht frontal Drop it –

+0

Hallo Zangeneh, könnten Sie bitte genauer über die Verwendung von Pose Schätzung in Gesichtserkennung erklären? Ich verstehe es immer noch nicht. Vielen Dank! –