【问题标题】:Matlab SVD output in opencvopencv中的Matlab SVD输出
【发布时间】:2012-08-15 07:13:06
【问题描述】:

在Matlab SVD函数中输出三个矩阵:

[U,S,V] = svd(X) 

我们可以使用 S 矩阵找到尽可能少的分量,以减少 X 的维数以保留足够的方差。 我的问题是如何使用 Opencv 找到 S 矩阵(不是 U 矩阵),是否可以使用 OpenCV SVD 中的构建找到 S 矩阵?我的意思是 OpenCV SVD 函数像 Matlab 一样输出三个矩阵,但我不知道它们是否相同。 这是 OpenCV 中的 SVD:

SVD::compute(InputArray src, OutputArray w, OutputArray u, OutputArray vt, int flags=0 ) 

这是 Matlab SVD:

[U,S,V] = svd(X).

谢谢。

【问题讨论】:

    标签: matlab opencv svd


    【解决方案1】:

    我很确定实际计算 SVD 分解的后端对于 MATLAB 和 OpenCV 是相同的(我认为在这两种情况下都是使用 LAPACK 完成的)。所以你想要做的似乎很容易。

    您可以通过创建一个与 src 大小相同且处处为零且 w 中的值沿对角线的矩阵来将 w 转换为 S。只是数据结构的简单改变,值是一样的。

    【讨论】:

    【解决方案2】:

    Matlab 中的 S 和 OpenCV 中的 w 之间有一个简单的区别。

    举个例子:

    A = [2, 4;
         1, 3;
         0, 0;
         0, 0]
    

    在 Matlab 中,S 将是:

    S = [5.47, 0   ;
         0   , 0.37;
         0   , 0   ;
         0   , 0   ]
    

    但是 openCV 给出了以下w

    w = [5.47; 0.37]
    

    所以,OpenCV 给出了一个奇异值数组,如果你真的想要 S 矩阵,你可以创建一个新矩阵并将w 的元素放在它的对角线上。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-04-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-12
      • 2019-02-05
      相关资源
      最近更新 更多