我遇到了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方式,输出正确。我错过了什么吗?有什么建议吗?!
谢谢!
答案 0 :(得分:0)
这似乎是OpenCV中的一个错误,你可以在这里看到https://code.ros.org/trac/opencv/ticket/1370 它是在最新的OpenCV版本中修复的。
您可以按照此处的说明下载并自行编译: http://opencv.willowgarage.com/wiki/InstallGuide