主要想用eigen 的svd替換opencv的svd結果發現點問題。記錄一下防止忘了吧。
第乙個例子 。row大於col 兩組v結果是一致的。大小為5*5
int row = 9;
int col = 5;
std::vector> vec,,,
,,,,
,};cv::mat mat(row, col, cv_64fc1);
for (int y = 0; y < row; ++y)
}cv::mat w, u, vt, v;
cv::svd::compute(mat, w, u, vt, 4);
cout << "vt opecv = " << endl << vt.t() << endl;
// mat ee = mat(vt.t()).colrange(row, col) * 1.0;
// cout << "ee opencv = " << endl << ee << endl << endl;
matrixxd ddd = eigen::matrixxd::zero(row, col);
int cha = q.channels();
for (int i = 0; i < row; i++)
}jacobisvdsvd(ddd, computethinu | computethinv);
matrixxd u1, s1, v1;
vectorxd vs = svd.singularvalues();
u1 = svd.matrixu();
v1 = svd.matrixv();
cout << "v1 eigen = " << endl << v1 << endl << endl;
輸出:自己跑程式看一眼吧 不愛貼圖了。
改為 row小於col 結果就有很大不同了。首先opencv的結果v是乙個9*9的陣列。eigen結果是9*5的陣列
並且 opencv的v結果的轉置的前5列就是eigen求得的v陣列
int row = 5;
int col = 9;
std::vector> vec,,,
,,,,
,};cv::mat mat(row, col, cv_64fc1);
for (int y = 0; y < row; ++y)
}cv::mat w, u, vt, v;
cv::svd::compute(mat, w, u, vt, 4);
cout << "vt opecv = " << endl << vt.t() << endl;
// mat ee = mat(vt.t()).colrange(row, col) * 1.0;
// cout << "ee opencv = " << endl << ee << endl << endl;
matrixxd ddd = eigen::matrixxd::zero(row, col);
int cha = q.channels();
for (int i = 0; i < row; i++)
}jacobisvdsvd(ddd, computethinu | computethinv);
matrixxd u1, s1, v1;
vectorxd vs = svd.singularvalues();
u1 = svd.matrixu();
v1 = svd.matrixv();
cout << "v1 eigen = " << endl << v1 << endl << endl;
續:查到問題了 對eigen不熟悉啊 computethinu這個值改改就好 改改 但是 轉置是逃不掉得了.
再加乙個:bdcsvd eigen一共有兩種svd分解方法。乙個是jacobisvd乙個是bdcsvd 。用法類似。
矩陣入門(Eigen和Opencv類似)
1 eigen矩陣定義 eigen定義 型別 行 列 matrix eg.matrix型別為浮點型3行4列的矩陣 1 2 3 4 2 2 3 4 3 2 3 4 2 預定義的特殊矩陣vector列矩陣 rowvector行矩陣 eg.vector3d matrix 為3行1列的矩陣 eg.rowve...
Eigen(安裝與使用)
eigen是乙個c 開源線性代數庫。它提供了快速的有關矩陣的線性代數運算,還包括解方程等功能。g2o sophus也都使用eigen來進行矩陣計算。安裝eigensudo apt get install libeigen3 dev查詢eigen在 sudo updatedb locate eigen...
KDL與Eigen資料轉換
在ros使用過程中,kdl和eigen是使用比較多的兩個庫了,兩個庫都各有優勢。比如kdl是針對機械人運動學的,可以用來求解正逆向運動學,速度 雅克比矩陣等,也支援力的表述,很方便,但對矩陣運算卻不是那麼方便,eigen有著強大的矩陣計算能力。其實kdl內部有些資料結構也是採用eigen的,比如jn...