Salve a tutti, mi sono appena registrato.
Complimenti per il forum.
Sto affrontando un problema di stereo visione.
Ho due telecamere, le ho calibrate utilizzando il pattern di opencv (la schacchiera). Ho effettuato le correzioni epipolari e ho ottenuto la mappa di disparità e quella di profondità. L'ultimo passo, se non sbaglio, è la triangolazione.
Identificato un punto in entrambe le immagini (con coordinate x y), come posso ottenere le sue coordinate 3D? Quali funzioni di opencv devo utilizzare?
Grazie
Triangolazione
8 messaggi
• Pagina 1 di 1
Re: Triangolazione
OpenCV mette a disposizione la funzione "inversa" rispetto a quello che chiedi:
cvProjectPoints2
http://opencv.willowgarage.com/document ... ectpoints2
Però puoi trovare un'interessante soluzione leggendo questo thread del Gruppo ufficiale OpenCV:
http://thread.gmane.org/gmane.comp.lib. ... ocus=13302
cvProjectPoints2
http://opencv.willowgarage.com/document ... ectpoints2
Però puoi trovare un'interessante soluzione leggendo questo thread del Gruppo ufficiale OpenCV:
http://thread.gmane.org/gmane.comp.lib. ... ocus=13302
--------------------
......Myzhar......
...forum admin...
--------------------
......Myzhar......
...forum admin...
--------------------
-

Myzhar - Forum Admin
- Messaggi: 118
- Iscritto il: ven 6 mar 2009, 15:35
- Località: Marina di Massa
Re: Triangolazione
ho dato un'occhiata ai link.
Però non mi è tutto chiaro. In particolare nell'equazione

si parla di matrice dei parametri intrinseci ed estrinseci (di cui sono in possesso) di una sola telecamera . Sbaglio? Allora l'altra telecamera?
grazie
Però non mi è tutto chiaro. In particolare nell'equazione

si parla di matrice dei parametri intrinseci ed estrinseci (di cui sono in possesso) di una sola telecamera . Sbaglio? Allora l'altra telecamera?
grazie
- pasquale.marinaro
- Novellino
- Messaggi: 5
- Iscritto il: mar 25 mag 2010, 9:51
Re: Triangolazione
Forse quest'approccio non è effettivamente il migliore.
Un modo per "rigirare" la frittata è il seguente:
- calibrazione
- stereoRectify (per calcolare Q)
- reprojectImageTo3D
con l'ultima funzione ottieni un'immagine floating point di cui ogni pixel contiene le coordinate 3D del rispettivo punto della mappa di disparità.
Sto attualmente utilizzando questo approccio per un progetto a cui sto lavorando, se decidi di seguirlo ci lavoreremo in parallelo.
Un modo per "rigirare" la frittata è il seguente:
- calibrazione
- stereoRectify (per calcolare Q)
- reprojectImageTo3D
con l'ultima funzione ottieni un'immagine floating point di cui ogni pixel contiene le coordinate 3D del rispettivo punto della mappa di disparità.
Sto attualmente utilizzando questo approccio per un progetto a cui sto lavorando, se decidi di seguirlo ci lavoreremo in parallelo.
--------------------
......Myzhar......
...forum admin...
--------------------
......Myzhar......
...forum admin...
--------------------
-

