OpenCV SVD返回的结果与MATLAB不同

时间:2014-05-17 05:00:49

标签: 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,你可以帮我解决这个问题吗?

感谢。

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

奇异值分解仅定义为符号; U和V的符号是任意的,如果它们在MATLAB和OpenCV之间不同,则表明没有问题。