2011-07-21 90 views
1

這裏是我想反轉origial矩陣:矩陣的cvInvert()返回0矩陣?但在Matlab返回的實際值

rows: 5 
    cols: 5 
    dt: f 
    data: [ 927321., 1014163., 923303., 923303., 947641., 1014163., 
     1260101., 1062130., 1062130., 1102823., 923303., 1062130., 
     1004488., 1004488., 990651., 923303., 1062130., 1004488., 
     1004488., 990651., 947641., 1102823., 990651., 990651., 1116004. ] 

,並使用此行反轉上述矩陣:

cvInvert(Mult, Inv, CV_LU); 

矩陣返回倒數是這個後:

rows: 5 
    cols: 5 
    dt: f 
    data: [ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 
     0., 0., 0., 0., 0., 0., 0., 0., 0., 0. ] 

並且根據文檔:

在LU方法的情況下,函數返回src1行列式 (src1必須是正方形)。如果它是0,矩陣不倒置,並且src2 填充零。

但奇怪的是,我問我的朋友在Matlab中使用相同的矩陣做同樣的事情,它返回一個非零矩陣..這意味着行列式不是零..那麼爲什麼opencv認爲行列式爲零?

感謝

+0

任何溢出的機會?這些數字有點大,但我不熟悉Opencv上float/double/numbers的內存大小來確定地說。 –

回答

0

據一項網上矩陣變換器,逆是:
0.000 0.000 0.000 0.000 0.000
0.000 0.000 0.000 0.000 0.000
0.000 0.000 68719476736.000 -68719476736.000 0.000
0.000 0.000 -68719476736.000 68719476736.000 0.000
0.000 0.000 0.000 0.000 0.000

這是一個非常奇怪的看着矩陣,其餘條款是非常非常巨大的。這意味着在線計算器存在問題,因爲確定性如此之大,您的例程由於尺寸或兩者都溢出確定。我願意打賭,MatLab不會有這些類型的大小限制,因此它的有效價值。

+1

什麼是我規範化的價值?應該修復溢出?無論如何規範化opencv的值? – StuckInPhD

+0

標準化會改變你的逆向。我想知道這個非常大的5x5矩陣是如何獲得的,或者如果可以收縮的價值是什麼? –

+0

這個矩陣是通過將矩陣乘以它的轉置而獲得的。我用矩陣和我用來乘它們的線更新了上述問題。我在想我的乘冪法在某種程度上是錯誤的。 – StuckInPhD

1

給定的矩陣是秩虧(行列式爲零),因此您無法計算其逆。