Calibrazione della telecamera / modello di telecamera pin hole e elaborazione della posizione 3d


10

Ho una fotocamera calibrata e ho i parametri intrinseci. Ho anche i parametri estrinseci relativi ad un punto (l'origine del mondo) su una superficie planare nel mondo reale. Questo punto ho impostato come origine le coordinate del mondo reale [0,0,0] con una normale di [0,0,1].

Da questi parametri estrinseci posso capire la posizione e la rotazione della telecamera nelle coordinate 3d del piano mondiale usando questo qui: http://it.wikipedia.org/wiki/Camera_resectioning

Ora ho un secondo punto in cui ho estratto le coordinate dell'immagine per [x, y]. Come posso ora ottenere la posizione 3d di questo punto nel sistema di coordinate mondiale?

Penso che l'intuizione qui sia che devo tracciare un raggio che va dal centro ottico della fotocamera (per il quale ora ho la posizione 3D come descritto sopra), attraverso il piano dell'immagine [x, y] della fotocamera e quindi attraverso il mio piano del mondo reale che ho definito in alto.

Ora posso intersecare un raggio 3D di coordinate del mondo con un piano come conosco normale e puntare su quel piano. Quello che non capisco è come scopro la posizione e la direzione 3d quando lascia il piano dell'immagine attraverso un pixel. È la trasformazione attraverso diversi sistemi di coordinate che mi confonde.


Controlla questa risposta, potrebbe essere d'aiuto. Se pensi che qualcosa possa / potrebbe essere completato, dimmelo. dsp.stackexchange.com/a/2737/1473
Jav_Rock

Risposte:


6

Se hai gli estrinseci, è molto semplice. Avere estrinseci equivale ad avere una "posa da camera" e lo stesso ad avere l'omografia. Controlla questo post in StackOverflow.

Hai degli estrinseci, chiamati anche posa della telecamera, che sono descritti come una traduzione e una rotazione:

Pose=[R|t]=[R11R12R13txR21R22R23tyR31R32R33tz]

Puoi ottenere l' omografia da Pose in questo modo:

H=1tz[R1xR2xtxR1yR2ytyR1zR2ztz]

Quindi puoi proiettare i tuoi punti 2D nei corrispondenti punti 3D moltiplicando l'omografia per i punti:

p2D=[xy1] Inserisci z=1 per renderli omogenei

p3D=Hp2D

p=p/p(z) Normalizza i punti


cosa intendi con p (z) qui?
Belal Homaidan,

3

Hai due opzioni, usa la retroproiezione o la proiezione tra due piani (omografia).

P

P=K[RRC]Xreprojected=P+x

CXV=ω[XYZ1]Tω=1

u=XreprojectedCv=uuL(t)=C+tv

Π=[π1π2π3π4]T,π1X+π2Y+π3Z+π4=0L(t)=Πt

3×3H

Xplane=[XY01]Tx=PXplane=H[XY1]T

x

Xplane=H1x

H

H=R+1dTNT

dT=RC


2

Non puoi conoscere la posizione 3d del secondo punto. Può essere uno qualsiasi dei punti sul raggio dal centro della fotocamera fino all'infinito.

Puoi fare quanto segue:

  • Crea uno spazio 3d predefinito che ricorda la scena della vita reale
  • Ottieni più punti di immagini da una diversa angolazione, usando l'intersezione dei raggi da diverse angolazioni, puoi ottenere un'approssimazione del punto 3d.

Un attimo. Posso trovare il punto del mondo 3d che il raggio 3d interseca la superficie piana, sicuramente? Come so una coordinata del mondo 3d e un mondo 3d normale di quell'aereo ..... il punto 3d che sto cercando di trovare è il punto che interseca quella superficie planare !! (Mi dispiace, penso che la mia spiegazione non sia stata abbastanza valida)
Ghepardo,

Cosa intendi con superficie planare? Il piano dell'immagine o il piano delle coordinate del mondo zero? Nel caso di quest'ultimo, puoi calcolare l'intersezione, ma ciò significa che la tua scena 3d non è 3d, ma 2d :) (perché è un piano).
Geerten,

Sì scusa, non mi è venuto in mente. Capisco quello che stai dicendo, non ha davvero senso per me visivamente. Quindi, sì, la mia scena è in realtà "2d" perché ho il piano dell'immagine e ho il piano del mondo reale, su cui si trova l'origine del mondo reale [0,0,0] e ha un mondo reale normale di [0,0, 1], quindi ogni punto che si trova su questo piano del mondo reale è nella forma di [x, y, 0]. So di poter calcolare l'intersezione anche se ax + di + cz + d = 0, ma questo è ciò con cui ho problemi. (Continua nel prossimo commento)
Ghepardo

Ho un raggio che inizia dal centro della mia fotocamera / origine per cui ho il mondo reale [x, y, z] e un mondo reale normale [nx, ny, nz]. Ho bisogno di sparare un raggio da questo punto che interseca il piano dell'immagine su [u, v] e quindi interseca il piano del mondo reale su [x, y, 0] (è questa x, y che voglio ottenere). Ciò di cui ho problemi è il primo bit, l'intersezione con il piano dell'immagine. Non riesco a vedere come lo faccio?
Ghepardo,

Potresti voler dare un'occhiata a: en.wikipedia.org/wiki/Line-plane_intersection
Geerten
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.