39 lines
749 B
C++
39 lines
749 B
C++
/*
|
|
* tensorInterface.cpp
|
|
* @brief Interfacing tensors template library and gtsam
|
|
* Created on: Feb 12, 2010
|
|
* @author: Frank Dellaert
|
|
*/
|
|
|
|
#include <gtsam/geometry/tensorInterface.h>
|
|
|
|
using namespace std;
|
|
using namespace tensors;
|
|
|
|
namespace gtsam {
|
|
|
|
boost::tuple<int, double, Vector> DLT(const Matrix& A) {
|
|
|
|
// Do SVD on A
|
|
Matrix U, V;
|
|
Vector S;
|
|
svd(A, U, S, V, false);
|
|
|
|
// Find minimum column
|
|
int n = V.size2(), min_j = n - 1, rank = 0;
|
|
for (int j = 0; j < n; j++)
|
|
if (S(j) > 1e-9)
|
|
rank++;
|
|
double min_S = S(min_j);
|
|
for (int j = 0; j < n - 1; j++)
|
|
if (S(j) < min_S) {
|
|
min_j = j;
|
|
min_S = S(j);
|
|
}
|
|
|
|
// Return minimum column
|
|
return boost::tuple<int, double, Vector>(rank, min_S, column_(V, min_j));
|
|
}
|
|
|
|
} // namespace gtsam
|