2014-05-17 59 views
0

我正在使用SVD函数来获取值。 在我opencv的,我写OpenCV SVD返回与MATLAB不同的结果

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,你能帮我解决这个问题吗?

谢谢。

回答

1

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

1

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