Bry*_*yan 14 matlab opencv linear-algebra svd
我想知道为什么Matlab和OpenCV中的SVD计算结果存在符号差异.我输入相同的矩阵
3.65E+06 -2.09E+06 0
YY = -2.09E+06 2.45E+06 0
0 0 0
[U,S,V] = svd(YY);//Matlab
-0.798728902689475 0.601691066917623 0
V = 0.601691066917623 0.798728902689475 0
0 0 1
cv::SVD::compute(YY, S, U, V);//opencv
0.798839 -0.601544 0
V = 0.601544 0.798839 0
0 0 1
Run Code Online (Sandbox Code Playgroud)
我知道他们使用相同的算法,为什么有符号差异?谢谢
Bul*_*ull 12
您使用的是哪个版本的OpenCV?
从http://code.opencv.org/issues/1498 看来,OpenCV的最新版本似乎不再使用LAPACK来进行SVD(我认为Matlab使用它).因此,使用相同算法的假设可能不正确.
当然YY = U S V'
如果否定U和V的第一列:
U(:,1)=-U(:,1);
V(:,1)=-V(:,1)
Run Code Online (Sandbox Code Playgroud)
你会发现U S V'仍然等于YY.这适用于您的特定情况,因为YY是对称的(YY = YY').