Myzhar - Forum Admin
- Messaggi: 118
- Iscritto il: ven 6 mar 2009, 15:35
- Località: Marina di Massa
Re: Triangolazione
In precedenza ho utilizzato matlab e il suo toolbox per l'image processing.
Il processo che utilizzavo per la triangolazione era piuttosto complesso e fatto in casa.
Con opencv sono aperto a qualunque strada.
L'approccio seguito fino ad ora è il seguente (ripreso dal libro learning opencv):
riporto alcune righe di codice che ritengo più importanti.
cvStereoCalibrate( &_objectPoints, &_imagePoints1,
&_imagePoints2, &_npoints,
&_M1, &_D1, &_M2, &_D2,
imageSize, &_R, &_T, &_E, &_F,
...);
cvInitUndistortRectifyMap(&_M1,&_D1,&_R1,&_P1,mx1,my1);
cvInitUndistortRectifyMap(&_M2,&_D2,&_R2,&_P2,mx2,my2);
cvRemap( frameTelecameraSx, img1r, mx1, my1 );
cvRemap( frameTelecameraDx, img2r, mx2, my2 );
cvFindStereoCorrespondenceBM( img1r, img2r, disp, BMState);
cvReprojectImageTo3D(disp, image3D, Q);
image3D e Q sono output.
al momento utilizzo 2 telecamere differenti e la mappa di disparità è inguardabile.
al più presto provvederò a recuperare 2 telecamere uguali.
Comunque, volendo, poi, effettuare ad esempio, shape recognition, bisognerebbe farlo sulla mappa di disparità? Oppure effettuarlo sui 2 frame originali, individuare le 2 ROI (nei 2 frame) e poi applicare il processo per il calcolo della mappa di disparità alle 2 ROI?
Mah, sono in alto mare.
Il processo che utilizzavo per la triangolazione era piuttosto complesso e fatto in casa.
Con opencv sono aperto a qualunque strada.
L'approccio seguito fino ad ora è il seguente (ripreso dal libro learning opencv):
riporto alcune righe di codice che ritengo più importanti.
cvStereoCalibrate( &_objectPoints, &_imagePoints1,
&_imagePoints2, &_npoints,
&_M1, &_D1, &_M2, &_D2,
imageSize, &_R, &_T, &_E, &_F,
...);
cvInitUndistortRectifyMap(&_M1,&_D1,&_R1,&_P1,mx1,my1);
cvInitUndistortRectifyMap(&_M2,&_D2,&_R2,&_P2,mx2,my2);
cvRemap( frameTelecameraSx, img1r, mx1, my1 );
cvRemap( frameTelecameraDx, img2r, mx2, my2 );
cvFindStereoCorrespondenceBM( img1r, img2r, disp, BMState);
cvReprojectImageTo3D(disp, image3D, Q);
image3D e Q sono output.
al momento utilizzo 2 telecamere differenti e la mappa di disparità è inguardabile.
al più presto provvederò a recuperare 2 telecamere uguali.
Comunque, volendo, poi, effettuare ad esempio, shape recognition, bisognerebbe farlo sulla mappa di disparità? Oppure effettuarlo sui 2 frame originali, individuare le 2 ROI (nei 2 frame) e poi applicare il processo per il calcolo della mappa di disparità alle 2 ROI?
Mah, sono in alto mare.
- pasquale.marinaro
- Novellino
- Messaggi: 5
- Iscritto il: mar 25 mag 2010, 9:51
Re: Triangolazione
Il tuo è un procedimento analogo al mio... io non ho bisogno di rettificare le immagini perché lo sono già e mi hanno fornito le matrici di calibrazione.
L'approccio che proponi in fondo è difficile da scegliere a priori.
Identificare l'oggetto nelle due immagini è un'operazione pesante, ma sicuramente più precisa.
L'altra è meno precisa, ma tutto dipende dalla mappa di disparità generata.
L'approccio che proponi in fondo è difficile da scegliere a priori.
Identificare l'oggetto nelle due immagini è un'operazione pesante, ma sicuramente più precisa.
L'altra è meno precisa, ma tutto dipende dalla mappa di disparità generata.
--------------------
......Myzhar......
...forum admin...
--------------------
......Myzhar......
...forum admin...
--------------------
-

Myzhar - Forum Admin
- Messaggi: 118
- Iscritto il: ven 6 mar 2009, 15:35
- Località: Marina di Massa
Re: Triangolazione
Ciao, ancora non sono entrato in possesso di due telecamere uguali. Comunque la mappa di disparità generata è migliorata. Sto agendo sulla struttura BMState. Non ho trovato molta documentazione a riguardo, ma variando alcuni parametri c'è un netto miglioramento. Sai come funziona di preciso?
Una volta utilizzata la funzione reprojectImageTo3D, in output ottengo una matrice(Mat3D). Ad ogni coppia di coordinate x,y corrispondono tre coordinate X Y Z del mondo reale?
Come faccio a ricavarmele? E' corretto utilizzare la funzione cvGet3D()?
Inoltre, la matrice di output Mat3D, come viene dichiarata?
Ho provato:
int size[] = {imageSize.height, imageSize.width, 3};
CvMatND* Mat3D= cvCreateMatND( 3,size, CV_16SC3 );
cvReprojectImageTo3D(disparityMap, Mat3D, Q, 0);
infine :
coordinata_Reale_X = cvGet3D(Mat3D, x,y,1);
teoricamente è corretto?
a me da un errore : Bad flag (parameter or structure field) (unrecognized or unsupport array type) in cvGetMat
grazie
Una volta utilizzata la funzione reprojectImageTo3D, in output ottengo una matrice(Mat3D). Ad ogni coppia di coordinate x,y corrispondono tre coordinate X Y Z del mondo reale?
Come faccio a ricavarmele? E' corretto utilizzare la funzione cvGet3D()?
Inoltre, la matrice di output Mat3D, come viene dichiarata?
Ho provato:
int size[] = {imageSize.height, imageSize.width, 3};
CvMatND* Mat3D= cvCreateMatND( 3,size, CV_16SC3 );
cvReprojectImageTo3D(disparityMap, Mat3D, Q, 0);
infine :
coordinata_Reale_X = cvGet3D(Mat3D, x,y,1);
teoricamente è corretto?
a me da un errore : Bad flag (parameter or structure field) (unrecognized or unsupport array type) in cvGetMat
grazie
- pasquale.marinaro
- Novellino
- Messaggi: 5
- Iscritto il: mar 25 mag 2010, 9:51
Re: Triangolazione
Ci sono novità?
- pasquale.marinaro
- Novellino
- Messaggi: 5
- Iscritto il: mar 25 mag 2010, 9:51
8 messaggi
• Pagina 1 di 1
Chi c’è in linea
Visitano il forum: Nessuno e 0 ospiti
