【问题标题】:OpenCV SVD returns different result than MATLAB [duplicate]OpenCV SVD返回与MATLAB不同的结果[重复]
【发布时间】:2014-05-17 23:27:52
【问题描述】:

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

谢谢。

【问题讨论】:

    标签: c++ matlab opencv svd


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-04-09
        • 2023-03-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-09-26
        • 1970-01-01
        相关资源
        最近更新 更多