SparseMat-Operationen (Sparse-Matrix) in openCV ausführen

9

Ich muss Matrix Operationen (hauptsächlich multiplizieren und inverse) einer sparse Matrix SparseMat in OpenCV machen.
Ich habe festgestellt, dass Sie Werte nur in SparseMat iterieren und einfügen können.
Gibt es einen externen Code, den ich verwenden kann? (oder fehle ich etwas?)

    
Boaz 29.07.2011, 11:14
quelle

3 Antworten

6

Es ist nur so, dass dünn besetzte Matrizen nicht wirklich für Inversion oder Matrix-Matrix-Multiplikation geeignet sind, also ist es ziemlich vernünftig, dass es dafür keine eingebaute Funktion gibt. Sie werden eigentlich mehr für die Matrix-Vektor-Multiplikation verwendet (normalerweise, wenn iterative lineare Systeme gelöst werden).

Was Sie tun können, ist, N lineare Systeme (mit den Spalten der Identitätsmatrix als rechte Seiten) zu lösen, um die inverse Matrix zu erhalten. Aber dann brauchen Sie sowieso N * N Speicher für die inverse Matrix, also wäre es besser, eine dichte Matrix mit einem üblichen Dekompositionsalgorithmus zu verwenden, da der Leistungsgewinn bei N iterativen Lösungen nicht so hoch ist. Oder vielleicht einige spärliche direkte Löser wie SuperLU oder TAUCS kann helfen, aber ich bezweifle, dass OpenCV solche Funktionalitäten hat.

Sie sollten auch überlegen, ob Sie wirklich die inverse Matrix benötigen. Oft ist ein solches Problem auch lösbar, indem einfach ein lineares System gelöst wird, was mit einer dünn besetzten Matrix recht einfach und schnell über z.B. CG oder BiCGSTab.

    
Christian Rau 29.07.2011, 12:34
quelle
-2

Sie können eine SparseMat in eine Matte umwandeln, die benötigten Operationen ausführen und dann zurück konvertieren.

    
splade 15.02.2014 02:54
quelle
-5

Sie können die Bibliothek Eigen direkt verwenden. Eigen arbeitet sehr gut mit OpenCV zusammen.

    
splade 15.02.2014 04:06
quelle

Tags und Links