[英]opencv matlab svd return different result
在我的Opencv中,我寫道
float a[12] = {1,2,3,4,5,6,7,8,9,10,11,12};
cv::Mat M = cv::Mat(3,4,CV_32F,a);
cv::Mat e,U,V;
cv::SVDecomp(M, e, U, V, cv::SVD::FULL_UV);
transpose(V,V);
cout<<v<<endl;
我得到了V矩陣:
0.40361759 0.73286617 0.3848317 0.38974935
0.46474412 0.2898497 -0.22260696 -0.80650246
0.52587074 -0.1531668 -0.70928121 0.44375682
0.58699721 -0.59618312 0.54795656 -0.027003769
但是在matlab中,我寫道:
>> M = [1 2 3 4; 5 6 7 8;9 10 11 12];
>> [U,e,V] = svd(M,0)
結果是:
-0.4036 0.7329 0.4453 0.3190
-0.4647 0.2898 -0.8314 -0.0934
-0.5259 -0.1532 0.3270 -0.7701
-0.5870 -0.5962 0.0591 0.5445
為什么最后兩列完全不同? 我該如何解決?
由於矩陣M
的秩僅為2,因此最后兩列向量無關緊要。
嘗試使用滿秩矩陣,例如M = [1,2,-1,4;5,-6,7,8;-9,10,11,12;17,43,21,-9];
您將得到正確的答案。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.