SAlut,
merci pour ta réponse ....!! par contre je pense que je me suis mal expliqué !!
je vais essayé de reposer la question autrement.
Par exemple je prends en photo un crayon avec les deux cameras,
Mon but est de trouver les coordonnées des points de l'image gauche sur l'image droite: exemple: je sais que le bout du crayon sur limage gauche a la coordonnée suivante : 10, 127. comment faire à partir de cette coordonnée de trouver les coordonnées du bout du crayon sur l'image de droite.
J'utilise les fonctions d'openCV, tout marche bien, j'arrive à calibrer mes deux caméras ensuite j'arrive à rectifier les deux images prises (gauche et droite) et donc j'arrive à mettre tous les points du crayon de limage de gauche sur la même ligne que leurs points correspondants sur limage droite. (Ont le même Y)
Le souci maintenant est de trouver l’écart en X. mes points ont le même Y mais j'arrive pas à trouver l'écart en X, si g bien compris c'est ce que l'on appelle la disparité.
Quand je génère ma carte de disparité avec la fonction suivante:
cvFindStereoCorrespondenceBM( img1r, img2r, disp,BMState)
. j'obtiens une carte de disparité.
Dans la doc de la fonction il y a ceci:
1 2
| void cvFindStereoCorrespondenceBM( const CvArr* left, const CvArr* right,
CvArr* disparity, CvStereoBMState* state ); |
disparity
The output single-channel 16-bit signed disparity map of the same size as input images. Its elements will be the computed disparities, multiplied by 16 and rounded to integer's.
En gros si g bien compris, ça multiplie les disparité par 16 et ça les arrondi à des entiers. Le souci c'est que je n'arrive pas à me servir de ma carte de disparité.
Elle a 640/480 pixels, par exemple la disparité qui est à la coordonnée 12, 30 (par exemple) correspond à quoi ? C'est la disparité que je dois additionner au point de l'image gauche de coordonnée 12,30 pour obtenir son correspondant dans limage de droite ou bien c'est l'inverse ?
Au secours svp, ça fait deux jours que je suis bloqué !!
En fait ce qui me pose un problème concrètement c'est de savoir comment pour un point connu sur l'image gauche trouver automatiquement son correspondant sur l'image droite.
Merci beaucoup !!!!
je peux vous fournir mon code pour la calibration et la rectification!!
J'allais oublier, je ne comprends pas ça :
1 2 3 4
| z =pixel.valuedisparity;
x =pixel.x ;
y =pixel.y;
créer vertex (x,y,z); |
moi je n'ai pas de paramètre .valuedisparity. ma carte qui s'appelle par exemple dismap n'a pas ce paramètre .
Je n'ai que ça
1 2 3 4 5 6
| disp->cols
disp->data
disp->rows
disp->refcount
etc |
et quand je parcours tous les pixels de ma carte de disparité, j'utilise la fonction cvGet2D(disp_map,l,c) où l est la ligne et c la colonne, ça me renvoi des valeurs que je divise par 16. en fin de compte j'obtiens des valeurs que je ne comprends pas trop, j'obtiens une grande série de 65,65,65,65,65.... 63,63,63,63 etc.
merci pour votre aide .......
si vous me débloquez je paye un grand coup
merci
Partager