15

Matlab と OpenCV で SVD 計算の結果に符号の違いがあるのはなぜでしょうか。同じ行列を入力します

          3.65E+06  -2.09E+06   0
 YY =    -2.09E+06  2.45E+06    0
           0         0          0

[U,S,V] = svd(YY);//Matlab


        -0.798728902689475  0.601691066917623   0
   V =  0.601691066917623   0.798728902689475   0
         0                  0                   1

cv::SVD::compute(YY, S, U, V);//opencv

     0.798839   -0.601544   0
V =  0.601544   0.798839    0
     0          0           1

同じアルゴリズムを使用していることは知っていますが、符号の違いがあるのはなぜですか? ありがとう

4

3 に答える 3

12

どのバージョンの OpenCV を使用していますか?

http://code.opencv.org/issues/1498から 、最近のバージョンの OpenCV では LAPACK を使用して SVD を実行していないようです (Matlab で使用されているように)。したがって、同じアルゴリズムが使用されているという仮定は正しくない可能性があります。

もちろん YY=U S V'

U と V の最初の列を否定すると、次のようになります。

U(:,1)=-U(:,1);
V(:,1)=-V(:,1)

U S V' は依然として YY に等しいことがわかります。YY は対称 (YY=YY') であるため、これは特定のケースで機能します。

于 2013-04-19T07:28:43.327 に答える
3

SVD の結果は一意である必要はありません。たとえば、任意のユニタリ V = U の I = UIV' です。特に上記の例はランク不足であるため、一意性を期待する理由はありません。

于 2014-07-23T20:16:20.357 に答える
2

特異値分解は符号までしか定義されていません。U と V の符号は任意であり、MATLAB と OpenCV の間で符号が異なっていても問題はありません。

于 2014-05-18T10:26:15.333 に答える