Domanda

Ho 3 punti in uno spazio 3D di cui conosco le posizioni esatte. Supponiamo che siano: (x0, y0, z0) , (x1, y1, z1) e (x2, y2, z2) .

Inoltre ho una telecamera che guarda questi 3 punti e conosco le posizioni 2D di quei tre punti sul piano di visualizzazione della telecamera. Ad esempio, (x0, y0, z0) sarà (x0 ', y0') e (x1, y1, z1) sarà essere (x1 ', y1') e (x2, y2, z2) sarà (x2 ', y2') dal punto della videocamera di vista.

Qual è il modo più semplice per trovare la matrice di proiezione che proietterà quei punti 3D in punti 2D sul piano di visualizzazione della telecamera. Non sappiamo nulla sulla posizione della videocamera.

È stato utile?

Soluzione

Questo ti dà due serie, ognuna di tre equazioni in 3 variabili:

a*x0+b*y0+c*z0 = x0'
a*x1+b*y1+c*z1 = x1'
a*x2+b*y2+c*z2 = x2'

d*x0+e*y0+f*z0 = y0'
d*x1+e*y1+f*z1 = y1'
d*x2+e*y2+f*z2 = y2'

Usa semplicemente qualsiasi metodo per risolvere equazioni simultanee sia più semplice nella tua situazione (non è nemmeno difficile risolverle "manualmente"). Quindi la tua matrice di trasformazione è solo ((a, b, c) (d, e, f)).

...

In realtà, questo è troppo semplificato e presuppone che una videocamera sia puntata sull'origine del sistema di coordinate 3D e senza prospettiva.

Per la prospettiva, la matrice di trasformazione funziona più come:

               ( a, b, c, d )   ( xt )
( x, y, z, 1 ) ( e, f, g, h ) = ( yt )
               ( i, j, k, l )   ( zt )

( xv, yv ) = ( xc+s*xt/zt, yc+s*yt/zt ) if md < zt;

ma la matrice 4x3 è più limitata di 12 gradi di libertà poiché dovremmo avere

a*a+b*b+c*c = e*e+f*f+g*g = i*i+j*j+k*k = 1
a*a+e*e+i*i = b*b+f*f+j*j = c*c+g*g+k*k = 1

Quindi dovresti probabilmente avere 4 punti per ottenere 8 equazioni per coprire le 6 variabili per la posizione e l'angolo della telecamera e 1 in più per il ridimensionamento dei punti di vista 2D poiché saremo in grado di eliminare il "centro" coordinate (xc, yc).

Quindi, se hai 4 punti e trasformi i tuoi punti di vista 2D in modo che siano relativi al centro del display, puoi ottenere 14 equazioni simultanee in 13 variabili e risolverle.

Sfortunatamente, sei delle equazioni non sono equazioni lineari. Fortunatamente, tutte le variabili in quelle equazioni sono limitate ai valori compresi tra -1 e 1, quindi è ancora probabilmente possibile risolvere le equazioni.

Altri suggerimenti

La tua fotocamera ha (almeno) 7 gradi di libertà - 3 per la posizione, 3 per l'orientamento e 1 per FOV. Sono sicuro che qualcuno mi correggerà se sbaglio, ma non sembra che 3 punti siano sufficienti per una soluzione completa.

Per una soluzione generalizzata a questo problema, cerca "Visualizza correlazione" in Graphics Gems II.

Quello che stai cercando si chiama algoritmo di stima della posa. Dai un'occhiata all'implementazione POSIT in OpenCV: http://opencv.willowgarage.com /documentation/c/calib3d_camera_calibration_and_3d_reconstruction.html#posit

Avrai bisogno di quattro o più punti e potrebbero non trovarsi sullo stesso piano.

Un tutorial per questa implementazione è qui: http://opencv.willowgarage.com/wiki/Posit

Attenzione però: nell'esercitazione viene usata una finestra quadrata, quindi tutte le coordinate della vista sono nell'intervallo -1, -1 a 1,1. Questo porta a supporre che dovrebbero essere nel sistema di coordinate della fotocamera (prima della correzione delle proporzioni). Questo non è il caso, quindi se usi una finestra con ad es. un rapporto di formato 4: 3, le coordinate di input devono essere comprese nell'intervallo -1.3333, -1 a 1.3333,1.

A proposito, se i tuoi punti devono si trovano sullo stesso piano, allora puoi anche guardare l'algoritmo CameraCalibration da OpenCV, ma questo è più complicato da configurare e richiede più punti come input . Tuttavia ti fornirà anche le informazioni sulla distorsione e i parametri intrinseci della tua fotocamera.

Non credo che ci siano abbastanza informazioni per trovare una soluzione definitiva. Senza conoscere la posizione della videocamera e senza conoscere il piano di visualizzazione, esiste un numero infinito di matrici in grado di risolvere questo problema.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top