C++ OpenCV SVD返回的结果与MATLAB不同

C++ OpenCV SVD返回的结果与MATLAB不同,c++,matlab,opencv,svd,C++,Matlab,Opencv,Svd,我使用SVD函数来获取值。 在我的Opencv中,我写道 Mat w, u, vt; SVD::compute(A, w, u, vt); 将这些值与MATLAB进行比较后,u和vt矩阵似乎与MATLAB返回的值不匹配。这些值实际上是匹配的,但有时,U(:1)和VT(:1)会从OpenCV返回的值中取反。有时,VT元素被否定和翻转。虽然U*VT返回的值与MATLAB相同,但U和VT本身与MATLAB不同(随机),我不确定是什么导致了这种情况。我正在使用OpenCV 2.4,你能帮我解决这个问题

我使用SVD函数来获取值。 在我的Opencv中,我写道

Mat w, u, vt;
SVD::compute(A, w, u, vt);
将这些值与MATLAB进行比较后,u和vt矩阵似乎与MATLAB返回的值不匹配。这些值实际上是匹配的,但有时,U(:1)和VT(:1)会从OpenCV返回的值中取反。有时,VT元素被否定和翻转。虽然U*VT返回的值与MATLAB相同,但U和VT本身与MATLAB不同(随机),我不确定是什么导致了这种情况。我正在使用OpenCV 2.4,你能帮我解决这个问题吗


谢谢。

这可能是因为奇异值的顺序不同,即在
A=u w vt
中,对角矩阵
w
(奇异值)的条目顺序与MATLAB不同。在MATLAB中,奇异值在主对角线上按降序排列

奇异值分解只定义到一个符号;U和V的符号是任意的,如果MATLAB和OpenCV之间的符号不同,则不表示存在问题