在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)
谢谢.
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元素放在对角线上.