在OpenCV的Matlab的SVD输出(Matlab SVD output in opencv)

2019-09-21 09:21发布

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

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

我们可以使用S矩阵,以找到组件的数量尽可能少,以减少X的尺寸,以保留足够的差异。 我的问题是如何找到S矩阵(不U使用opencv矩阵),是否有可能找到S矩阵使用建立在OpenCV的SVD? 我的意思是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).

谢谢。

Answer 1:

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

就拿这个例子:

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的在其对角线元素。



Answer 2:

我敢肯定,实际计算SVD分解后端是MATLAB和OpenCV(我想在这两种情况下,它与LAPACK完成)相同。 所以,你想要做的是,似乎很容易。

您可以通过在W向对角线创建与海内外零和值SRC相同大小的矩阵转换w至S上。 这是数据结构的只是一个简单的变化,该值将是相同的。



文章来源: Matlab SVD output in opencv