cvSVD计算EigenValues时出错

时间:2011-10-24 12:33:38

标签: opencv

我遇到了cvSVD方法的问题。我正在尝试计算对称方矩阵的EigenValues和EigenVectors。

我将它应用于(5 * 5)矩阵,我得到了正确的答案。但是当我将它应用于(3 * 3)矩阵时,EigenValues是错误的!

CvMat* matt = cvCreateMat(3,3,CV_32FC1);
cvZero(matt);

CV_MAT_ELEM( *matt, float, 0, 0 ) = 1.0;
CV_MAT_ELEM( *matt, float, 0, 1 ) = 3.0;
CV_MAT_ELEM( *matt, float, 0, 2 ) = 5.0;

CV_MAT_ELEM( *matt, float, 1, 0 ) = 0.142857;
CV_MAT_ELEM( *matt, float, 1, 1 ) = 1.0;
CV_MAT_ELEM( *matt, float, 1, 2 ) = 1.0;

CV_MAT_ELEM( *matt, float, 2, 0 ) = 0.111111;
CV_MAT_ELEM( *matt, float, 2, 1 ) = 0.2;
CV_MAT_ELEM( *matt, float, 2, 2 ) = 1.0;

CvMat* Ut  = cvCreateMat(3,3,CV_32FC1);
CvMat* Dt  = cvCreateMat(3,3,CV_32FC1);
CvMat* Vt  = cvCreateMat(3,3,CV_32FC1);
CvMat* Resultt  = cvCreateMat(3,3,CV_32FC1);
cvSVD(matt, Dt, Ut, Vt, CV_32FC1); // A = U D V^T
cvMatMul(Ut,Vt,Resultt);

cout<<"EigenValues"<<endl;
cout<<cvmGet(Dt,0,0)<<endl;
cout<<cvmGet(Dt,1,1)<<endl;
cout<<cvmGet(Dt,2,2)<<endl;

The output is:
EigenValues
6.15042
0.485238
0.0978629

The correct output is:
2.2509
0.2719
0.4771

我在(5 * 5)矩阵上应用了SAME方式,输出正确。我错过了什么吗?有什么建议吗?!

谢谢!

1 个答案:

答案 0 :(得分:0)

这似乎是OpenCV中的一个错误,你可以在这里看到https://code.ros.org/trac/opencv/ticket/1370 它是在最新的OpenCV版本中修复的。

您可以按照此处的说明下载并自行编译: http://opencv.willowgarage.com/wiki/InstallGuide