bonjour
je souhaite faire une cooelation de phase entre des images successives pour déterminer le mouvement de la caméra,le problème c'est que le résultat est abérant(pour un petit mouvement il me retourne un vecteur de translation énorme).
voici mon code, si quelqu'un peut m'aider je serai ravie

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
 
void phase_correlation(IplImage*img1,IplImage*img2)
{ 
IplImage*imf1=cvCreateImage(cvGetSize(img1),IPL_DEPTH_32F,1);
IplImage*dest1=cvCreateImage(cvGetSize(img1),IPL_DEPTH_32F,1);
IplImage*imf2=cvCreateImage(cvGetSize(img2),IPL_DEPTH_32F,1);
IplImage*dest2=cvCreateImage(cvGetSize(img2),IPL_DEPTH_32F,1);
IplImage*C=cvCreateImage(cvGetSize(img1),IPL_DEPTH_32F,1);//là ou on va stocker le rapport des transformées de fourier des deux images
cvConvert(img1,imf1);
cvConvert(img2,imf2);
cvDFT(imf1,dest1,CV_DXT_FORWARD);//trasformée de fourier de l'image de référence
cvDFT(imf2,dest2,CV_DXT_FORWARD);//trasformée de fourier de l'image translatée
cvDiv(dest2,dest1,C);//rapport des transformées de fourier
IplImage*c=cvCreateImage(cvGetSize(C),IPL_DEPTH_32F,1);
cvDFT(C,c,CV_DXT_INVERSE);//transformée de fourier inverse du rapport
CvPoint minloc,maxloc;//points min et max
double minval,maxval;
cvMinMaxLoc(c,&minval,&maxval,&minloc,&maxloc,0);
cout<<"max en ( "<<maxloc.x<<","<<maxloc.y<<") et valeur "<<maxval<<endl;
cout<<"min en ( "<<minloc.x<<","<<minloc.y<<") et valeur "<<minval<<endl;
cvNamedWindow("im1", CV_WINDOW_AUTOSIZE);
cvNamedWindow("im2", CV_WINDOW_AUTOSIZE);
cvShowImage( "im1", img1 );
cvShowImage( "im2", img2 );
cvWaitKey(0);
cvDestroyWindow("im1");
 cvDestroyWindow("im2");
cvReleaseImage(&C);
cvReleaseImage(&c);
cvReleaseImage(&imf1);
cvReleaseImage(&imf2);
cvReleaseImage(&dest1);
cvReleaseImage(&dest2);
}
ce que je constate c'est que les valeurs dans C sont réelles et non complexes, eet je ne pense pas que ce soit normal