Bonjour,

Je travaille sur l'estimation d'homographie à partir de points appariés dans deux iamges dans une application où je travaille avec OpenCV et je souhaite implanter une méthode basée sur la SVD (méthode de Hartley). J'aimerais donc utiliser la fonction cvSVD d'OpenCV seulement, même si elle ne plante pas le moins du monde, les résultats renvoyés sont aberrants, contrairement à ceux obtenus sous Matlab avec les mêmes données.
Y a-t-il quelque chose de particulier à savoir sur l'utilisation de cette fonction ?
Voici une partie de mon code :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
 
 
CvMat AMat = cvMat(nb_pts, 4, CV_32FC1, A), VMat = cvMat(4, 4, CV_32FC1, V), *UMat = cvCreateMat(nb_pts, 4, CV_32FC1), SMat = cvMat(4, 1, CV_32FC1, S);
 
cvSVD(&AMat, &SMat, UMat, &VMat, CV_SVD_MODIFY_A);
où A, V et S sont des tableaux de double alloués avec cvAlloc dont les tailles correspondent à celles entrées pour la création de CvMat (nb_pts=16 dans mon travail du moment).
A contient des coordonnées sous la forme suivante :
A_i = [x_i, y_i, x_i', y_i']
où (x,y) sont les coordonnées d'un point dans l'image 1 et (x',y') celles du point correspondant dans l'image 2. En voici un exemple :

0.4550 0.1182 0.4543 0.1185
-1.7094 1.1855 -1.7093 1.1856
-1.7154 0.1454 -1.7157 0.1452
0.4037 0.1705 0.4039 0.1711
0.8219 -0.9531 0.8215 -0.9528
0.3991 0.1175 0.3991 0.1175
0.6858 -0.9501 0.6853 -0.9504
0.3883 1.2441 0.3877 1.2450
0.4021 -0.9547 0.4027 -0.9550
1.0180 -0.9437 1.0182 -0.9430
1.0117 1.2412 1.0119 1.2414
0.4032 -0.9021 0.4032 -0.9021
-1.6643 0.1454 -1.6646 0.1458
0.3859 1.1893 0.3876 1.1883
-1.6869 -0.8909 -1.6870 -0.8909
0.4012 0.0374 0.4010 0.0356

Matlab donne, pour les valeurs singulières :

5.76 4.61 0.002 0.001

Alors que cvSVD donne :

8046.48 9.83e-5 0 0

Merci d'avance pour vos lumières car je ne vois vraiment pas le problème...

Gus