Выполнение операций SparseMat (разреженная матрица) в openCV - PullRequest
9 голосов
/ 29 июля 2011

Мне нужно сделать матричные операции (в основном, умножения и инверсии) разреженной матрицы SparseMat в OpenCV.
Я заметил, что вы можете только перебирать и вставлять значения в SparseMat.
Есть ли внешний код, который я могу использовать?(или я что-то упустил?)

Ответы [ 3 ]

6 голосов
/ 29 июля 2011

Просто разреженные матрицы на самом деле не подходят для инверсии или умножения матрицы на матрицу, поэтому вполне разумно, что для этого нет встроенной функции. На самом деле они больше используются для умножения матрицы на вектор (обычно при решении итерационных линейных систем).

Что вы можете сделать, это решить N линейных систем (со столбцами единичной матрицы справа), чтобы получить обратную матрицу. Но тогда вам все равно понадобится N * N хранилища для обратной матрицы, так что использование плотной матрицы с обычным алгоритмом разложения будет лучшим способом сделать это, так как прирост производительности не будет таким высоким при выполнении N итерационных решений. Или, может быть, некоторые редкие прямые решатели, такие как SuperLU или TAUCS , могут помочь, но я сомневаюсь, что OpenCV обладает такими функциями.

Вам также следует подумать, действительно ли вам нужна обратная матрица. Часто такие проблемы также решаются простым решением линейной системы, что может быть выполнено с разреженной матрицей довольно легко и быстро, например, с помощью CG или BiCGStab.

0 голосов
/ 15 февраля 2014

вы можете напрямую использовать библиотеку Eigen . Eigen очень хорошо работает вместе с OpenCV .

0 голосов
/ 15 февраля 2014

Вы можете конвертировать SparseMat в коврик, выполнять необходимые операции, а затем конвертировать обратно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...