bonjour a tous
je voudrais connaitre les etapes (fonctions ) a faire pour avoir la rectification
Ps : j'ai la matrice fondamentale de mes images
Merci
bonjour a tous
je voudrais connaitre les etapes (fonctions ) a faire pour avoir la rectification
Ps : j'ai la matrice fondamentale de mes images
Merci
J'avais donné quelques éléments ici :
http://www.developpez.net/forums/d51...orrespondance/
et ici :
http://www.developpez.net/forums/d51...ysteme-stereo/
Je voulais syntétiser tout ça dans une explication, avec code mais le temps m'a manqué.... comme toujours au fond
J'essayerai d'y revenir si il ya des questions plus précises
le message le plus précis est je pense le #10
http://www.developpez.net/forums/d51...o/#post3208105
=>
OpenCv Addict
slt
merci pour tes repenses vinsss84 sa ma eait utiles , cependant mes problémes sont plus précise que ça
j'ai ecris un code et je voudrai savoir si vous remarquer un quelconque prob
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91 CvMatrix3 matrix; CvMatrix3* matrixF; for(int i=0;i<3;i++) for(int j=0;j<3;j++) { matrix.m[i][j]=(float)cvmGet(Fmatrix,0,1); } matrixF=&matrix; RightImage=cvCloneImage(RectifD); LeftImage=cvCloneImage(RectifG); CvSize ImgSize; ImgSize.width=RightImage->width*3; ImgSize.height=RightImage->height*3; int line_count; cvMakeScanlines(0,ImgSize,0,0,0,0,&line_count); line_count=2400; int* scanlines1; int* scanlines2; int* scanlinesA; scanlines1=(int*)(calloc( line_count * 2, sizeof(int) * 4)); scanlines2=(int*)(calloc( line_count * 2, sizeof(int) * 4)); scanlinesA=(int*)(calloc( line_count * 2, sizeof(int) * 4)); int* lenghts1; int* lenghts2; int* lenghts; lenghts1=(int*)(calloc( line_count * 2, sizeof(int)*4)); lenghts2=(int*)(calloc( line_count * 2, sizeof(int)*4)); lenghts=(int*)(calloc( line_count * 2, sizeof(int)*4)); uchar* dst1; dst1=(uchar*)(malloc(ImgSize.width * (line_count) * 3 * sizeof(uchar))); uchar* dst2; dst2=(uchar*)(malloc(ImgSize.width * (line_count) * 3 * sizeof(uchar))); uchar* dst_pix; dst_pix=(uchar*)(calloc(ImgSize.width * (ImgSize.height+1), 3 * sizeof(uchar))); int* runs1; int* runs2; runs1=(int*)(calloc(ImgSize.width * ImgSize.height * 2, 2 * sizeof (int))); runs2=(int*)(calloc(ImgSize.width * ImgSize.height * 2, 2 * sizeof (int))); int* first_corr; int* second_corr; first_corr=(int*)(calloc(ImgSize.width * ImgSize.height * 2, 2 * sizeof(int))); second_corr=(int*)(calloc(ImgSize.width * ImgSize.height * 2, 2 * sizeof(int))); int* num_runs1; int* num_runs2; num_runs1=(int*)(calloc(ImgSize.width * ImgSize.height * 2, 2 * sizeof(int))); num_runs2=(int*)(calloc(ImgSize.width * ImgSize.height * 2, 2 * sizeof(int))); ImgSize.width=RightImage->width; ImgSize.height=RightImage->height; cvMakeScanlines(matrixF,ImgSize,0,0,0,0,&line_count); cvMakeScanlines(matrixF,ImgSize,scanlines1,scanlines2,lenghts1,lenghts2,&line_count) ; IplImage* image1=cvCreateImage(cvGetSize(RightImage),8,3); image1=cvCloneImage(RightImage); cvPreWarpImage(line_count,image1,dst1,lenghts1,scanlines1); IplImage* image2=cvCreateImage(cvGetSize(LeftImage),8,3); image2=cvCloneImage(LeftImage); cvPreWarpImage(line_count,image2,dst2,lenghts2,scanlines2); RectifG=cvCloneImage(image2); RectifD=cvCloneImage(image1); DisplayImage("Image gauche Rectifiée",RectifG,0); DisplayImage("Image droite Rectifiée",RectifD,1); if (scanlines1 != 0) free (scanlines1); if (scanlines2 != 0) free (scanlines2); if (lenghts1 != 0) free (lenghts1); if (lenghts2 != 0) free (lenghts2); if (dst1 != 0) free (dst1); if (dst2 != 0) free (dst2); scanlines1 = 0; scanlines2 = 0; lenghts1 = 0; lenghts2 = 0; dst1 = 0; dst2 = 0;
RectifD et RectifG sont mes images originales
et voila merci
en tout cas moi je charche qu'a avoir les images rectifiée dc je ss supposé prendre les resultat sur cvPreWarpImage()
je suis pris par le temps donc toute aide est la bien venue
un grand Merci a tous
J'ai pas compris grand chose à ce que tu essayes de faire
En tout pas je ne suis jamais arrivé a rien avec ces fonctions la d'openCv (elles sont a mon gout très mal documentées et inutilisables.
Le plus "simple" est, à mon sens de réaliser un vrai calcul de matrice de rectification (matrice de rotation spatiale) et d'appliquer ensuite cette matrice à tes images.
Va voir du côté des travaux d'A.Fusiello, c'ets à mon gout la rectification la plus simple à mettre en place.
=>
OpenCv Addict
bonjour
t'as raison pour les fonctions d'opencv en plus le header cvprewarp() est introuvable
j'ai vu un peu les travaux de fusiello et sa m'interesse car c'est asser simple comme tu dis
mais il faudrai calculer la SVD du critaire coméme
bon j'ai deux class . une pour la SVD et une autre pour le calcul de H1,H2 a partir de F
je compte poster mon code si j'arrive a le faire marcher car j'ai remarquer qu' y avait un manque en ça sur net .
aller a +
J'ai codé tout ça perso mais reaproprier le code pour le mettre a disposition me prendrait bien trop de temps par rapport a celui dont je dispose :/
=>
OpenCv Addict
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager