opencv中的Matlab SVD输出

Sae*_*deh 4 matlab opencv svd

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

[U,S,V] = svd(X) 
Run Code Online (Sandbox Code Playgroud)

我们可以使用S Matrix找到最小可能数量的组件,以减少X的维数以保持足够的方差.我的问题是如何使用Opencv 找到SMatrix(而不是UMatrix),是否可以使用OpenCV SVD中的内置版本找到S Matrix?我的意思是OpenCV SVD函数输出三个矩阵,如Matlab一个,但我不知道它们是否相同.这是OpenCV中的SVD:

SVD::compute(InputArray src, OutputArray w, OutputArray u, OutputArray vt, int flags=0 ) 
Run Code Online (Sandbox Code Playgroud)

这是Matlab SVD:

[U,S,V] = svd(X).
Run Code Online (Sandbox Code Playgroud)

谢谢.

Kam*_*ity 9

SMatlab和wOpenCV 之间有一个简单的区别.

举个例子:

A = [2, 4;
     1, 3;
     0, 0;
     0, 0]
Run Code Online (Sandbox Code Playgroud)

在Matlab中,S将是:

S = [5.47, 0   ;
     0   , 0.37;
     0   , 0   ;
     0   , 0   ]
Run Code Online (Sandbox Code Playgroud)

但openCV给出以下内容w:

w = [5.47; 0.37]
Run Code Online (Sandbox Code Playgroud)

因此,OpenCV给出一个奇异值数组,如果你真的想拥有S矩阵,你可以创建一个新矩阵并将w's元素放在对角线上.