coordinate pixel per linea 3D (OpenCV)
-
29-09-2019 - |
Domanda
Ho un'immagine visualizzata sullo schermo che viene distorto tramite cvInitUndistortMap & cvRemap (avendo calibrazione della telecamera a farsi), e l'utente fa clic su una caratteristica nell'immagine. Così ho i (u, v) coordinate pixel della funzione, e ho anche la matrice intrinseca e la matrice distorsione.
Quello che sto cercando è l'equazione della linea 3D in coordinate macchina fotografica / del mondo reale su cui la funzione l'utente ha fatto clic mosto menzogna. Ho già la distanza perpendicolare tra il piano dell'immagine della telecamera e la funzione, quindi posso combinano con l'equazione suddetta di darmi la (X, Y, Z) di coordinate della funzione nello spazio.
Suoni facile (matrice inversa intrinseca o qualcosa del genere?), Ma non riesco a trovare le istruzioni passo-passo ovunque. C ++ o C # codice preferito.
Soluzione
Questo è un po 'vecchio ma ancora domanda potrebbe essere utile per qualcuno. Tutte le linee passano attraverso il punto (0,0,0), così:
line.x0 = 0; line.y0 = 0; line.z0 = 0;
direzione vettoriale è la seguente: line.A = (u / fx) - (cx / fx); line.B = (v / fy) - (cy / fy); line.C = 1;
cx, cy, fx, fy sono parametri da matrici telecamera. Le equazioni sono spiegati nel libro "Learning OpenCV".