Bien le bonjour a tous ... je suis confronte a un probleme lors de lutilisation de cvSVD, en effet, celle-ci ne me donne pas les resultats escomptes ...
J'utilise pour tester, l'exmple de svd sur wikipedia, et scilab pour confirmer les resultats ...
voici mon code :
int nbrpoints = 4;
CvMat* A = cvCreateMat(nbrpoints,5,CV_64FC1);
CvMat* U = cvCreateMat(nbrpoints,nbrpoints,CV_64FC1);
CvMat* D = cvCreateMat(nbrpoints,5,CV_64FC1);
CvMat* V = cvCreateMat(5,5,CV_64FC1);
cvmSet(A,0,0,1 );
cvmSet(A,0,1,0 );
cvmSet(A,0,2,0 );
cvmSet(A,0,3,0 );
cvmSet(A,0,4,2 );
cvmSet(A,1,0,0 );
cvmSet(A,1,1,0 );
cvmSet(A,1,2,3 );
cvmSet(A,1,3,0 );
cvmSet(A,1,4,0 );
cvmSet(A,2,0,0 );
cvmSet(A,2,1,0 );
cvmSet(A,2,2,0 );
cvmSet(A,2,3,0 );
cvmSet(A,2,4,0 );
cvmSet(A,3,0,0 );
cvmSet(A,3,1,4 );
cvmSet(A,3,2,0 );
cvmSet(A,3,3,0 );
cvmSet(A,3,4,0 );
cvSVD(A, D, U, V, CV_SVD_V_T);
j'ai comme resultats :
D
4.000000 0.000000 0.000000 0.000000 0.000000
0.000000 3.000000 0.000000 0.000000 0.000000
0.000000 0.000000 2.236068 0.000000 0.000000
0.000000 0.000000 0.000000 0.000000 0.000000
U
0.000000 -0.000000 -1.000000 0.000000
0.000000 -1.000000 -0.000000 0.000000
0.000000 -0.000000 -0.000000 1.000000
-1.000000 -0.000000 -0.000000 0.000000
V
-0.000000 -1.000000 0.000000 0.000000 0.000000
-0.000000 0.000000 -1.000000 -0.000000 -0.000000
-0.447214 -0.000000 -0.000000 -0.000000 -0.894427
0.000000 0.000000 0.000000 -1.000000 0.000000
-0.894427 -0.000000 0.000000 0.000000 0.447214
Wikipedia donne comme resultats :
U
0 0 1 0
0 1 0 0
0 0 0 -1
1 0 0 0
V
0 1 0 0 0
0 0 1 0 0
0.447 0 0 0 0.894
0 0 0 1 0
-0.894 0 0 0 0.447
D
4 0 0 0
0 3 0 0
0 0 2.236 0
Enfin Scilab me donne les resultats suivant :
D
4 0 0 0
0 3 0 0
0 0 2.236 0
U
0 0 1 0
0 1 0 0
0 0 0 -1
1 0 0 0
V
0 0 0.447 0 -0.894
1 0 0 0 0
0 1 0 0 0
0 0 0 1 0
0 0 -0.894 0 0.447
Je n'y connais tellement rien en svd ... si quelqu'un a la moindre petite idee d'ou peut prevenir mon probleme ... bah ... trop cool![]()
Partager