2014-05-17 90 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之間不同,並不表示問題。