2012-06-11 16 views
6

Voglio aumentare un oggetto virtuale a x, y, z metri della telecamera. OpenCV ha funzioni di calibrazione della fotocamera ma non capisco esattamente come posso dare le coordinate in metriCome trovare la matrice di telecamere per la realtà aumentata?

Ho provato a simulare una telecamera in Unity ma non ottengo risultati attesi.

Impostare la matrice di proiezione come segue e creare un cubo di unità su z = 2.415 + 0.5. Dove 2.415 è la distanza tra l'occhio e il piano di proiezione (modello di telecamera Pinhole) Poiché la faccia del cubo si trova sul piano di ritaglio anteriore e la sua dimensione è l'unità, non dovrebbe coprire l'intera finestra?

Matrix4x4 m = new Matrix4x4(); 
    m[0, 0] = 1; 
    m[0, 1] = 0; 
    m[0, 2] = 0; 
    m[0, 3] = 0; 

    m[1, 0] = 0; 
    m[1, 1] = 1; 
    m[1, 2] = 0; 
    m[1, 3] = 0; 

m[2, 0] = 0; 
    m[2, 1] = 0; 
    m[2, 2] = -0.01f; 
    m[2, 3] = 0; 

    m[3, 0] = 0; 
    m[3, 1] = 0; 
    m[3, 2] = -2.415f; 
    m[3, 3] = 0; 
+0

Se si imposta m [3,2] = -1/2.415f e m [3,3] = 1 matrice di proiezione funziona correttamente –

risposta

4

Ho finito per misurare manualmente il campo visivo. Una volta che conosci FOV puoi facilmente creare la matrice di proiezione. Non c'è bisogno di preoccuparsi delle unità perché alla fine la proiezione è del formato (X * d/Z, Y * d/Z). Qualunque sia l'unità di X, Y, Z può essere il rapporto di X/Z rimane lo stesso.

5

scala globale della calibrazione (vale a dire le unità di misura delle coordinate spaziali 3D) è determinata dalla geometria dell'oggetto di calibrazione si utilizza. Ad esempio, quando si calibra in OpenCV usando le immagini di una scacchiera piatta, gli ingressi alla procedura di calibrazione sono coppie corrispondenti (P, p) di punti 3D P e le loro immagini p, le coordinate (X, Y, Z) del 3D i punti sono espressi in mm, cm, pollici, miglia e quant'altro, come richiesto dalle dimensioni del target che si utilizza (e dall'ottica che lo immagina) e le coordinate 2D delle immagini sono in pixel. L'output della routine di calibrazione è l'insieme di parametri (i componenti della matrice di proiezione P ei parametri di distorsione non lineare k) che "convertono" le coordinate 3D espresse in quelle unità metriche in pixel.

Se non si conoscono (o non si desidera utilizzare) le dimensioni effettive del target di calibrazione, è possibile solo fonderlo ma lasciare invariato il loro rapporto (in modo che, ad esempio, un quadrato rimanga un quadrato anche sebbene la lunghezza reale del suo lato possa essere sconosciuta). In questo caso la calibrazione sarà determinata fino a una scala globale sconosciuta. Questo è in realtà il caso comune: nella maggior parte delle applicazioni di realtà virtuale non ti interessa realmente quale sia la scala globale, a patto che i risultati siano corretti nell'immagine.

Ad esempio, se si desidera aggiungere un paio paffuto di labbra 3D su un video di Angelina Jolie, e comporle con il video originale in modo che le nuove labbra finte rimangano attaccate e sembrino "naturali" sul suo viso , hai solo bisogno di ridimensionare il modello 3D delle labbra finte in modo che si sovrapponga correttamente l'immagine delle labbra. Indipendentemente dal fatto che il modello sia a 1 o un miglio di distanza dalla fotocamera CG in cui viene eseguito il rendering, il composito è completamente irrilevante.

+1

Mi piace l'esempio :) – Ani

+1

Sono in grado di aumentare i modelli senza scala adeguata, ma io voglio che sia esatto in metri. Farò stereo rendering e deve dare esatta percezione della profondità. –

+0

La precisione metrica è irrilevante anche nel caso del rendering stereo: tutto ciò che interessa in questo caso è il rendering con la giusta quantità di disparità sinistra-destra nelle due fotocamere. Finché tutte le dimensioni e i rapporti di distanza sono corretti, la scala globale effettiva non può essere percepita. –

5

Per trovare l'aumento di un oggetto è necessario trovare la posizione e l'orientamento della fotocamera. È lo stesso che trovare gli estrinsecci della fotocamera. Devi anche calcolare prima le caratteristiche intrinseche della telecamera (che si chiama calibraiton).

OpenCV ti permette di fare tutto questo, ma non è banale, richiede lavoro da solo. Ti do un indizio, devi prima riconoscere qualcosa nella scena che sai come appare, quindi puoi calcolare la posa della telecamera analizzando questo oggetto, chiamandolo un pennarello. Puoi iniziare dai fiduciali tipici, sono facili da rilevare.

Dai un'occhiata a questo thread.

Problemi correlati