我正在使用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,你可以帮我解决这个问题吗?
感谢。
答案 0 :(得分:1)
可能是因为奇异值的排序方式不同,即在A = u w vt
中,对角矩阵w
(奇异值)的条目与MATLAB的排序方式不同。在MATLAB中,奇异值在主对角线上按降序排列。
答案 1 :(得分:1)
奇异值分解仅定义为符号; U和V的符号是任意的,如果它们在MATLAB和OpenCV之间不同,则表明没有问题。