/ / Head Pose Estimation con 2 telecamere - opengl, opencv, computer-vision, camera-calibration, pose-estimation

Stima Pose Head con 2 telecamere - opengl, opencv, computer-vision, camera-calibration, pose-estimation

Sto lavorando a un progetto di stima della testautilizzando 2 telecamere. Per un sistema di telecamere funziona e restituisce la matrice di rotazione e il vettore di traslazione di una testa rispetto a ciascun sistema di coordinate della telecamera. Ho reso l'oggetto nella scena OpenGL che è ruotato e tradotto per rappresentare i movimenti della testa. Per visualizzare la matrice di rotazione calcolata e il vettore di traduzione, uso semplicemente i seguenti comandi OpenGL.

glMatrixMode(GL_MODELVIEW);
glLoadMatrixd(pose_matrix);

dove pose matrix è una matrice OpenGL ModelView costruita da matrice di rotazione e vettore di traduzione di una testa.

Ora sto provando a farlo per 2 calibratimacchine fotografiche. Quando la prima videocamera ha perso la traccia di una faccia ma la seconda stima la posizione della testa, visualizzo la rotazione e la traslazione rispetto alla seconda e viceversa. Voglio mostrare un oggetto OpenGl e spostarlo per entrambi i casi. Per questo ho bisogno di trasferire matrici di posa nel frame di coordinate comuni.

Conosco la geometria relativa di 2 telecamererispetto l'uno all'altro. Presumo che una delle telecamere sia la cornice coordinata del mondo e trasferisco la matrice di posa della testa della seconda fotocamera al fotogramma della prima fotocamera moltiplicando la matrice di posa e la matrice di calibrazione della seconda fotocamera rispetto alla prima fotocamera. Quando carico questa matrice moltiplicata nella matrice OpenGL ModelView ottengo risultati errati. Quando la prima videocamera acquisisce la visuale, l'oggetto si muove a destra ma per la seconda camera l'oggetto viene tradotto e ruotato e non si trova nello stesso punto del caso della prima fotocamera.

Quale potrebbe essere il problema? Forse OpenGL che mostra parte è sbagliato o?

risposte:

0 per risposta № 1

Assunzione di default sicura: OpenGL ha ragione, il tuo codice è sbagliato.

Senza vedere il tuo codice, posso suggerire di stampare le tue matrici e ricontrollare la matematica con loro in Matlab o Octave.

Un errore comune è quello di dimenticarlo per impostazione predefinitaPRE PREFIG Moltiplica i vettori ROW dalla matrice modelvie (anzi tutte le matrici). Cioè, si moltiplica come v_row * M, con la matrice memorizzata in ordine col maggiore, mentre si potrebbe pensare all'interno della comune convenzione matematica di trattare i vettori come quelli di COLUMN e POST-moltiplicarli come M * v_col (con M memorizzato row-major).

Se preferisci lavorare con quest'ultima convenzione (raccomandata), consulta il GL_ARB_transpose_matrix estensione.